TCP 和 UDP 可以使用同一个端口吗?

共计 1159 个字符,预计需要花费 3 分钟才能阅读完成。

一、TCPUDP可以绑定相同的端口吗?

如果有人问你tcpudp可以同时监听相同的端口吗?那么这个问法也不大准确,正确的问法应该是tcpudp可以同时绑定相同的端口吗?

因为监听这个动作是在TCP服务端网络编程里才有的,而udp服务端网络编程根本没有监听这个动作的。而它们共有的一个动作是bind端口。

TCP 网络编程如下,服务端执行 listen() 系统调用就是监听端口的动作。

TCP 和 UDP 可以使用同一个端口吗?

UDP 网络编程如下,服务端是没有监听这个动作的,只有执行 bind() 系统调用来绑定端口的动作。

TCP 和 UDP 可以使用同一个端口吗?

我们知道,在数据链路层中,通过 MAC 地址来寻找局域网中的主机。在网际层中,通过 IP 地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口进行寻址,来识别同一计算机中同时通信的不同应用程序。

所以,传输层的「端口号」的作用,是为了区分同一个主机上不同应用程序的数据包。

传输层有两个传输协议分别是 TCPUDP,在内核中是两个完全独立的软件模块。

当主机收到数据包后,可以在 IP 包头的「协议号」字段知道该数据包是 TCP/UDP,所以可以根据这个信息确定送给哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的报文根据「端口号」确定送给哪个应用程序处理。

TCP 和 UDP 可以使用同一个端口吗?

因此, TCP/UDP 各自的端口号也相互独立,如 TCP 有一个 80 号端口,UDP 也可以有一个 80 号端口,二者并不冲突。

写份简单的TCPUDP服务端的代码验证一下,都是绑定的8080端口,是可以同时启动起来的

TCP 和 UDP 可以使用同一个端口吗?

所以,TCPUDP是可以绑定相同端口的!

二、多个TCP服务进程可以绑定同一个端口吗?

还是用上面写的tcp服务端的代码来验证

1.两个TCP服务绑定了相同的ip地址

  1. 第一个tcp服务器启动

    TCP 和 UDP 可以使用同一个端口吗?

  2. 第二个tcp服务器启动会报错:address already in use

    TCP 和 UDP 可以使用同一个端口吗?

2.两个TCP服务绑定的ip地址不一样

  1. 第一个tcp服务器启动在 0.0.0.0:8080

    TCP 和 UDP 可以使用同一个端口吗?

  2. 第二个tcp服务器启动在 127.0.0.1:8080

    TCP 和 UDP 可以使用同一个端口吗?

    可以发现启动在不同的IP地址,但是端口相同是可以的。

所以得出结论:只要IP+Port有一个不一样就是可以的

3.重启TCP服务进程时,为什么会有“Address in use”的报错?

然后在实践中,我们可能会经常碰到一个问题,当 TCP 服务进程重启之后,总是碰到“Address in use”的报错信息,TCP 服务进程不能很快地重启,而是要过一会才能重启成功。

这是为什么呢?

当我们重启 TCP 服务进程的时候,意味着通过服务器端发起了关闭连接操作,于是就会经过四次挥手,而对于主动关闭方,会在 TIME_WAIT 这个状态里停留一段时间,这个时间大约为 2MSL。

TCP 和 UDP 可以使用同一个端口吗?

当 TCP 服务进程重启时,服务端会出现 TIME_WAIT 状态的连接,TIME_WAIT 状态的连接使用的 IP+PORT 仍然被认为是一个有效的 IP+PORT 组合

正文完
 
Dustin
版权声明:本站原创文章,由 Dustin 2022-12-19发表,共计1159字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。