内容简介: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数据包。
都看到这里了,要不要扫二维码关注一下微信公众号 林湾村龙猫 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
从入门到精通:Prezi完全解读
计育韬、朱睿楷、谢礼浩 / 电子工业出版社 / 2015-9 / 79.00元
Prezi是一款非线性逻辑演示软件,它区别于PowerPoint的线性思维逻辑;而是将整个演示内容铺呈于一张画布上,然后通过视角的转换定位到需要演示的位置,并且它的画布可以随时zoom in和zoom out,给演示者提供了一个更好的展示空间。 Prezi对于职场人士和在校学生是一个很好的发挥创意的工具,因为它的演示逻辑是非线性的,所以用它做出来的演示文稿可以如思维导图一样具有发散性,也可以......一起来看看 《从入门到精通:Prezi完全解读》 这本书的介绍吧!