网络笔记 —— 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 状态过多,会导致端口资源耗尽而无法建立新的连接吗?
五、参考
网络笔记 —— TCP & UDP 能否公用端口
https://minram.github.io/wang-luo-bi-ji/network-tcp-udp-sameport/