Arce 发表于 2021-7-13 09:51:08

抓包分析UDP,TCP和UDP的区别说不上五条就进来看看吧

抓包过程
使用了 Wireshark 进行抓包,用两个最常用的 curl 和 ping 命令来演示抓包情况,开启抓包。
## 先访问我自己的网站首页 curl https://zengzhiqin.kuaizhan.com ## 再查看我自己网站的地址 ping https://zengzhiqin.kuaizhan.com  Wireshark根据 ping 命令得到的地址进行条件过滤,得到上面两个命令所得到的包,主要有 TCP(https基于tcp协议)协议和 ICMP(ping命令是基于 ICMP 协议)协议的包,如下图所示:

抓包分析
UDP 特点
UDP 抓包看首部
UPD 首部  正在我想着要不抓一个 ARP(广播包,使用 UDP) 包的时候,我先直接在wireshark里面过滤了一下 UDP 类型的包,还真的有,然后我谷歌了下这包是用来干嘛,如下:

UDP协议抓包分析此包作用  顺便吐槽一下百度翻译,反正这个翻译我是看不懂。
UDP主要特点

[*]UDP 是无连接的,即发送数据之前不需要建立连接
[*]UDP 尽最大努力交付,不保证可靠交付,不支持拥塞控制
[*]UDP 面向报文,没有拥塞控制,很适合多媒体通信的要求(例如老师电脑广播学生电脑讲课)
[*]UDP 支持一对一,一对多,多对一和多对多的交互通信
[*]UDP 首部开销小,只有8个字节

UDP 应用代表

[*]网页或者手机APP的访问
  对于目前主流的移动互联网来说,TCP 建立比较耗时,还会有连接断了的问题,QUIC(Qucik UDP Internet Connections, 快速UDP互联网连接)是Google提出的基于 UDP 改进的通信协议,在应用层上,会自己实现快速连接建立,减少重传延时,自适应拥塞控制,很牛皮。

[*]流媒体协议
  话说大幂幂今天做客李佳琦直播间了,她太美了!
  直播协议很多使用 RTMP,是基于TCP的。但是对于直播来说,视频播放有的包能丢有的不能,因为视频的连续帧里面有的重要有的不重要,格几个帧丢一个观众不会感知,但是连续丢就会卡顿了,因此在网络不好的时候应用希望选择性的丢帧。
  TCP对直播有个致命的缺点就是网络不好的时候,TCP协议探测到了会主动降低发送速度,原本就卡那就更要命了,应用层应该是马上重传而不是主动让步。因此,很多直播应用都基于 UDP 实现了自己的视频传输协议。

[*]实时游戏
  游戏实时性要求高,拿王者荣耀来说,遇到了猴子慢一秒都是回泉水的问题,因此实时游戏中客户端和服务端要建立长连接来保证实时传输,可是玩家那么多都建立长连接腾讯哪怕自家有腾讯云也扛不住啊,TCP 长连接是需要再内核维护数据结构的,一台机器能支撑的 TCP 连接数目有限,UDP 是没有连接的,在异步IO机制引入之前常常是应对海量客户端连接的有效策略。
  还有个原因,是 TCP 保证强顺序,一个保丢失了要等重发,客户端等不了,而且客户端并不关心过期数据。

[*]LOT 物联网
[*]移动通信领域
  最后两个领域我也讲不来,是 UDP ,然后实时性要求高,哈哈哈破功了。

TCP vs UDP
TCP头部UDP头部  TCP 总是秉着严谨可靠的做学问的态度,UDP 总是一副尽最大努力交付的商人心态。UDP 工作时,发送方的 UDP 对应用程序交下来的报文,既不合并,也不拆分,而是设立了一个报文长度字段用来保留这些报文的边界,在添加首部后就直接向下交付网络层,看上面的 UDP 头部信息也能感受到他有多么的粗糙和敷衍了。
从头部分析 TCP 与 UDP 的区别:

[*]  跟TCP头部比起来,UDP头部简单的有点过分,即UDP结构更加简单
[*]  TCP具有序列号和确认号和紧急指针,TCP 保证数据顺序和可靠传输,UDP 不保证,对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
[*]  TCP 设立了SYN,ACK,FIN 等标志来握手建立连接,即TCP 面向连接,UDP 不面向连接,是无状态的,这点是主要区别,有连接能沟通上其他的事情就好办了,喝酒还是喝茶都好说话,毕竟有连接了其他的“可靠传输”“流量控制”"拥塞控制"等事情都是基于连接来锦上添花的事情`
[*]  TCP 具有窗口,即 TCP 可以进行流量控制和拥塞控制,具体控制方法往下看,UDP 就不行,他就是把应用层给的报文加个头往网络层一丢完事,生死有命富贵在天。
[*]  TCP 是面向字节流传输的,UDP 是基于数据报传输的。这点其实不难理解,一个个报文独立地传输只适合 UDP 这种全然不顾后果的鲁莽传输,TCP 还要进行流量控制拥塞控制啥的,肯定不能传报文,太大了,而是要可控传输,字节流发多少都好控制。
[*]  UDP 传输速度快,TCP 传输速度慢,人家TCP要干那么多事情,握手交流窗口啥的,肯定更加耗时了。
  如果要硬记这些特点,还是很难的,又不是黄蓉可以过目不忘,脑子里只需要绘制这两个的头部内容就好了,区别可以自己推导出来,前提是知道那些是干啥的。
TCP 解决了五个问题

[*]顺序问题
[*]丢包问题
[*]连接维护
[*]流量控制
[*]拥塞控制
  顺序问题和连接维护可以看我的另外一篇抓包分析TCP三次握手四次挥手全过程,教你观看“多包运动”的正确姿势,下篇我们来看看 TCP 丢包问题,以及怎么通过滑动窗口来进行流量控制和拥塞控制吧。

  
文档来源:51CTO技术博客https://blog.51cto.com/u_14803398/3054670
页: [1]
查看完整版本: 抓包分析UDP,TCP和UDP的区别说不上五条就进来看看吧