抓包分析UDP,UDP应用,TCP与UDP的区别需要有理可据,别再死记硬了

目录

  • 抓包过程
  • UDP 特点
    • UDP 抓包看首部
    • UDP主要特点
  • UDP 应用代表
  • `TCP` vs `UDP`
    • 从头部分析 TCP 与 UDP 的区别:
    • TCP 解决了五个问题

抓包过程

使用了 Wireshark 进行抓包,用两个最常用的 curl 和 ping 命令来演示抓包情况,开启抓包。

## 先访问我自己的网站首页
 curl https://zengzhiqin.kuaizhan.com 
## 再查看我自己网站的地址
 ping https://zengzhiqin.kuaizhan.com

Wireshark根据 ping 命令得到的地址进行条件过滤,得到上面两个命令所得到的包,主要有 TCP(https基于tcp协议)协议和 ICMP(ping命令是基于 ICMP 协议)协议的包,如下图所示:

抓包分析UDP,UDP应用,TCP与UDP的区别需要有理可据,别再死记硬了_第1张图片 抓包分析

UDP 特点

UDP 抓包看首部

抓包分析UDP,UDP应用,TCP与UDP的区别需要有理可据,别再死记硬了_第2张图片 UPD 首部

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

UDP协议抓包分析 此包作用

顺便吐槽一下百度翻译,反正这个翻译我是看不懂。

UDP主要特点

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

UDP 应用代表

  1. 网页或者手机APP的访问

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

  1. 流媒体协议

话说大幂幂今天做客李佳琦直播间了,她太美了!

直播协议很多使用 RTMP,是基于TCP的。但是对于直播来说,视频播放有的包能丢有的不能,因为视频的连续帧里面有的重要有的不重要,格几个帧丢一个观众不会感知,但是连续丢就会卡顿了,因此在网络不好的时候应用希望选择性的丢帧。

TCP对直播有个致命的缺点就是网络不好的时候,TCP协议探测到了会主动降低发送速度,原本就卡那就更要命了,应用层应该是马上重传而不是主动让步。因此,很多直播应用都基于 UDP 实现了自己的视频传输协议。

  1. 实时游戏

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

还有个原因,是 TCP 保证强顺序,一个保丢失了要等重发,客户端等不了,而且客户端并不关心过期数据。

  1. LOT 物联网
  2. 移动通信领域

最后两个领域我也讲不来,是 UDP ,然后实时性要求高,哈哈哈破功了。

TCP vs UDP

抓包分析UDP,UDP应用,TCP与UDP的区别需要有理可据,别再死记硬了_第3张图片 TCP头部 抓包分析UDP,UDP应用,TCP与UDP的区别需要有理可据,别再死记硬了_第4张图片 UDP头部

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

从头部分析 TCP 与 UDP 的区别:

  1. 跟TCP头部比起来,UDP头部简单的有点过分,即UDP结构更加简单

  2. TCP具有序列号和确认号和紧急指针,TCP 保证数据顺序和可靠传输,UDP 不保证,对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

  3. TCP 设立了SYN,ACK,FIN 等标志来握手建立连接,即TCP 面向连接,UDP 不面向连接,是无状态的,这点是主要区别,有连接能沟通上其他的事情就好办了,喝酒还是喝茶都好说话,毕竟有连接了其他的“可靠传输”“流量控制”"拥塞控制"等事情都是基于连接来锦上添花的事情`

  4. TCP 具有窗口,即 TCP 可以进行流量控制和拥塞控制,具体控制方法往下看,UDP 就不行,他就是把应用层给的报文加个头往网络层一丢完事,生死有命富贵在天。

  5. TCP 是面向字节流传输的,UDP 是基于数据报传输的。这点其实不难理解,一个个报文独立地传输只适合 UDP 这种全然不顾后果的鲁莽传输,TCP 还要进行流量控制拥塞控制啥的,肯定不能传报文,太大了,而是要可控传输,字节流发多少都好控制。

  6. UDP 传输速度快,TCP 传输速度慢,人家TCP要干那么多事情,握手交流窗口啥的,肯定更加耗时了。

如果要硬记这些特点,还是很难的,又不是黄蓉可以过目不忘,脑子里只需要绘制这两个的头部内容就好了,区别可以自己推导出来,前提是知道那些是干啥的。

TCP 解决了五个问题

  • 顺序问题
  • 丢包问题
  • 连接维护
  • 流量控制
  • 拥塞控制

顺序问题和连接维护可以看我的另外一篇《抓包分析TCP首部》,下篇我们来看看 TCP 丢包问题,以及怎么通过滑动窗口来进行流量控制和拥塞控制吧。

有收获的老铁点个鼓励一下吧,感谢观看~

公众号下期预告: TCP 流量控制和拥塞控制的实现(这期插了个小队讲UDP)

你可能感兴趣的:(计算机网络)