Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcp和udp最大数据包大小_C_Linux_Tcp_Udp_Packet Sniffers - Fatal编程技术网

Tcp和udp最大数据包大小

Tcp和udp最大数据包大小,c,linux,tcp,udp,packet-sniffers,C,Linux,Tcp,Udp,Packet Sniffers,当使用recvfrom(2)从网络获取数据包时,我每次获得1个数据包 使用此函数获得的TCP/UDP数据包的最大长度是多少?recvfrom始终只返回一个UDP数据包。UDP数据包的大小可达64KB,只需几个报头字节。实际上,大多数UDP协议都不会在一个数据包中发送那么多数据。因此,根据协议的要求,传递给recvfrom的缓冲区大小可能会小得多 对于TCP,通常使用recv,而不是recvfrom从连接的套接字读取传入数据。许多人会指出,TCP是一种流协议,而不是像UDP那样的消息/数据包协议。

当使用
recvfrom(2)
从网络获取数据包时,我每次获得1个数据包


使用此函数获得的TCP/UDP数据包的最大长度是多少?

recvfrom
始终只返回一个UDP数据包。UDP数据包的大小可达64KB,只需几个报头字节。实际上,大多数UDP协议都不会在一个数据包中发送那么多数据。因此,根据协议的要求,传递给
recvfrom
的缓冲区大小可能会小得多


对于TCP,通常使用
recv
,而不是
recvfrom
从连接的套接字读取传入数据。许多人会指出,TCP是一种流协议,而不是像UDP那样的消息/数据包协议。因此,
recv
将返回一个不确定的字节数,该字节数介于1和传递给
recv
调用本身的缓冲区大小之间。始终检查来自
recv
调用的返回值-不能保证为您提供任何特定的字节计数。

recvfrom
始终只返回一个UDP数据包。UDP数据包的大小可达64KB,只需几个报头字节。实际上,大多数UDP协议都不会在一个数据包中发送那么多数据。因此,根据协议的要求,传递给
recvfrom
的缓冲区大小可能会小得多


对于TCP,通常使用
recv
,而不是
recvfrom
从连接的套接字读取传入数据。许多人会指出,TCP是一种流协议,而不是像UDP那样的消息/数据包协议。因此,
recv
将返回一个不确定的字节数,该字节数介于1和传递给
recv
调用本身的缓冲区大小之间。始终检查来自
recv
调用的返回值-不能保证提供任何特定的字节计数。

TCP中没有固定的限制,因为它是流协议,而不是数据报协议

在IPv4上的UDP中,限制为65507字节。发件人:

长度
此字段指定UDP标头和UDP数据的字节长度。最小长度为8字节,即标头的长度。字段大小为UDP数据报设置了65535字节(8字节头+65527字节数据)的理论限制。然而,底层IPv4协议对数据长度的实际限制是65507字节(65535字节)− 8字节UDP报头− 20字节IP报头)

使用IPv6,UDP数据报的大小可能大于65535字节。指定如果UDP标头加UDP数据的长度大于65535,则长度字段设置为零


请注意,使用非常大的UDP数据报可能会有问题。很少有网络链路具有如此大的MTU,因此数据报可能会被分割。如果任何片段丢失,整个数据报将必须由应用程序层重新发送(如果应用程序需要并实现可靠性)。TCP通常使用路径MTU发现以适合路径中所有链路的最小MTU的段发送流;如果某个段丢失,TCP可以在该段丢失后重新传输该段(或者如果实现了选择性确认,则只传输丢失的段,这是大多数TCP实现现在提供的)。

TCP中没有固定的限制,因为它是一个流协议,而不是数据报协议

在IPv4上的UDP中,限制为65507字节。发件人:

长度
此字段指定UDP标头和UDP数据的字节长度。最小长度为8字节,即标头的长度。字段大小为UDP数据报设置了65535字节(8字节头+65527字节数据)的理论限制。然而,底层IPv4协议对数据长度的实际限制是65507字节(65535字节)− 8字节UDP报头− 20字节IP报头)

使用IPv6,UDP数据报的大小可能大于65535字节。指定如果UDP标头加UDP数据的长度大于65535,则长度字段设置为零


请注意,使用非常大的UDP数据报可能会有问题。很少有网络链路具有如此大的MTU,因此数据报可能会被分割。如果任何片段丢失,整个数据报将必须由应用程序层重新发送(如果应用程序需要并实现可靠性)。TCP通常使用路径MTU发现以适合路径中所有链路的最小MTU的段发送流;如果某个段丢失,TCP可以在该段丢失后重新传输该段(或者如果实现了选择性确认,则只传输丢失的段,这是大多数TCP实现现在提供的)。

TCP是一种流协议,它不处理数据包。@Barmar当我使用
recvfrom
时,我每次收到1个pakcet(就像我在wireshark中看到的那样)有一个16位的总大小字段,这意味着它可以在一个数据包中传输多达65535个字节(包括头和子协议头)。@Paramikooo这不是一个要求,它可能只是由于优化。TCP是一个流协议,它不处理数据包。@Barmar当我使用
recvfrom
时,我每次得到一个数据包(就像我在wireshark中看到的)有一个16位的总大小字段,这意味着它可以在单个数据包中传输多达65535个字节(包括头和子协议头)。@paramikooo这不是一个要求,可能只是因为优化了。我可以对TCP和UDP使用
recv
吗“对于TCP,您通常使用
recv
,而不是
recvfrom
”,这是正确的,但这只是因为说
recv(sockfd,buf,len,flags)
比等效的
recvfrom(sockfd,buf,len,flags,NULL,NULL)
@paramikooo,Re“我可以将recv用于TCP和UDP吗?”?“是的。对于UDP,允许任何人将数据报发送到套接字。对于TCP,使用<代码> ReV< <代码>或<代码> Read <代码>是标准的。Irc任何人都可以。