udp抓包工具_漫话TCP/IP - UDP (2)

037c0723391127880ad8cd688808b22d.png

特点

UDP是User Datagram Protocol的缩写。

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中即使出现丢包,UDP也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交由采用UDP的应用程序去处理。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。

使用场景

UDP按照“制作程序的那些用户的指示行事”。由于UDP面向无连接,它可以随时发送数据。再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:

  • 包总量较少的通信(DNS、DHCP)
  • 视频、音频等多媒体通信(即时通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

UDP封装

UDP是一个简单的面向数据报的运输层协议: 进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。UDP数据报封装成一份IP数据报的格式如图所示。

aa0333199f944d53d3a2df198b812b9f.png

UDP首部

f54daf003f1f28e868059b890683cbfc.png
  • 源端口号(Source Port)表示发送端端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中。
  • 目标端口号(Destination Port)表示接收端端口,字段长度16位。
  • 包长度(Length)该字段保存了UDP首部的长度跟数据的长度之和。单位为字节(8位字节)
  • 校验和(Checksum)校验和是为了提供可靠的UDP首部和数据而设计。

练习

表弟:TCP/IP:工具(2)- Wireshark​zhuanlan.zhihu.com
1e978eec5c89434ad0df5de899b1a769.png

我们直接运行asio中的example程序通过抓包来学习UDP包,首先获取ASIO源码,并打开Wireshark抓包:

git clone https://github.com/chriskohlhoff/asio.git
cd asio/asio/src/examples/cpp14/echo
  • server

在PC上按照如下方式编译运行server端程序:

g++ blocking_udp_echo_server.cpp -I../../../../include -o server
./server 18316
  • client

在PC上按照如下方式编译运行client端程序

aarch64-linux-android28-clang++ blocking_udp_echo_client.cpp -I../../../../include -o client
adb push client /data/local/tmp/client
adb shell /data/local/tmp/client 10.95.46.3 18316
Enter message: hello
Reply is: hello

通过Wireshark抓包,我们抓到两个UDP包,一个是Client发送给Server端的,另外一个是Server端回复给Client端的:

aea7b9b263dc4e21d53ea3d1cbd9bd00.png

4483a3f4ac8c72eb8b45c31abf2c151e.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值