不同的套接字可以共用相同的端口号吗?

来源:互联网 发布:linux 查看有几个用户 编辑:程序博客网 时间:2024/06/05 06:03

不同的套接字可以共用相同的端口号吗?

(在不同主机上自然可以,下面讨论在同一台主机上的情况。)
需要分情况而看,套接字分为UDP套接字和TCP套接字,对于前者,其由(ip地址,端口号)来标识,后者由(源ip,源端口号,目的ip,目的端口号)标识。
能不能共用相同的端口号要看传送到目的主机的数据能否根据套接字上交到指定的进程中。

  • 对于UDP,假设主机a向主机b发送数据,b在网络层收到数据报后,去掉头部,上交给运输层,运输层再根据报文段头部信息(包含端口号信息等),再去除头部后将得到的数据,交给相应套接字,应用程序经该套接字得到数据。如果UDP套接字共用了端口号,在应用层将数据交给套接字时,将无法确定交给哪个,因为UDP套接字只包含了两个信息。

  • 对于TCP,首先要经过握手阶段建立连接,在目的主机端服务器产生新的套接字,包含了上述四个信息。如果创建多个连接,会产生多个套接字,这些套接字实际上是共用了相同的目的端口号,但此时运输层仍能将数据交到相应的套接字,因为运输层可以知道数据的源ip,源端口号,目的ip和目的端口号,然后就能将数据交到与这些信息相匹配的套接字,此时是可以唯一确定一个套接字的,所以数据最终能到达目的应用进程。(面向连接说法的由来)

综上,UDP套接字不可以共用相同的套接字,而TCP可以。主要还是看传送到目的主机的数据能否根据套接字上交到指定的进程中。

1 0
原创粉丝点击