[Linux网络编程]05-TCP状态和端口复用,shutdown函数(主动方建立/关闭连接状态,被动方建立/关闭连接状态,2MSL时长,TCP其他状态)

一.TCP状态图表示

netstat -apn | grep client 查看客户端网络连接状态
netstat -apn | grep port 查看端口的网络连接状态

二.主动方,被动方TCP连接状态

1. 主动发起连接请求端: CLOSE -- 发送SYN -- SEND_SYN -- 接收 ACK、SYN -- SEND_SYN -- 发送 ACK -- ESTABLISHED(数据通信态)

2. 主动关闭连接请求端: ESTABLISHED(数据通信态) -- 发送 FIN -- FIN_WAIT_1 -- 接收ACK -- FIN_WAIT_2(半关闭状态)-- 接收对端发送 FIN -- FIN_WAIT_2(半关闭)-- 回发ACK -- TIME_WAIT(只有主动关闭连接方,会经历该状态)-- 等 2MSL时长 -- CLOSE

3. 被动接收连接请求端: CLOSE -- LISTEN -- 接收 SYN -- LISTEN -- 发送 ACK、SYN -- SYN_RCVD -- 接收ACK -- ESTABLISHED(数据通信态)

4. 被动关闭连接请求端: ESTABLISHED(数据通信态) -- 接收 FIN -- ESTABLISHED(数据通信态) -- 发送ACK -- CLOSE_WAIT (说明对端【主动关闭连接端】处于半关闭状态) -- 发送FIN -- LAST_ACK -- 接收ACK -- CLOSE

重点记忆: ESTABLISHED、FIN_WAIT_2(半关闭) 、 CLOSE_WAIT、TIME_WAIT(2MSL)

三.2MSL时长

2MSL时长:

一定出现在【主动关闭连接请求端】。 --- 对应 TIME_WAIT 状态。

目的是保证,最后一个 ACK 能成功被对端接收。(等待期间,对端没收到我发的ACK,对端会再次发送FIN请求。)

四.端口复用

上文所述,当主动端发起断开连接请求,在接受到被动端的FIN请求,回发ATK确认标志后,会进入TIME_WAIT状态,此时需要等待2MSL时间。

如果服务器作为主动断开端,则服务器需要等待2MSL时间后,才能再次启动,这段时间内端口处于占用状态。

可以setsocketopt()来设置socket属性,其中就包括了端口复用属性,可以使得服务器关闭后,端口不再被占用。

其余的setsocketopt属性很多,部分如下:

五. 半关闭及shutdown函数:

通信双方中,只有一端关闭通信。 --- FIN_WAIT_2

close和shutdown都用于关闭文件描述符,不同的是,shutdown可以选择关闭读端或写端,同时,shutdown采用的是全关闭办法(假如有多个文件描述符指向同一个文件,shutdown会关闭指向该文件的所有文件描述符 )

close(cfd);

shutdown(int fd, int how);

how: SHUT_RD 关读端

SHUT_WR 关写端

SHUT_RDWR 关读写

shutdown在关闭多个文件描述符应用的文件时,采用全关闭方法。close,只关闭一个。

相关推荐
全栈陈序员1 小时前
【Git】从入门到精通(十)—— 撤销与恢复:git checkout与git restore
运维·网络·数据库·git
honsor8 小时前
SNMP 读取以太网温湿度传感器数据,监控平台对接实操
物联网·网络协议·tcp/ip
天远Date Lab9 小时前
零信任架构实战:基于天远租凭分期报告构建自动化汽车以租代购免押风控网关
网络·人工智能·架构·自动化
IT猿手11 小时前
实现NAPT、Easy-IP、NATserver、NATstatic
网络
迪康Defender11 小时前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
lzx_00211 小时前
Linux 进程(二) 深入理解进程
linux
沫璃染墨12 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
温暖小土12 小时前
在 CentOS 上安装 Redis Stack
linux·redis·centos
xiaoye-duck13 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
其实防守也摸鱼13 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php