UDP协议传输抓包详解

本文详细介绍了UDP协议在TCP/IP协议族中的位置、报文格式和传输过程,包括发送端和接收端的处理。重点讲解了UDP的无连接性、尽最大努力交付等特点,并举例说明了UDP在直播、实时游戏和物联网等领域的应用。

UDP协议视频传输
TCP/IP协议族是一组不同的协议组合在一起构成的协议族,尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已(该协议族的另一个名字是Internet协议族(Internet Protocol Suite))。
TCP/IP通常被认为是一个四层协议系统,如图1所示:
图一
图1
链路层:有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆(或其他任何传输媒介)的物理接口细节
网络层:有时也称作互联网层,处理分组在网络中的活动,例如分组的选路;在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)
运输层:主要为两台主机上的应用程序提供端到端的通信;在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议),而在运输层,我们使用UDP协议。
UDP则为应用层提供一种非常简单的服务;它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端;任何必需的可靠性必须由应用层来提供;
应用层:负责处理特定的应用程序细节;
UDP报文格式
UDP协议分为首部字段和数据字段,其中首部字段只占用8个字节,分别是个占用两个字节的源端口、目的端口、报文长度和检验和。
在这里插入图片描述
图2
源端口号(2字节): 发送方端口号
目的端口号(2字节):接收方端口号
报文长度(2字节): UDP用具数据报的总长度,一字节为单位
校验和(2字节):检测UDP用户数据报在传输的过程中是否出错,有错就丢弃。
IP报文格式
普通的IP首部长20字节,除非含有选项字段。如图3所示:
在这里插入图片描述
图3
传输总过程(发送端)
下面我们通过具体的代码来了解UDP传输的过程。我们使用代码发送“./file.txt”,并且在Linux下下载tcpdump用来抓包。使用该软件监控8888这个端口后,运行发送数据包的代码。我们可以抓到如下图所示的一段数据包。
在这里插入图片描述
图4
所以接下来我们根据图1、图2、图3和图4来分析一下我们所抓取的UDP数据包。
应用层:就是应用进程准备发送的原始数据“./file.txt”,对应的数据段是2e/2f/66/69/6c/65/2e/74/78/74
传输层:该层我们使用的是UDP协议,UDP报文格式如图2所示,占8个字节。对应的数据段是de/ec/22/b8/00/12/d7/fa
deec:16位端口号:57068
22b8:16位目的端口号:8888
0012:udp数据报长度:(由于udp报文长度固定位8,所以知道数据位是18字节)
d7fa:16位校验和
网络层:IP数据报的格式如图3所示。占20个字节。对应的数据段是45/00/00/26/b8/42/40/00/40/11/aa/ad/c0/a8/2b/64/c0/a8/2b/22
4500:4代表ipv4协议,5代表IP首部的长度(代指首部占32bit/4byte的数目),00代表服务类型为一般服务。
0026:代表总长度(包含包头和数据)是38。
B842:16位标志
4000:3位编制家13位片偏移
4011:40代表生存时间ttl64,11代表协议类型udp(17).
aaad:代表首部校验和
C0a82b64:32位源ip地址:192.168.43.100
c0a82b22:32位目的地址:192.168.43.34
链路层:这一步主要就是封包了,主要格式就是:以太网封装格式 和 802.x 封装格式了,我们使用的是以太网封装格式。经过以太网封装之后就是我们在以太网上传输的数据帧(bit流)了。
传输过程(接收端)
接收端和发送端的顺序刚好相反。即分别经过链路层去掉以太网的头部,经过网络层去掉IP的头部,经过传输层去掉UDP的头部,经过应用层得到数据流。就完成了整个的数据传输过程。
UDP的特点:
A、是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
B、是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。
C、是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,运输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。
D、没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。
E、UDP支持一对一、一对多、多对一和多对多的交互通信。
F、UDP的头部占用较小,只占用8个字节。
基于UDP的例子
直播:直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议
实时游戏:游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响
物联网:一方面,物联网领域中资源少,很可能就是个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的
总的来说,对于实时性要求较高而且可以容忍部分丢包的视频类传输,可以采用UDP传输协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值