网络笔记 —— TCP & UDP 能否公用端口

网络笔记 —— TCP & UDP 能否公用端口

本系列,是自己学习网络过程中的笔记。
希望读者在看完全文后,也能留下你们的经验或者问题。
如果能从这里学到点东西,记得请我喝杯☕☕☕~

—— MinRam

一、问题

  • TCP和UDP是否可以同时监听同一端口?

二、答案

  • 可以,就同一应用程序来说,TCP服务和UDP服务可以共有同一端口。

三、思路

监听,只存在于TCP协议中,UDP只用绑定。

3.1 端口

首先理解这里的端口

这里的端口,指传输层使用的协议端口,是抽象的软件端口。

应用程序(进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。

在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问之。

所以可以说,端口是用于传输层用来辨识同一台机子上的应用程序的。共有同一端口,即他们的终点都是同一个应用程序。

3.2 TCP & UDP

其次,能否共有端口,需要我们理解TCP & UDP的关系。

TCP/IP传输层的两个协议TCP和UDP在内核上是完全独立的两个软件模块,因此各自的端口号也相互独立。双方都无法知道彼此端口的使用情况,也就无法进行占用验证。

如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。

所以,我们可以从功能设计上理解,一个应用程序应既能使用TCP协议,又能使用UDP协议,两者应该共存,也就是TCP & UDP能共用一个端口。

3.3 TCP 四元组

四、知识拓展

  • 多个TCP服务是否可以绑定同一端口
  • 客户端的端口可以重复使用吗?
  • 客户端 TCP 连接 TIME_WAIT 状态过多,会导致端口资源耗尽而无法建立新的连接吗?

五、参考

  1. Linux源码分析
  2. TCP&UDP共用一个端口
  3. 字节面试题:TCP&UDP共用一个端口

网络笔记 —— TCP & UDP 能否公用端口

https://minram.github.io/wang-luo-bi-ji/network-tcp-udp-sameport/

作者

MinRam

发布于

2023-05-11

更新于

2023-05-11

Licensed under

评论