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