怎么做国外网站,网址导航浏览器下载,中国代理网官方网站,网站推广定义TCP、UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据。数据通过源端口发送出去#xff0c;通过目标端口接收。有的网络应用只能使用预留或注册的静态端口#xff1b;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP和TCP报头使用两个字… TCP、UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据。数据通过源端口发送出去通过目标端口接收。有的网络应用只能使用预留或注册的静态端口而另外一些网络应用则可以使用未被注册的动态端口。因为UDP和TCP报头使用两个字节存放端口号所以端口号的有效范围是从0到65535。动态端口的范围是从1024到65535。 MTU最大传输单元这个最大传输单元实际上和链路层协议有着密切的关系EthernetII帧的结构DMACSMACTypeDataCRC由于以太网传输电气方面的限制每个以太网帧都有最小的大小64bytes最大不能超过1518bytes对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧一般的以太网转发设备会丢弃这些数据帧。 由于以太网EthernetII最大的数据帧是1518Bytes这样刨去以太网帧的帧头DMAC目的MAC地址48bit6BytesSMAC源MAC地址48bit6BytesType域2bytes14Bytes和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。 UDP 包的大小就应该是 1500 - IP头(20) - UDP头(8) 1472(BYTES) TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) 1460 (BYTES) 注*PPPoE所谓PPPoE就是在以太网上面跑“PPP”。随着宽带接入这种宽带接入一般为Cable Modem或者xDSL或者以太网的接入因为以太网缺乏认证计费机制而传统运营商是通过PPP协议来对拨号等接入服务进行认证计费的所以引入PPPoE。PPPoE导致MTU变小了以太网的MTU是1500再减去PPP的包头包尾的开销8Bytes就变成1492。不过目前大多数的路由设备的MTU都为1500。 如果我们定义的TCP和UDP包没有超过范围那么我们的包在IP层就不用分包了这样传输过程中就避免了在IP层组包发生的错误如果超过范围既IP数据报大于1500字节发送方IP层就需要将数据包分成若干片而接收方IP层就需要进行数据报的重组。更严重的是如果使用UDP协议当IP层组包发生错误那么包就会被丢弃。接收方无法重组数据报将导致丢弃整个IP数据报。UDP不保证可靠传输但是TCP发生组包错误时该包会被重传保证可靠传输。 UDP数据报的长度是指包括报头和数据部分在内的总字节数其中报头长度固定数据部分可变。数据报的最大长度根据操作环境的不同而各异。从理论上说包含报头在内的数据报的最大长度为65535字节64K。 我们在用Socket编程时 UDP协议要求包小于64KTCP没有限定。 不过鉴于Internet上的标准MTU值为576字节所以建议在进行Internet的UDP编程时最好将UDP的数据长度控制在548字节 (576-8-20)以内。 就具体函数而言 用UDP协议发送时用sendto函数最大能发送数据的长度为65535- IP头(20) - UDP头(8)65507字节。用sendto函数发送数据时如果发送数据长度大于该值则函数会返回错误。 用TCP协议发送时由于TCP是数据流协议因此不存在包大小的限制暂不考虑缓冲区的大小这是指在用send函数时数据长度参数不受限制。而实际上所指定的这段数据并不一定会一次性发送出去如果这段数据比较长会被分段发送如果比较短可能会等待和下一次数据一起发送。