摘记《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,导致超时重传。
超时重传
快速重传
拥塞控制
- 慢启动 - 拥塞避免 - 拥塞发生(触发超时重传) - 慢启动
- 慢启动 - 拥塞避免 - 快速重传 - 拥塞避免
SACK(RFC2018定义):
- 接收到的包;在丢包时,通过接收方回复Ack+SACK,确认丢失的具体包
- 可以通过tcp_sack参数打开这个功能(Linux 2.4后默认打开)。
延迟确认:
- TCP交互场景中,接收方在收到包后暂时无数据返回,则延迟一段时间确认,
- 若在这段时间内有数据需要返回,则确认信息和数据一起返回。
- 并没有提高性能,只是减少了确认包。
UDP
- UDP头:端口号、包长度、校验码。共8个字节。
- 没有Seq、Ack,无法维持一个连接。省去建立连接的负担。(例如:DNS)
- 发送方的网络层会将数据包分片。接收方进行组装。
- UDP没有重传机制,丢包由应用层来处理,丢包的话需要重传所有的包。
接收方通过“More fragments”参数组装包;
- 1.后续还有分片;
- 0.这是最后一个分片,可以开始组装。
易遭受黑客攻击,黑客快速发送flag=1的UDP包,使发送方一直无法将包组装起来,导致内存耗尽。
相关推荐
gaogaorimu 2020-07-18
Dukezhao 2020-07-04
Jungzhang 2020-06-28
LandryBean 2020-06-14
Dukezhao 2020-05-29
iamplane 2020-05-26
dancheng 2020-05-26
gaogaorimu 2020-05-26
Jungzhang 2020-05-19
gaogaorimu 2020-05-09
dancheng 2020-05-01
MAC2007 2020-05-01
Jungzhang 2020-04-22
Dukezhao 2020-04-16
dancheng 2020-04-15
Jungzhang 2020-04-08
michellechouu 2020-04-08
Dukezhao 2020-03-14
jiangfuqiang 2020-03-12