TCP三次握手和TCP四次挥手

一 TCP三次握手

TCP建立连接的过程叫做握手,握手需要客户端和服务器之间交换三个TCP报文段。如图所示,假设主机A为TCP客户端,主机B为TCP服务端。在最初时间,两端的TCP进程都是处于CLOSED状态

(1)主机A主动发起连接请求,向B发送连接请求报文段,这时首部的同步位字段SYN=1,同时选择一个初始序号seq=x,此报文段不携带数据,但要消耗一个序号(序号详情见上篇文章:序号字段);

(2)主机B收到报文段请求时,如果同意建立连接,则向A发送确认数据段,确认报文段中吧SYN和ACK字段都设置为1,确认号为ack=x+1(确认号详情见上篇文章确认号字段,注意确认确认号字段ack和ACK字段的区别),同时为自己选择一个序号seq=y,此报文段同样不携带数据;

(3)主机A收到主机B的确认后,还要给主机B发送一个确认报文段。确认报文段的ACK值为1,确认号为ack=y+1,而自己的序号为seq=x+1,当主机B收到了主机A的确认包时,彼此进入ESTABLISHED状态,准备传输数据。

TCP建立连接的过程我们称作TCP的三次握手,正是此种建连机制,保证了TCP协议的可靠传输。

在整个传输过程中,主机A向主机B发送请求连接的报文段,如果一直未收到主机B的确认数据报,主机A会一直发送建连数据报,直到收到主机B的确认数据报或者建连请求关闭。

当主机A收到了主机B的确认包,主机A会向主机B发送一个确认包,如果主机B未收到主机A的确认包,主机B会认为建连未成功,只要当均收到对方对应确认包(都能确认彼此双方均已收到),才可以正式开始传输数据。

二 TCP四次挥手

当TCP双方传输数据完毕后,需要进一步释放连接。再释放开始之前,彼此双方处于ESTABLISHED状态

(1)主机A进程首先向其TCP发出连接释放报文段,并停止发送数据,主动关闭连接,主机A会把连接释放报文段首部的终止控制位设置未1,序号seq=u,u等于前面已传送过的数据的最后一个字节的序号加1.

(2)主机B收到主机A的连接释放报文段,会立即发送出一个确认报文段,ACK=1,ack=u+1,syn=v,v等于前面主机B已传送过的数据的最后一个字节的序号+1,此时主机A和主机B之间单向连接已经释放,我们称此时的状态未半关闭状态。主机A无法向主机B发送数据,但主机B可以向主机A发送数据,且主机A需要接受。

(3)若主机B已经没有向主机A发送的数据,其应用进程就通知TCP释放连接。此时主机B发送的连接释放报文段FIN置为1,此时序号seq=w,但是确认号ack仍需要重复上次的确认号ack=u+1。

(4)主机A收到主机B的连接释放报文段后,向主机B发送确认报文段,ACK字段置为1,确认号ack=w+1,序号seq=u+1。至此,TCP连接释放。

此过程我们称为TCP的四次挥手。

相关推荐
ylscode1 天前
微软Exchange Server曝高危零日漏洞:朝鲜黑客利用“Toast攻击“入侵企业邮件系统
网络·安全·web安全
heimeiyingwang1 天前
【架构实战】可观测性体系:从监控到全链路追踪
网络·数据库·架构
小茴香3531 天前
HTTP缓存
网络协议·http·缓存·面试
weixin_511840471 天前
2026年5月4日 OCS技术方案路线选择与优劣深度调研报告
网络·人工智能
绝知此事1 天前
Netty实战:从零构建高性能TCP通信服务(含心跳检测)
java·网络·spring boot·网络协议·tcp/ip
小初生ZLD1 天前
AI开发者的网络卡点:Anthropic连接超时实战避坑
网络
Bobolink_1 天前
跨境网络中“高延迟”问题的技术成因与解决路径
网络·网络优化·跨境网络
呉師傅1 天前
UPS滴滴告警!如何测量UPS电池内阻【UPS学习】
运维·服务器·网络·学习·电脑
@insist1231 天前
信息安全工程师-工控安全产品体系与行业实践全解析
网络·安全·软考·信息安全工程师·软件水平考试
段一凡-华北理工大学1 天前
2026 高炉炼铁智能化技术全景与演进路径~系列文章03:高炉工业数据治理标准化与全生命周期血缘体系
网络·人工智能·高炉炼铁·工业智能体·炉温监测·高炉智能化