当前位置: 首页 > article >正文

[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,只关闭一个。


http://www.kler.cn/news/368074.html

相关文章:

  • gateway 整合 spring security oauth2
  • python对文件的读写操作
  • BitNet: Scaling 1-bit Transformers for Large Language Models
  • 5GC核心网中的南向与北向
  • 别名联想路径,前端项目输入@/自动出提示目录和文件
  • python源码编译—Cython隐藏源码(windows)
  • protobuf序列化
  • 解读AVL树:平衡二叉搜索树的奥秘
  • python 爬虫 入门 五、抓取图片、视频
  • 建造者设计模式
  • 基于知识图谱的苹果病虫害知识图谱问答
  • redis详细教程(2.List教程)
  • 如何快速开发一套基于Java的诊所管理系统?
  • C++设计模式——Factory Method工厂方法模式
  • C#文件内容检索的功能
  • P11232 [CSP-S 2024] 超速检测(民间数据)
  • ES6:let和const命令解读以及变量的解构赋值
  • PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程
  • Flink CDC系列之:学习理解核心概念——Transform
  • Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题
  • 双击热备和负载均衡的区别
  • 头歌数据库实验 MySQL
  • Redis 哨兵 总结
  • Vue3学习:番茄钟案例的实现及打包遇到的几个问题
  • Python 自动化运维:Python基础知识
  • Vuejs设计与实现 — 渲染器核心:挂载与更新