首页 > 编程知识 正文

udp,udp协议

时间:2023-05-03 05:59:56 阅读:213417 作者:3339

目录 UDP介绍UDP协议介绍UDP数据包格式IP协议介绍用户数据、 UDP、 IP、 MAC 四个报文的关系
本篇是专门介绍UDP协议的,为后面的UDP实例做准备。

UDP介绍 UDP协议介绍 UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是 OSI
(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协
议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 是 UDP 的正式规范。 UDP
在 IP 报文的协议号是 17(即 0x11)。UDP 协议全称是用户数据报协议[1] ,在网络中它与 TCP 协议一样用于处理数据包,
是一种无连接的协议。在 OSI 模型中,在第四层——传输层,处于 IP 协议的上一层。 UDP
有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,
是无法得知其是否安全完整到达的。 UDP 用来支持那些需要在计算机之间传输数据的网络
应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协
议。 UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所
掩盖,但是即使是在今天 UDP 仍然不失为一项非常实用和可行的网络传输层协议。与所熟知的 TCP(传输控制协议)协议一样,UDP 协议直接位于 IP(网际协议)协议
的顶层。根据 OSI(开放系统互连)参考模型,UDP 和 TCP 都属于传输层协议。 UDP 协议
的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据
的传输单位。每一个数据包的前 8 个字节用来包含报头信息,剩余字节则用来包含具体的传
输数据。 UDP数据包格式 UDP 协议使用端口号为不同的应用保留其各自的数据传输通道。 UDP 和 TCP 协议正
是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可
以是客户端或服务器端)将 UDP 数据包通过源端口发送出去,而数据接收一方则通过目标
端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应
用则可以使用未被注册的动态端口。因为 UDP 报头使用两个字节存放端口号,所以端口号
的有效范围是从 0 到 65535。一般来说,大于 49151 的端口号都代表动态端口。
数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所
以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操
作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为 65535 字节。不
过,一些实际应用往往会限制数据报的大小,有时会降低到 8192 字节。
UDP 协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊
的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中
被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,
由此 UDP 协议可以检测是否出错。这与 TCP 协议是不同的,后者要求必须具有校验值。
许多链路层协议都提供错误检查,包括流行的以太网协议,也许你想知道为什么 UDP
也要提供检查和校验。其原因是链路层以下的协议在源端和终端之间的某些通道可能不提供
错误检测。虽然 UDP 提供有错误检测,但检测到错误时,UDP 不做错误校正,只是简单地
把损坏的消息段扔掉,或者给应用程序提供警告信息。
UDP字段源端口号2如5000发送方的网络端口地址目的端口号2如6000接收方的网络端口地址UDP长度2UDP报文长度UDP报文(含数据)长度UDP校验和2UDP报头校验和可忽略(16’d0)UDP数据nIP协议介绍

IP 是 TCP/IP 协议族中最核心的协议,所有的 TCP、 UDP、 ICMP、 IGMP 数据都以 IP
数据报的格式传输。 IP 仅提供尽力而为的传输服务,如果发生某种错误,IP 会丢失该数据,
然后发送 ICMP 消息给信源端。另外,IP 数据报可以不按发送顺序接受

前 20 字节和紧接其后的选项部分是 IP 数据报的首部,前 20 个字节是固定的,选项可
有可无。首部的每一行是一个 32 位字的单位,最高位在左边,为 0bit,最低位在右边,为
31bit。 4 字节的 32bit 值按照以下次序传输:首先 0-7bit,其次 8-15 比特,然后 16-
23bit,最后是 24-31bit,这种传输次序称为 big endian 字节序(我们在 C 语言写位操作的
算法时常用到该词)。 TCP/IP 首部中的所有二进制整数在网络中传输时都要求以这种次序,
因此它又称作网络字节序,其他形式存储的二进制数据,如 little endian 格式,则必须在传
输数据之前把首部转化成网络字节序。首部长度是指首部占 32bit 字的数目,因为 4 位的最大值为 15,因此首部最长为 60 字
节,也即是说选项部分的最大值为 40 字节,不够 4 的倍数,要用 0 填充,使数据部分的起
始地址为 4 的倍数。
总长度指整个 IP 数据报的长度,包括首部和数据部分,16bit,最长可达 65535 字节。
尽管理论上可以传送一个长达 65535 的 IP 数据报,但实际上还要考虑网络的最大承载能力
等因素。3 个标志位主要用来标识分片的 IP 数据报,片位移为分片的数据报的首个字节偏离整个
原始数据报的位置。
协议号协议00IP01ICMP02IGMP03GGP04IP-ENCAP05ST06TCP08EGP12PUP17UDP20HMP22XNS-IDP27RDP29ISO-TP436XTP37DDP39IDPR-CMTP73RSPF81VMTP89OSPFIGP94IPIP98ENCAP

指 IPv4 数据报包头的校验和。这个数值用来检错用的,用以确保封包被正确无误的接收
到。当封包开始进行传送后,接收端主机会利用这个检验值会来检验余下的封包,如果一切无误
就会发出确认信息表示接收正常。与 UDP 和 TCP 协议包头中的校验和作用是一样的。占 16
位。
首部检验和字段是根据 IP 首部计算的检验和码,不对首部后面的数据进行计算。其计算方
法为:
在发送数据时,为了计算数 IP 据报的校验和。应该按如下步骤:

将校验和字段置为 0,然后将 IP 包头按 16 比特分成多个单元,如包头长度不是 16 比
特的倍数,则用 0 比特填充到 16 比特的倍数;对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉
溢出的高位),将得到的和的反码填入校验和字段;
例如,我们使用 IP 协议发送一个数据长度为 30 个字节的数据包,发送端 IP 为
192.168.0.2,接收端 IP 为 192.168.0.3。则 IP 报头可如下所示:


按照上述提到的 IP 首部校验和的方法计算 IP 首部校验和,即:0x4500 + 0x0032 + 0x0000 + 0x0000 + 0x4011 + 0x0000(计算时强制置0) + 0xc0a8 + 0x0002 + 0xc0a8 + 0x0003 =0x20698。0x0002 + 0x0698 = 0x069achecksum = ~0x069a = 0xf965
计算结果与实际发包软件计算的一致。 用户数据、 UDP、 IP、 MAC 四个报文的关系

用户数据是打包在 UDP 协议中、 UDP 协议又是基于 IP 协议之上的,IP 协议又是走
MAC 层发送的,即从包含关系来说:MAC 帧中的数据段为 IP 数据报,IP 报文中的数据段
为 UDP 报文,UDP 报文中的数据段为用户希望传输的数据内容,如“hello world!”。下图
为使用 UDP 协议发送“hello world!”的数据层层打包示意图:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。