作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

目前几乎所有的应用都会跟网络打交道,所以我们了解和熟悉网络对我们后续的排错是很有必要的,我这里讲解的部分主要是我个人理解来进行讲解。
在计算机网络中,IP 协议很少被单独讲解,核心原因是它属于 TCP/IP 协议族的网络层核心,必须和传输层的 TCP/UDP 配合才能完成端到端的通信。简单来说:
传输层的核心使命
传输层位于 网络层(IP 协议) 和 应用层(HTTP、DNS 等) 之间,核心任务有两个:
端口寻址:通过 端口号(0~65535)区分同一台设备上的不同应用程序(如 HTTP 用 80 端口,SSH 用 22 端口),解决「数据该交给哪个应用」的问题。
传输控制:根据应用需求,提供可靠或高效的数据传输服务,弥补 IP 协议「无连接、不可靠」的缺陷。
类比场景:
IP 协议 = 快递公司的「地址配送系统」,负责把包裹从甲地送到乙地的小区门口;
传输层协议 = 快递员的「配送服务规则」,决定是「挂号签收(TCP)」还是「直接放门口(UDP)」。
可靠的「面向连接」传输
TCP(Transmission Control Protocol,传输控制协议)是面向连接、可靠、有序的传输层协议,核心目标是保证数据准确无误地送达,哪怕牺牲一定的传输效率。
1. 核心特性:面向连接 + 可靠性 + 有序性
特性 | 具体含义 | 类比理解 |
|---|---|---|
面向连接 | 数据传输前,必须通过「三次握手」建立连接;传输结束后,通过「四次挥手」断开连接 | 打电话:先拨号(建立连接),通话(传数据),挂电话(断开连接) |
可靠性 | 保证数据不丢失、不重复、不损坏;丢包会自动重传,重复包会自动丢弃 | 挂号信:收件人必须签字确认,没收到就重新寄送 |
有序性 | 数据包按发送顺序送达,乱序的包会被重新排序 | 快递按订单顺序配送,收件人按顺序拆包 |
2. TCP 的核心机制:如何实现「可靠性」?
TCP 的可靠性是通过一系列「硬核机制」实现的,这些机制也是 TCP 的核心考点。
(1)三次握手:建立可靠连接
TCP 是面向连接的协议,数据传输前必须先建立连接,这个过程叫「三次握手」,目的是确认双方的发送和接收能力都正常。
握手流程:
第一次握手(SYN):客户端 → 服务器,发送 SYN 报文,请求建立连接,附带初始序列号 seq=x。
第二次握手(SYN+ACK):服务器 → 客户端,发送 SYN+ACK 报文,确认收到客户端请求(ACK=x+1),同时附带自己的初始序列号 seq=y。
第三次握手(ACK):客户端 → 服务器,发送 ACK 报文,确认收到服务器的响应(ACK=y+1)。
(2)序列号与确认应答(ACK):保证不丢包、不重复
序列号(seq):每个 TCP 数据包都有唯一的序列号,用于标记数据的顺序。
确认应答(ACK):接收方收到数据后,必须发送 ACK 报文,告诉发送方「我已经收到了序列号≤z 的数据,请继续发 z+1 之后的数据」。
(3)流量控制:避免接收方「缓存溢出」
接收方的缓存空间是有限的,如果发送方发得太快,接收方会来不及处理,导致数据丢失。
TCP 通过 滑动窗口 机制实现流量控制:
接收方在 ACK 报文中,附带自己的「接收窗口大小(rwnd)」,告诉发送方「我最多还能接收这么多数据」;
发送方的发送窗口大小 ≤ 接收窗口大小,动态调整发送速度,避免给接收方「压货」。
(4)拥塞控制:避免网络「堵车」
网络带宽是有限的,如果所有设备都疯狂发数据,会导致网络拥堵、丢包率飙升。
TCP 通过 慢启动、拥塞避免、快速重传、快速恢复 四个阶段,动态调整发送速度:
慢启动:刚建立连接时,发送窗口从小到大指数增长,试探网络的承载能力;
拥塞避免:当发送窗口增长到阈值后,改为线性增长,避免网络过载;
快速重传:如果连续收到 3 个重复的 ACK,立刻重传丢失的数据包,不用等超时;
快速恢复:重传后,适当减小发送窗口,快速恢复到稳定传输状态。
(5)四次挥手:断开连接的「优雅方式」
数据传输完成后,需要断开连接,这个过程叫「四次挥手」,目的是确保双方都没有未处理完的数据。
挥手流程:
第一次挥手(FIN):客户端 → 服务器,发送 FIN 报文,告诉服务器「我没有数据要发了,请求断开连接」。
第二次挥手(ACK):服务器 → 客户端,发送 ACK 报文,确认收到客户端的 FIN 请求。此时服务器可能还有数据要发,连接处于「半关闭」状态。
第三次挥手(FIN):服务器 → 客户端,发送 FIN 报文,告诉客户端「我也没有数据要发了,可以断开连接了」。
第四次挥手(ACK):客户端 → 服务器,发送 ACK 报文,确认收到服务器的 FIN 请求。等待 2MSL(最大报文生存时间)后,彻底关闭连接。
3. TCP 的适用场景
TCP 适合对可靠性要求高、能容忍延迟的业务,比如:
网页浏览(HTTP/HTTPS):不能丢包,否则页面会显示异常;
文件传输(FTP、SFTP):丢包会导致文件损坏;
远程登录(SSH、Telnet):需要准确的命令交互;
邮件发送(SMTP、POP3):邮件内容不能丢失或乱序。