TCP协议简单分析和握手挥手过程

TCP介绍

  • TCP是可靠的传输层协议,建立连接之前会经历3次握手的阶段。

    • 确认机制:接受方 收到数据之后会向 发送方 回复ACK
    • 重传机制:发送方 在一定时间内没有收到 接收方的ACK就会重新发送
  • 握手目的:与端口建立连接

TCP的三次握手

10.0.0.1为客户端,10.0.0.2为服务端

1️⃣客户端向服务端发送SYN(Synchronize Sequence Numbers同步序列请求),seq=x

2️⃣服务端收到了这个请求,同意建立连接。回复syn和ack(Acknowledge character确认字符,ack(收到的seq+1)和seq(随机)

3️⃣客户端会发出一个ack表示确认收到服务端的回复。ack=收到的seq+1(确认收到对方发送的数据),seq=自己第一次发出的seq+1

四次挥手

可以看到客户端使用TCP的get方法获取http信息,服务端返回之后,客户端回复了ACK=308和seq=155

1️⃣客户端发送fin(final),ack=seq (?seq+1?),seq=X。

2️⃣服务端返回ack=X+1,seq=Y。

3️⃣服务端发送fin,ack=X+1,seq=Y。

4️⃣客户端回复ack=Y+1,seq=X+1

5️⃣结束连接

TCP状态

三次握手的5种状态

关闭,监听,syn发送,syn接收,连接

四次挥手的6种状态

状态 状态主体 状态描述
established 客户端/服务端 断开前的初始化
fin_wait1 客户端 发送断开fin请求后
close_wait 服务端 收到fin并向客户端回复ack
fin_wait2 客户端 收到服务端返回的ack,等待数据传输
last-ack 服务端 发送断开fin请求后
time_wait 客户端 回复syn断开请求发出ack
closed 客户端/服务端 客户端等待2msl,服务端收到ack报文
closeing 客户端 没有收到ack,直接收到fin。
  • 四次挥手时,发送了SYN自己就不会给对方发送数据了,但是可以接受数据。
  • closeing状态具体原因案例:
    • 代码问题:如果客户端调用第三方接口,如mysql,redis。调用完毕忘记关闭连接。服务器等到超时之后就会主动发送FIN报文。导致客服端出现closeing状态

CentosOS查看连接状态

ss命令选项 说明
-a 显示所有端口
-e 更为详细的信息
-u UDP端口
-t TCP端口
-l 显示处于监听状态的端口
-p 显示调用端口的相关进程
-n 不解析DNS
shell 复制代码
根据服务名找出所占用端口
[root@backup ~]# netstat -antlp|grep rsync
tcp        0      0 0.0.0.0:873    0.0.0.0:*       LISTEN      7891/rsync          
tcp6       0      0 :::873         :::*            LISTEN      7891/rsync
  • lsof命令是一个查看系统进程的命令,还可以查看文件...调用情况
lsof命令选项 说明
-nPi :22 查看22端口占用状态。P显示PID,n不解析域名
bash 复制代码
[root@Centos-1 ~]# ss -ant
State       Recv-Q Send-Q   Local Address:Port                  Peer Address:Port  
LISTEN      0      128                  *:80                               *:*   
ESTAB       0      36       192.168.43.71:22                  192.168.43.253:15352 
ESTAB       0      0        192.168.43.71:22                  192.168.43.253:13281 
LISTEN      0      100              [::1]:25                            [::]:*  
bash 复制代码
[root@wzyCentos ~]# netstat -ant|grep -w 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 192.168.43.70:22        192.168.43.253:52040    ESTABLISHED
tcp        0     36 192.168.43.70:22        192.168.43.253:2862     ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN 
3.253:2862     ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN 
相关推荐
anew___37 分钟前
《从零手写操作系统 (63):安全与加固——从内核保护到沙箱隔离》
网络·安全
Lzg_na43 分钟前
VXLAN:背景、机制、报文字段与主机转发流程
网络
Android系统攻城狮2 小时前
Linux FFmpeg深度解析之avcodec_default_get_encode_buffer调用流程与实战(二十八)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频
乐维_lwops3 小时前
案例解读:大型综合性科创产业园运维监控落地实践
运维·网络·人工智能·安全·it监控·国产运维智能体
番茄啊4 小时前
linux 开启xftp连接
linux·运维·服务器
m0_715674434 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
大数据·网络·人工智能·安全·网络安全·政务
AI 编程助手GPT5 小时前
curl 返回成功就能收文件?用本地 HTTP 验证错误页与超时
网络·网络协议·http
Julien20045 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
十碗饭吃不饱6 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
流浪0016 小时前
计算机网络篇16:传输层——TCP 报头属性字段:16 位窗口大小撑起流量控制,六个标志位标识报文类型
网络协议·tcp/ip·计算机网络·urg紧急指针·tcp报头