TCP/UDP多路复用是如何工作的?

4
我有以下陈述。
“在 TCP 中,接收方主机使用源 IP、源端口、目标 IP 和目标端口来将数据报定向到适当的套接字。而在 UDP 中,接收方仅检查目标端口号以将数据报定向到适当的套接字。”
上述陈述是否正确?
如果是,这是否意味着在一个进程中 TCP 可以使用相同的端口用于多个套接字,而在 UDP 中只能有一个套接字使用一个端口?那么不同进程中的套接字呢?TCP/UDP 中多个进程可以使用相同的端口吗?(在编程语言:C/C++/Java 中)
如果不是,为什么?
2个回答

6
在TCP中,接收方主机使用源IP、源端口、目标IP和目标端口来将数据包定向到适当的套接字。而在UDP中,接收方只检查目标端口号以将数据报定向到相应的套接字。以上说法是否正确?是的。
如果是这样,这是否意味着在TCP中,同一端口可以在一个进程中用于多个套接字?是的,在某些情况下。
而在UDP中,只能有一个套接字在一个端口上使用吗?不是的,请参见下文。
那么不同进程中的套接字呢?TCP/UDP是否可以多个进程使用同一个端口?(在编程语言:C/C++/Java中)在某些情况下,可以。UDP端口必须被指定为可由所有想要共享它的进程重用。TCP端口只能被绑定到不同接口的套接字重用:没有共享。

这意味着它们在绑定之前都必须在套接字上设置SO_REUSEADDR选项。 - user207421
@Alex 不会的。它将允许一个新的TCP套接字绑定到当前处于TIME_WAIT状态的端口。TCP和UDP非常不同。我不知道有任何不支持SO_REUSEADDR的操作系统。 - user207421
你提到过:“TCP端口只能被绑定到不同接口的套接字重用:没有共享。” 你能再解释一下吗?什么是“不同接口”?如果在同一个IP上的两个不同进程可以绑定到相同的TCP端口,那不就意味着共享了吗? - Alex
@Alex 对于多个TCP进程使用相同的端口号,元组{sourceIP,sourcePort}必须是唯一的。在文献中,“sourceIP”通常被称为“interface”,意思是NIC,尽管这早于NIC具有多个IP地址的能力。这不是共享,也不是重用。 - user207421
@EJP 很好的点对点回答..你能给我最后一点提供一个链接吗? - Grijesh Chauhan
显示剩余3条评论

3

这意味着,在TCP中,一个独特的通信“通道”可以用四元组来描述:(源IP地址, 源端口号, 目标IP地址, 目标端口号)

在UDP中,所有发送到特定端口的数据包都会被传递到唯一监听该端口的UDP套接字,而无论数据包的源地址和端口是什么。我喜欢把它想象成一个漏斗。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接