对于解复用:为什么数据报套接字只需要知道Source-Port和Destination-Port,而不需要知道Sourc



我很困惑为什么数据报套接字只需要知道源端口和目的端口,而TCP套接字保持4值元组:

  • 源端口
  • 源ip
  • 目的港
  • 目标ip

为什么我们可以在不知道接收方IP地址的情况下发送一些数据报?

在无连接/数据报套接字上发送数据时,接收方的IP地址通常在sendto调用中指定。

从MSDN:

sendto函数通常用于无连接套接字,将数据报发送到由to参数标识的特定对等套接字。即使无连接套接字先前已连接到特定地址,to参数也只覆盖该特定数据报的目标地址。在面向连接的套接字上,to和tolen参数被忽略,使sendto等同于send。

根据定义,无连接套接字不连接对等体,因此在实际发送数据之前不需要指定接收方的地址。

请注意,在无连接套接字上调用connect实际上是允许的,但它不是连接到远程主机,而是设置一个默认的目标IP地址,然后在该套接字上的后续send调用中使用。

相关内容

最新更新