4.23 TCP状态转换 4.24半关闭、端口复用

这篇具有很好参考价值的文章主要介绍了4.23 TCP状态转换 4.24半关闭、端口复用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

4.23 TCP状态转换

4.23 TCP状态转换 4.24半关闭、端口复用
4.23 TCP状态转换 4.24半关闭、端口复用

  • 2MSL(Maximum Segment Lifetime)
    主动断开连接的一方,最后进入一个TIME_WAIT状态,这个状态会持续:2msl
    msl:官方建议:2分钟,实际是30s

当 TCP 连接主动关闭方接收到被动关闭方发送的 FIN 和最终的 ACK 后,连接的主动关闭方必须处于TIME_WAIT 状态并持续 2MSL 时间。

这样就能够让 TCP 连接的主动关闭方在它发送的 ACK 丢失的情况下重新发送最终的 ACK。

主动关闭方重新发送的最终 ACK 并不是因为被动关闭方重传了 ACK(它们并不消耗序列号,被动关闭方也不会重传),而是因为被动关闭方重传了它的 FIN。事实上,被动关闭方总是重传 FIN 直到它收到一个最终的 ACK。

4.24半关闭、端口复用

  • 半关闭

当 TCP 链接中 A 向 B 发送 FIN 请求关闭,另一端 B 回应 ACK 之后(A 端进入 FIN_WAIT_2状态),并没有立即发送 FIN 给 A,A 方处于半连接状态(半开关),此时 A 可以接收 B 发送的数据,但是 A 已经不能再向 B 发送数据。
4.23 TCP状态转换 4.24半关闭、端口复用

使用 close 中止一个连接,但它只是减少描述符的引用计数,并不直接关闭连接,只有当描述符的引用计数为 0 时才关闭连接。shutdown 不考虑描述符的引用计数,直接关闭描述符。也可选择中止一个方向的连接,只中止读或只中止写。
注意:

  1. 如果有多个进程共享一个套接字,close 每被调用一次,计数减 1 ,直到计数为 0 时,也就是所用进程都调用了 close,套接字将被释放。
  2. 在多进程中如果一个进程调用了 shutdown(sfd, SHUT_RDWR) 后,其它的进程将无法进行通信。但如果一个进程 close(sfd) 将不会影响到其它进程。

端口复用

端口复用最常见的用途是:

  • 防止服务器重启时之前绑定的端口还未释放
  • 程序突然退出而系统没有释放端口
#include <sys/types.h>
#include <sys/socket.h>
//设置套接字属性(不仅仅能设置端口复用)
int setsockopt(int sockfd,int level,int optname,const void* optval,socklen_t optlen);
-sockfd:打开的套接字的文件描述符
-level:级别 SOL_SOCKET(端口复用的级别)
-optname:
	-SO_REUSEPORT	允许重用端口复用
	-SO_REUSEADDR
-optval:端口复用的值(整形)
	-1:可以复用
	-0:不可以复用
-optlen:optval参数的大小

端口复用,设置的时机是在服务器端口绑定端口之前

常看网络相关信息的命令
netstat
参数文章来源地址https://www.toymoban.com/news/detail-497627.html

  • a 所有的socket
  • p 显示正在使用socket的程序名称
  • n 直接使用IP地址,而不通过域名服务器
netstat -anp|grep 9999

到了这里,关于4.23 TCP状态转换 4.24半关闭、端口复用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4.24日报

    Redis 有哪些功能? 数据缓存功能 分布式锁的功能 支持数据持久化 支持事务 支持消息队列 181. Redis 和 memcache 有什么区别? 存储方式不同:memcache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;Redis 有部份存在硬盘上,这样能保证数据的持久性。 数据支

    2024年02月01日
    浏览(28)
  • 每日学术速递4.24

    CV - 计算机视觉  |  ML - 机器学习  |  RL - 强化学习  | NLP 自然语言处理  1.Collaborative Diffusion for Multi-Modal Face Generation and Editing(CVPR 2023) 标题:多模态人脸生成和编辑的协同扩散 作者:Ziqi Huang, Kelvin C.K. Chan, Yuming Jiang, Ziwei Liu 文章链接:https://arxiv.org/abs/2304.10530 项目代码

    2024年02月01日
    浏览(33)
  • JVS物联网平台4.23功能新增说明

    JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务+配置化的方式,提供了 低代码+数据分析+物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等,所有的应用与能力采用模块化构建,按需

    2024年04月25日
    浏览(43)
  • 力扣数据库题库学习(4.24日)

    问题链接 编写解决方案,以获取 Sales 表中所有 sale_id 对应的 product_name 以及该产品的所有 year 和 price 。返回结果表 无顺序要求 。 这个问题很简单,查询两张表内的指定字段。这个考的其实就是数据库的连接,要求是 所有 sale_id 对应的 数据,那就以Sales 表为左表,将两表左

    2024年04月26日
    浏览(25)
  • Linux Centos7 防火墙(开启、关闭、重启、状态、端口)

    防火墙(Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 防火墙功能 防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免

    2024年02月02日
    浏览(63)
  • 【Linux】查看指定端口的UDP、TCP是否收到数据【2023.07.24】

      场景是终端上报数据给服务端,会有前端进行展示。通过wireshark看到终端给服务端发送数据了,但是UDP无法确定服务端是否正确收到,于是需要在Linux执行一些命令查看是否收到数据。 这个命令会抓取发往或从端口12222的UDP数据报文。 其中: -i enp2s0:指定抓取接口enp2s0上的

    2024年02月15日
    浏览(55)
  • TCP协议二:TCP状态转换(重要)

    TCP状态转换分析 https://www.bilibili.com/video/BV1iJ411S7UA?p=44spm_id_from=pageDrivervd_source=d239c7cf48aa4f74eccfa736c3122e65 TCP状态转换图  粗实线:主动端 虚线:    被动端 细实线:内核操作  状态分析 CLOSED: 表示初始状态。 LISTEN : 该状态表示服务器端的某个SOCKET处于监听状态,可以接受连

    2024年02月01日
    浏览(48)
  • 【算法】状态之美,TCP/IP状态转换探索

    最近城市里甲流肆虐,口罩已经成为了出门必备的物品。小悦也不得不开始采取防护措施,上下班过程中,将口罩戴起来以保护自己不受病毒的侵害。 每天下班后,小悦总是喜欢投入到自己的兴趣爱好中,她热衷于翻阅与IT相关的资料,希望能够更深入地了解计算机科学。而

    2024年02月05日
    浏览(32)
  • TCP状态转换图

    TCP状态转换图 了解TCP状态转换图可以帮助开发人员查找问题. 说明: 上图中粗线表示主动方, 虚线表示被动方, 细线部分表示一些特殊情况, 了解即可, 不必深入研究. 对于建立连接的过程客户端属于主动方, 服务端属于被动接受方(图的上半部分) 而对于关闭(图的下半部分), 服务

    2024年02月15日
    浏览(35)
  • TCP的四次挥手与TCP状态转换

    TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的,所以断开的时候也是双向的。 三次挥手可以吗?可以是可以,和状态有关。 四次挥手是用于客户端和服务器断开连接的时候,

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包