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的四次挥手。

相关推荐
草莓熊Lotso15 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
XR12345678815 小时前
汽车制造园区网络怎么建?柔性产线与 AGV 的选型逻辑
网络·汽车·制造
IT大白鼠1 天前
MSF二次开发与自定义模块编写
网络·安全·web安全·msf
Julien20041 天前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
kekekzt1 天前
TCP协议的粘包问题介绍,IP分片,MTU,MSS,滑动窗口的概念及之间的关系
网络·网络协议·tcp/ip
mooooooooooye1 天前
2026 年跨平台 SSH 客户端怎么选?Xterminal、Termius、MobaXterm 谁更合适
服务器·网络·ssh
Blockchina1 天前
Codex 实战:从一句需求到可验收的 Linux 主机巡检脚本
运维·服务器·网络
江安下小雨1 天前
muduo网络库(十六):新增连接池模块
网络·c++
aiot189189352181 天前
机场候机大厅高空场景技术红线!蓝牙AOA不能做手机导航??!!
大数据·网络·人工智能·蓝牙aoa
从入门到退休1 天前
企业远程控制选型:向日葵SDK vs RustDesk自建,谁是更务实的选择?
运维·服务器·网络·远程工作·远程控制