TCP的状态和三次握手

TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.

其中,对于我们日常的分析有用的就是前面的五个字段。

 它们的含义是:

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。

 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,

 如果只是单个的一个SYN,它表示的只是建立连接。

TCP的几次握手就是通过这样的ACK表现出来的。

 但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。

RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。

 一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。

PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

 概念补充-TCP三次握手:

TCP(Transmission Control Protocol)传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

 完成三次握手,主机A与主机B开始传送数据。

 

 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.

### TCP/IP 协议中的四次挥手过程与原理 #### 四次挥手的过程 当应用程序结束通信时,会触发传输控制协议 (TCP) 的终止连接机制。这一过程涉及四个步骤,通常被称为“四次挥手”。以下是详细的流程: - **第一次挥手**:主动关闭方(通常是客户端)发送一个 FIN 报文段给被动关闭方(通常是服务器),表示希望断开连接并停止数据传输[^1]。 ```plaintext Client Server | | FIN -> | | | ``` - **第二次挥手**:接收到 FIN 后,被动关闭方返回一个 ACK 报文作为响应,确认编号为收到的 FIN 序列号加一。此时,虽然逻辑上已经同意断开连接,但实际上可能还有未处理的数据要传送给对方,因此不会立即关闭连接[^2]。 ```plaintext Client Server | | <- ACK | | | ``` - **第三次挥手**:一旦被动关闭方完成了所有待发送的数据传递,则也会发出自己的 FIN 请求来通知另一端可以彻底切断连接了[^3]。 ```plaintext Client Server | | <- FIN | | | ``` - **第四次挥手**:最后一步是由最初发起中断请求的一侧回应最后一个 ACK 给另一侧,表明其接收到了对方发来的 FIN 并准备好完全释放这条链路资源。至此整个双向链接正式解除[^4]。 ```plaintext Client Server | | ACK -> | | | ``` #### 三次握手解释 相比之下,“三次握手”的目的是为了建立一个新的可靠连接而不是拆除现有连接。“三次握手”确保双方都能正确地初始化各自的缓冲区其他必要参数,并验证彼此的身份以及网络路径的有效性。具体来说,在这个过程中每一边都会告知对方自己期望使用的初始序列号以便后续消息能够有序到达目的地而不丢失或重复。 - 客户端首先发送带有同步标志(SYN)设置为1的数据包到服务器,同时携带一个随机选择的起始序列号X。 - 接着服务器回复一个同样设置了SYN位并且包含了它自己的初始序列数Y加上对前一条信息的认可(通过将ACK置为1并将确认号码设为X+1)的消息给客户机。 - 当客户机再次接收到上述应答之后再回送一次仅含ACK标记的信息回去,其中包含对于之前所接受到的那个新序列数值Y+1的确证;自此以后二者便进入了稳定的状态——即所谓的 ESTABLISHED 阶段,准备就绪用于实际的数据交换活动开始了[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值