摘记《Wireshark网络分析就这么简单》

  • A、B在不一样子网,B向A发起请求,跨子网须要默认网关转发。先经过ARP广播获取默认网关的MAC地址。而后默认网关向A转发请求,最后A回复B,造成三角回路。
  • MTU:最大传输单元(决定每次传输多少,发包的大小由MTU较小一方决定)
  • MSS(Maximum Segment Size):每一个TCP包所能携带的最大数据量。在TCP链接创建时(三次握手),双方会告知对方MSS。
MTU = MSS + TCP头 + IP头
TCP头:20字节
IP头:20字节
MTU:1500字节(以太网决定)采用巨帧(Jumbo Frame)能达到9000字节。
Seq:该数据段的序号
Len:该数据段的长度
Ack:接收方的确认号(各自维护)

Seq = 上一个Seq + Len
Ack = Seq + Len
理论上,接收方回复的Ack = 下一个发送方的Seq

SYN:正在发起链接请求(由于链接是双向的,因此双方都要发一个SYN)
FIN:正在请求终止链接
RST:重置混乱链接或拒绝无效请求

三次握手

A --> B: [SYN] Seq=x
B --> A: [SYN, ACK] Seq=y, Ack=x+1
A --> B: [ACK] Seq=x+1, Ack=y+1

窗口滑动机制

* 咱们提到滑动窗口(slide window) 指的是发送方维护的窗口
    * 窗口的左侧是:“成功发送、并已经被接收方确认的字节序列号”
    * 窗口的右侧是:“发送方目前能够发送的最大字节序列号”
    * Window size = 窗口右侧 - 窗口左侧
    * 当滑动窗口的左侧与右侧彻底重合,则意味着接收方通告发送方 window size = 0 ,发送方就要暂时中止数据的发送。直到对方TCP buffer有空余的空间,告诉发送方新的 window size,或者发送方主动去查询是否能够发送数据。

# window size:
    * 接收方向发送方声明本身的接收窗口(若接收方处理缓慢,缓存占满,此时WIN=0)
    * 接收方告诉发送方本身还有多少缓冲区能够接收数据
    * TCP传输速率不能大于应用的数据处理速率

重传

  • 拥塞点:致使网络拥塞的数据量
  • 拥塞窗口:发送方维护的虚拟的窗口
实际窗口的大小是接收窗口和拥塞窗口的较小值
  • RTO:从发送原始包(丢失,未到达接收方)到重传该包的这段时间

图片描述

TCP引入了RTT——Round Trip Time,也就是一个数据包从发出去到回来的时间。这样发送端就大约知道须要多少的时间,从而能够方便地设置Timeout——RTO(Retransmission TimeOut),以让咱们的重传机制更高效。
  • 慢启动:在拥塞窗口增大的初期,接收到N个确认,则将拥塞窗口增大N个MSS。即翻倍增长。
  • 临界窗口值:数组

    • 若以前未发生拥塞,可取相对较大值,好比和最大接收窗口相等。
    • 若以前发生了拥塞,RFC建议大小为以前发生拥塞时未确认包的一半,但 >= 2个MSS。
  • 拥塞避免:每一个往返时间增长1个MSS(发送16个MSS所有被确认了,增长1个MSS)
  • 超时重传:发送方在发送后一段时间内没收到确认,则须要从新传输。缓存

    • 超时重传后,拥塞窗口须要从慢启动从新开始。
    • 影响:1.期间不能传输数据。2.拥塞窗口急剧减小
    • RFC建议将以后的拥塞窗口变成1个MSS。
  • 快速重传:网络

    • 当单包丢失,后续包正常到达时,接收方发现其Seq大于指望值,因此没接收到一个包就Ack一次指望的Seq,提醒重传;
    • 发送方接到3个以上(Dup Ack)时,当即重传该包。(回复3个Ack是由于避免只是乱序缘由致使重传)
Wireshark -> Analyze -> Expert Info Composite #能够查看重传包

丢包对小文件的影响大于大文件。小文件可能凑不到3个Dup Ack,致使超时重传。tcp

超时重传

图片描述

快速重传

图片描述

拥塞控制

  • 慢启动 - 拥塞避免 - 拥塞发生(触发超时重传) - 慢启动
  • 慢启动 - 拥塞避免 - 快速重传 - 拥塞避免
  • SACK(RFC2018定义):ide

    • 接收到的包;在丢包时,经过接收方回复Ack+SACK,确认丢失的具体包
    • 能够经过tcp_sack参数打开这个功能(Linux 2.4后默认打开)。

延迟确认:

  1. TCP交互场景中,接收方在收到包后暂时无数据返回,则延迟一段时间确认,
  2. 若在这段时间内有数据须要返回,则确认信息和数据一块儿返回。
  3. 并无提升性能,只是减小了确认包。

UDP

  • UDP头:端口号、包长度、校验码。共8个字节。
  • 没有Seq、Ack,没法维持一个链接。省去创建链接的负担。(例如:DNS)
  • 发送方的网络层会将数据包分片。接收方进行组装。
  • UDP没有重传机制,丢包由应用层来处理,丢包的话须要重传全部的包。
  • 接收方经过“More fragments”参数组装包;性能

    • 1.后续还有分片;
    • 0.这是最后一个分片,能够开始组装。
易遭受黑客攻击,黑客快速发送flag=1的UDP包,使发送方一直没法将包组装起来,致使内存耗尽。

图片描述

相关文章
相关标签/搜索