对于多路分解:为什么数据报套接字只需知道源端口和目的端口,但没有源IP和目的IP?

时间:2015-10-17 03:55:13

标签: sockets network-programming

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

  • 源端口
  • 源-IP
  • 目的地端口
  • 目标-IP

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

1 个答案:

答案 0 :(得分:1)

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

来自MSDN

  

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

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

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