TCP (Transmission Control Protocol)
干什么用的
UDP 只加了端口号,剩下的全丢给应用:包丢了没人补、顺序乱了没人排、发太快了没人拦。
★★★ TCP 把这三件事全接过来了。代价是两端都要为每条连接记状态,头也从 8 字节涨到 20 字节起,而且传数据之前先得花一个半 RTT 握手。
为什么握手是三次
★★★ 因为要让双方各自的序号都被对方确认过:
· A 发 SYN 带自己的初始序号 → B 知道了 A 的;
· B 回 SYN+ACK,带自己的序号、并确认 A 的 → A 两件事都知道了;
· A 再 ACK 一次 → B 才知道自己的序号也被收到了。
★★ 两次不够(B 的序号没人确认),四次是多余的一步。
★ 常见误解
★★★ 「TCP 保证送到」 —— 它保证的是送不到会告诉你。网线拔了它也变不出办法。
★★★ 「TCP 比 UDP 慢」 —— 链路好的时候一样快。差别出在丢包时:TCP 停下来补,UDP 继续往前冲。
★★ 「收到 ACK 就是对方应用读到了」 —— ACK 只说明内核收下了,应用可能还没 read。