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传输速率不能大于应用的数据处理速率
实际窗口的大小是接收窗口和拥塞窗口的较小值
TCP引入了RTT——Round Trip Time,也就是一个数据包从发出去到回来的时间。这样发送端就大约知道须要多少的时间,从而能够方便地设置Timeout——RTO(Retransmission TimeOut),以让咱们的重传机制更高效。
临界窗口值:数组
超时重传:发送方在发送后一段时间内没收到确认,则须要从新传输。缓存
快速重传:网络
Wireshark -> Analyze -> Expert Info Composite #能够查看重传包丢包对小文件的影响大于大文件。小文件可能凑不到3个Dup Ack,致使超时重传。tcp
SACK(RFC2018定义):ide
接收方经过“More fragments”参数组装包;性能
易遭受黑客攻击,黑客快速发送flag=1的UDP包,使发送方一直没法将包组装起来,致使内存耗尽。