TCP(Transmission Control Protocol,传输控制协议)是互联网最核心的通信协议之一,相当于互联网世界的可靠快递系统;
普通如 UDP 协议:
直接发送,不关心对方是否收到;
TCP 协议:
三次握手建立连接;
ACK 确认;
丢包重传;
四次挥手断开连接;
核心任务:
1. 数据准确传输(不丢包、不乱序)
2. 稳定连接(先建立连接,再传数据)
3. 可靠通信(收到数据要回复确认)
TCP 三次握手(建立连接)
防止历史错误连接,确保双方都能收发;
把它想象成两个人(A 和 B)打电话的场景,确认对方是否能听见。
1、A 发送一个 SYN 包,表示想建立连接;
(A打给B:能见听到吗?)
2、B 收到后回复 SYN + ACK 表示我收到了你的请求,我要也确认你能听到;
(B回答A:我能听到,你能听到我吗?
3、A 再回复 ACK,表示确定你能听到我;
(A回答B:我也能听到你)
连接建立成功就可以正常传输数据了!
为什么是 3 次?
2次不行:B 不知道 A 是否收到自己的回复,3次刚好确认双方都能收发数据;
TCP 四次挥手(断开连接)
因为双方可能还有数据要传,不能直接挂断;
把它想象成两个人(A 和 B)打完电话的场景,要挂断电话。
1、A 发送FIN 表示自己不再发送数据了;
(A对B说:我说完了,要挂了)
2、B 先回复 ACK 表示收到你的结束请求;
(B回答A:好的,我知道了)
3、B 可能还有数据要传,等传完后也发 FIN 表示结束;
(B对A说:我也说完了,我也要挂了)
4、A 最后回复 ACK 确认 B 可以关闭连接;
(A回答B:好的 拜拜)
为什么是 4 次?
因为 TCP 是全双工(双方可以同时收发数据),所以必须分别确认关闭,B 可能还有数据要传,不能直接挂断,所以比握手多一步!
TCP工作场景:
网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)、远程登录(SSH)
不适用场景:
视频直播(UDP更合适)、网络游戏(部分实时操作用UDP)、VoIP语音通话(少量丢包不影响理解)
-------------------------------------------------手动分割线-------------------------------------------------
SYN(Synchronize,同步序列号)
用来发起一个新连接,同步双方的初始序列号;
三次握手中客户端和服务端各发送一次 SYN,携带初始序列号,用于后续数据顺序控制;
ACK(Acknowledgment,确认)
确认已收到对方的数据包;
除了初始 SYN 包外,TCP 通信中几乎每个包都设置 ACK 位,携带确认号,表示期望收到的下一个字节的序号;
FIN(Finish,结束)
用来正常关闭TCP连接;
发送 FIN 表示本方不再发送数据,但还可以接受数据,需要对方确认才能完全关闭连接;
当你在浏览器输入网址时,背后是TCP在默默确保每个网页元素都完整加载