TCP

原文链接:万字长文 | 23 个问题 TCP 疑难杂症全解析

TCP 即 Transmission Control Protocol,可以看到是一个传输控制协议,重点就在这个控制。

TCP协议头

首先可以看到 TCP 包只有端口,没有 IP。

Seq 就是 Sequence Number 即序号,它是用来解决乱序问题的。

ACK 就是 Acknowledgement Numer 即确认号,它是用来解决丢包情况的,告诉发送方这个包我收到啦。

标志位就是 TCP flags 用来标记这个包是什么类型的,用来控制 TPC 的状态。

窗口就是滑动窗口,Sliding Window,用来流控。

三次握手

四次挥手

为什么要TIME_WAIT

断开连接发起方在接受到接受方的 FIN 并回复 ACK 之后并没有直接进入 CLOSED 状态,而是进行了一波等待,等待时间为 2MSL。

MSL 是 Maximum Segment Lifetime,即报文最长生存时间,RFC 793 定义的 MSL 时间是 2 分钟,Linux 实际实现是 30s,那么 2MSL 是一分钟。

那么为什么要等 2MSL 呢?

TCP重传/滑动窗口

你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了