内容简介:UDP(User Datagram Protocol 用户数据包协议)是一个简单的面向数据包的运输层协议。进程的每一次输出操作都正好产生一个UDP协议(有长度限制)。这是面向流字符协议不同。UDP协议是封装在IP数据包中的。UDP不提供可靠性:它把应用程序传给 I P层的数据发送出去,但是并不保证它们能到达目的地。说明* 由于IP层已经把IP数据包分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。*物理网络
UDP(User Datagram Protocol 用户数据包协议)是一个简单的面向数据包的运输层协议。进程的每一次输出操作都正好产生一个UDP协议(有长度限制)。这是面向流字符协议不同。UDP协议是封装在IP数据包中的。UDP不提供可靠性:它把应用程序传给 I P层的数据发送出去,但是并不保证它们能到达目的地。
二、UDP结构
- 源端口号:长度2字节,标识该数据包来至于源主机的哪个端口;
- 目的端口号:长度2字节,标识该数据包目的主机端口号;
- UDP长度:长度2个字节,指明是UDP首部和UDP数据的字节长度,单位字节长度;该字段的最小值为 8字节(发送一份0字节的UDP数据包是OK的)。这个UDP长度是有冗余的。IP数据包长度指的是数据包全长,因此UDP数据报长度是全长减去IP首部的长度。
- UDP检验和覆盖UDP首部和UDP数据。回想IP首部的检验和,它只覆盖IP的首部。UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算检验和而设置的。伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地。
说明* 由于IP层已经把IP数据包分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。*
三、IP分片
物理网络层一般要限制每次发送数据帧的最大长度。当要发送的数据长度大于了最大长度(MTU),就要对数据进行分片处理传输。 把一份IP数据包分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,它们要求在 下一站
就进行进行重新组装,而不是在最终的目的地)。重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层(TCP与UDP)是透明的,除了某些可能的越级操作外。
- 16位标识字段(Identity):对于发送端发送的每份IP数据包来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中。
- 3位标志字段(flag):标志字段用最后一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置 1。中间比特为“不分片”位。如果将这一比特置 1,IP将不对数据报进行分片。
- 13位片偏移字段(offset):该片偏移原始数据包开始处的位置。另外,当数据包被分片后,每个片的总长度值要改为该片的长度值。
抓包,执行如下 PHP 代码:
<?php $handle = stream_socket_client("udp://110.12.15.10:9999", $errno, $errstr); if( !$handle ){ die("ERROR: {$errno} - {$errstr}\n"); } $str = 'start'; for($i=0;$i<500;$i++){ $str .= 'abcdefjhijklmnopkrstuvwxyz1234567890'; } $str .= 'end'; fwrite($handle, $str."\n"); 复制代码
如上一个udp数据被分成了3个ip数据包。
都看到这里了,要不要扫二维码关注一下微信公众号 林湾村龙猫 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript王者归来
月影 / 清华大学出版社 / 2008-7 / 86.00元
你手中的这本《JavaScript王者归来》不仅是一本传播知识的书,更是一本求道的书。 本书分为五个部分循序渐进地与读者讨论了JavaScript的方方面面,从简单的语言基础到丰富的实际应用再到深入剖析语言本质的高级话题,字里行间包含着作者多年工作中对JavaScript实践乃至程序设计思想的深入思考和总结。 本书揭开了JavaScript的面纱,绕过误解和虚幻的表象,引领你探索程序王......一起来看看 《JavaScript王者归来》 这本书的介绍吧!