arj*_*ani 10 sockets udp network-programming tcp
默认UDP套接字加上Connect()调用是一个连接的UDP套接字.我知道与TCP和UDP有关的差异,但在这里我想知道套接字的区别
Sam*_*nen 11
当使用TCP套接字时,tcp栈负责处理发送到网络的数据并将其传送到接收器,重新传输它直到接收器确认.TCP还负责流量控制,即以适当的速率为网络连接和接收器传输数据.最后,TCP确保接收器以正确的顺序获取数据一次.
使用UDP,程序员可以直接管理到网络的传输,并且必须处理丢失和无序数据包以及流量控制和分段数据到可以通过网络连接传输的数据包.
最后,由于udp和tcp是不同的协议,它们需要防火墙中的不同设置,以便在服务器位于防火墙后面时允许传递到服务器.此外,您无法将数据从已连接(或未连接)的UDP套接字发送到TCP套接字,反之亦然.
连接UDP套接字只意味着send()和recv()可用于向连接地址发送数据和从连接地址发送数据,但仍然是UDP数据被发送和接收,因此所有上述差异都适用.如果只使用套接字进行点对点通信,则可以在UDP套接字上调用connect().
众所周知,TCP和UDP等传输协议在传输源处复用单个IP地址,并在目的地处解复用另一个IP地址。这就是端口号出现的原因。两种协议对IP地址进行多路复用/多路分解的方式是使它们的套接字不同的原因。
为了使用TCP传输一些数据,您只需在套接字中放置一个数据报,它就会流过先前创建的连接。反过来,UDP是无连接的。连接的存在或不存在要求每个套接字的标识符格式必须不同:TCP套接字由四倍{源IP地址,源端口号,目标IP地址,目标端口号}标识,而UDP套接字则被标识通过元组{目标IP地址,目标端口号}。
综上所述,当TCP服务接收到某些数据报时,它需要知道发送给谁的数据报(“谁”是IP地址+端口号),以便将其正确转发到应用程序。因此,当两个具有不同源IP的TCP数据报到达主机时,它们必定会传递到两个不同的套接字(即使目标是相同的)。如果没有明显的套接字,那么将根本没有连接处理(即TCP将是无连接的)。
对于UDP套接字,规则是不同的:如果两个到达的UDP数据报具有相同的目标IP地址和端口号,则无论它们的源IP地址和/或源端口号如何(它们可能相等),它们都将被转发到同一套接字。或不)。如果传输是无连接的,为什么还要打扰不同的插座?
请记住,TCP和UDP数据报与发送套接字的格式无关,它们分别标识发送方的端口号。也就是说,正如Kurose和Ross在其相当不错的书“计算机网络-自上而下的方法”中解释的那样,即使是无连接协议(如UDP)也必须识别传输的发送者:
您现在可能想知道,源端口号的用途是什么?...在A对B网段中,源端口号用作“返回地址”的一部分—当B想要将网段发送回A时,B对A网段中的目标端口将使用从A到B段的源端口值得到的值(完整的返回地址是A的IP地址和源端口号)。
关于术语的最后一句话:在这里,我一般使用术语“数据报”,表示TCP和UDP协议的协议数据单元(PDU)。Kurose和Ross出于相同的意图使用“段”。但是,严格地说,“段”是TCP协议的PDU,而“数据报”是UDP的PDU。
| 归档时间: |
|
| 查看次数: |
12904 次 |
| 最近记录: |