我很困惑为什么Datagram套接字只需知道源端口和目标端口,而TCP套接字保持4值元组:
为什么我们可以在不知道接收方IP地址的情况下发送一些数据报?
答案 0 :(得分:1)
在无连接/数据报套接字上发送数据时,通常在sendto
呼叫中指定接收方的IP地址。
来自MSDN:
sendto函数通常用在无连接套接字上,以将数据报发送到由to参数标识的特定对等套接字。即使无连接套接字先前已连接到特定地址,to参数也仅覆盖该特定数据报的目标地址。在面向连接的套接字上,将忽略to和tolen参数,使sendto等效于send。
根据定义,无连接套接字不会连接到对等体,因此在实际发送数据之前不必指定接收方的地址。
请注意,实际上允许在无连接套接字上调用connect
,但不是连接到远程主机,而是仅设置默认目标IP地址,然后将在后续send
中使用调用该套接字。