TCP协议的三次握手和四次挥手

本文详细解析了TCP协议中的三次握手过程,包括客户端如何向服务器发起连接请求,服务器如何响应并建立连接,以及连接关闭时的四次挥手流程。重点突出了每个步骤的关键作用和实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三次握手:

对于三次握手,我是这样来理解的

(1)客户端发送一个序列号(syn)给服务器

(2)服务器接收以后,会将这个序列号+1作为确认信号(ack)和自己的一个服务号(syn)给客户

(3)客户接收到这两个信息以后,会将服务好(syn)+1作为确认信号(ack)给服务器

三次握手完毕


断开连接的四次挥手:



由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。


(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。


1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭


关闭行为是在发起方数据发送完毕之后,给对方发出一个FIN(finish)数据段。直到接收到对方发送的FIN,且对方收到了接收确认ACK之后,双方的数据通信完全结束,过程中每次接收都需要返回确认数据段ACK。

### TCP协议三次握手四次挥手详解 #### 三次握手过程 TCP协议通过三次握手建立可靠的连接。以下是三次握手的具体过程: 1. 客户端向服务器发送一个SYN(同步)报文段,表示请求建立连接,并随机生成一个初始序列号`Seq = x`[^1]。 2. 服务器收到客户端的SYN报文后,返回一个SYN+ACK报文段。该报文段包含两个信息:一是确认客户端的SYN报文,二是服务器也随机生成一个初始序列号`Seq = y`,同时将确认号设置为`Ack = x + 1`[^1]。 3. 客户端收到服务器的SYN+ACK报文后,发送最后一个ACK(确认)报文段,将确认号设置为`Ack = y + 1`。此时,客户端服务器都认为连接已成功建立。 通过三次握手,可以确保双方都准备好进行数据传输,并解决可能存在的丢包问题[^2]。 #### 四次挥手过程 TCP协议通过四次挥手断开连接,以确保所有数据能够完全传输。以下是四次挥手的具体过程: 1. 主动关闭方(通常是客户端)发送一个FIN(结束)报文段,表示不再发送数据,但仍然可以接收数据,同时设置序列号`Seq = u`。 2. 被动关闭方(通常是服务器)收到FIN报文后,返回一个ACK(确认)报文段,将确认号设置为`Ack = u + 1`,表示已经接收到关闭请求。 3. 被动关闭方完成未完成的数据传输后,发送一个FIN报文段,表示自己也不再发送数据,同时设置序列号`Seq = v`[^1]。 4. 主动关闭方收到FIN报文后,返回一个ACK(确认)报文段,将确认号设置为`Ack = v + 1`。此时,双方都认为连接已成功断开[^1]。 由于TCP协议需要确保数据完全传输,因此在断开连接时需要额外的一次握手来确认被动关闭方的数据传输完成情况。 #### 示例代码 以下是一个简单的Python代码示例,展示如何使用`socket`模块模拟TCP连接的建立与断开: ```python import socket # 创建一个TCP/IP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到服务器(模拟三次握手) server_address = ('localhost', 10000) sock.connect(server_address) try: # 发送数据 message = 'This is the message. It will be repeated.' sock.sendall(message.encode()) # 查看响应 data = sock.recv(1024) print('Received:', data.decode()) finally: # 关闭连接(模拟四次挥手) sock.close() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值