TCP运输连接的建立和释放

本文深入解析TCP连接的三个关键阶段:建立连接、数据传送及连接释放。详细介绍了TCP报文首部字段,如序号、确认号、确认位、同步和终止等,以及它们在三次握手建立连接和四次挥手释放连接过程中的作用。

运输连接的三个阶段:

  • 建立连接
  • 数据传送
  • 连接释放
    TCP报文首部字段:

序号seq:本报文段所发送的第一个字节的序号。

确认号ack:期望收到对方下一个报文的第一个数据字节的序号。
例如B正确收到了A发送的一个报文段,其序号字段值是501,而数据长度是200字节(501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号为701,于是B在发送A的确认报文中把确认号置为701.
- 即:若确认号 = N,表明到序号N-1的所有数据都已正确收到。

确认位ACK:仅当ACK = 1时, 确认号字段才有效。

同步SYN:在建立连接时用来同步序号。
- 当SYN =1, ACK = 0时,表明这是一个请求报文,表明请求建立连接。
- 若对方同意建立连接,则发送响应报文,响应报文中SYN = 1, ACK = 1。

终止FIN:用来释放一个连接。当FIN = 1 时,表明此报文的发送方的数据已经发送完毕,请求释放连接。

记忆版1

TCP连接建立:三次握手(简)

在这里插入图片描述

流程:请求-确认-对确认的确认

步骤:

  1. 客户端向服务器端发送SYN包;
  2. 服务端向客户端发送SYN+ACK;
  3. 客户端回复ACK。

描述:客户端发送连接请求报文段,服务器端发送确认报文段,客户端发送确认报文段。

发生的错误:已失效的连接请求报文段
如果是两次握手:假如A发送了两次“连接请求报文段”,其中一个完成了建立连接、传输数据、关闭连接的操作后。服务器端对另一个“连接请求报文段”进行了确认而进入等待,浪费资源。而三次握手机制中由于服务器端并没有收到客户端的“确认报文段”,因而知道不必太长等待。

TCP连接释放:四次挥手(简)

在这里插入图片描述

流程:A:拜 B:好吧,拜 A:好吧。

  1. 客户端向服务器端发送FIN;
  2. 服务器端回复ACK,并进入wait状态;
  3. 服务器端确认并发送FIN;
  4. 客户端回复ACK。
TCP连接建立释放TCP协议中重要的组成部分,涉及到连接建立、数据传送以及连接释放三个阶段,以下是对其原理的详细介绍: - **TCP连接建立**:采用客户 - 服务器模式,主动发起连接建立的应用进程叫做客户,被动等待连接建立的应用进程叫做服务器。连接建立要经过三次握手。这一过程能使通信双确知对的存在,允许双协商一些参数(如最大报文段长度、最大窗口大小等),还能对运输实体资源进行分配(如缓存大小)[^1][^2]。 - **TCP连接释放**:TCP是全双工通信,支持两个向通信,所以结束时每个向为确保数据都能完全从一端到达另一端,一端发起结束申请数据包,另一端都要发送确认数据包。两个向要分开结束,每次结束需要两次握手,最终TCP的结束需要4次握手。数据传输结束后,通信双都可释放连接。例如,A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放文段首部的终止控制位FIN置为1,其序号 seq=u(它等于前面已传过的数据的最后一个字节的序号加1),这时A进入FIN - WAIT - 1(终止等待1)状态,等待B的确认 [^3][^4]。 ### 代码演示 以下是一个简单的Python示例,使用`socket`库模拟TCP连接建立释放过程: ```python import socket # 创建一个TCP套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址端口 server_address = ('localhost', 8888) server_socket.bind(server_address) # 监听连接 server_socket.listen(1) print('等待客户端连接...') # 接受客户端连接 client_socket, client_address = server_socket.accept() print(f'连接来自: {client_address}') # 模拟数据传输 message = 'Hello, client!' client_socket.sendall(message.encode()) # 接收客户端数据 data = client_socket.recv(1024) print(f'收到客户端消息: {data.decode()}') # 释放连接 client_socket.close() server_socket.close() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值