《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法

1--Timewait状态

        对于服务器端/客户端,当一端结束连接时,会向另一端发送 FIN 消息;两端的在经过四次挥手过程后,其 Socket 不会马上消除,而是会处于一个 Time-wait 状态的阶段,此时 Socket 拥有的端口号并没有得到释放,因此不能使用相同的端口号

        只有先断开连接的(先发送 FIN 消息)的主机才会经过 Time-wait 状态

        通过 setsockopt() 函数来更改 SO_REUSEADDR 的状态(设置为TRUE)可以将处于 Time-wait 状态的 Socket 端口号重新分配给新的 Socket,具体代码参考:代码实例

为什么需要 timewait 状态?

        ① 对于上图,当客户端主动断开连接,进行四次挥手时,客户端会进入一个 timewait 状态,这个状态可以确保客户端最后一次发送的 ACK 信息报可以顺利到达服务器端;

        因为最后一次发送的 ACK 信息报可能会在传输过程中丢失,导致服务器端无法顺利关闭连接;这时服务器端就会以为它第三次挥手传送的 FIN 信息报没有送达客户端,就会启动超时重传 FIN 信息报;但如果客户端直接关闭了,就会造成永远收不到服务器端超时重传的 FIN 信息报(其实会收到的,但由于客户端关闭了,就会将收到的信息报认为是非法信息报,从而返回一个 RST 信息报),同时也无法重新发送最后一次挥手的 ACK 信息报,从而造成异常。

        同理,服务器端不断超时重传 FIN 信息报,但一直无法收到 ACK 信息报(只会收到客户端发送过来的 RST 信息报),就会无法顺利地 close;

        ② 在第四次挥手后,经过 2msl 的 timewait 时间足以让本次连接产生的所有报文段都从网络中消失,这样下一次新的连接中就肯定不会出现旧连接的报文段了;

2--Nagle算法

        Nagle 算法可以防止数据包过多而导致的网络过载问题,其应用于 TCP 层;

        Nagle 算法规定:只有收到前一数据的 ACK 消息时,Nagle 算法才会发送下一数据;

        一般情况下,不使用 Nagle 算法可以提高传输速度,当传输大文件时可以禁用 Nagle 算法,通过 setsockopt() 函数来设置 TCP_NODELAYTrue禁用 Nagle 算法

// 禁用 Nagle 算法
int opt_val = 1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&opt_val, sizeof(opt_val));// 查看 Nagle 状态
int opt_val;
socklen_t opt_len;
opt_len = sizeof(opt_val);
getsockopt(sock, IPPROTO_TCP, TCP_NPDELAY, (void*) &opt_val, &opt_len);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/132154.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言练习57:浮点数在内存中的存储

浮点数在内存中的存储 上⾯的代码中, num 和 *pFloat 在内存中明明是同⼀个数,为什么浮点数和整数的解读结果会差别 这么⼤? 要理解这个结果,⼀定要搞懂浮点数在计算机内部的表⽰⽅法。 根据国际标准IEEE(电⽓和电⼦⼯…

Linux服务使用宝塔面板搭建网站,并发布公网访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

“山东工行杯”山东省第五届数据应用创新创业大赛开赛!

由山东省大数据局、共青团山东省委、山东省教育厅、山东省科学技术厅联合主办的“山东工行杯”山东省第五届数据应用创新创业大赛已于8月30日正式启动报名!本届大赛以“场景赋能,数创齐鲁”为主题,设置数据赋能经济发展、数据赋能公共服务、数…

服务器数据恢复-Xen server虚拟机数据恢复案例

服务器数据恢复环境: 一台某品牌服务器通过一张同品牌某型号RAID卡将4块STAT硬盘组建为一组RAID10阵列。上层部署Xen Server虚拟化平台,虚拟机上安装的是Windows Server操作系统,包括系统盘 数据盘两个虚拟机磁盘,作为Web服务器使…

快速导入mysql较大的SQL文件

一般情况下,我们的网站或者小项目的数据库文件也就几十兆的大小,使用navicat等可视化工具快速就可以导入成功,但是当我们遇到几百兆或者更大的数据库文件时候,使用这些可视化工具去操作肯定是不可以的,亲测导入时间会特…

Pod和容器设计模式

为什么需要Pod 一些应用的实现是需要多个进程配合完成的,由于容器实际上是一个“单进程”模型,如果在容器里启动多个进程会存在进程管理的难题。在Kubernetes里面,实际上会被定义为一个拥有四个容器的Pod。 Pod相当于进程组 Kubernetes 是…

CSS文字居中对齐学习

CSS使用text-align属性设置文字对齐方式&#xff1b;text-align:center&#xff0c;这样就设置了文字居中对齐&#xff1b; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>css 水平居中</title><style>.box …

【SpringBoot集成Redis + Session持久化存储到Redis】

目录 SpringBoot集成Redis 1.添加 redis 依赖 2.配置 redis 3.手动操作 redis Session持久化存储到Redis 1.添加依赖 2.修改redis配置 3.存储和读取String类型的代码 4.存储和读取对象类型的代码 5.序列化细节 SpringBoot集成Redis 1.添加 redis 依赖 …

Redis从入门到精通(二:数据类型)

数据存储类型介绍 Redis 数据类型&#xff08;5种常用&#xff09; string hash list set sorted_set/zset&#xff08;应用性较低&#xff09; redis 数据存储格式 redis 自身是一个 Map&#xff0c;其中所有的数据都是采用 key : value 的形式存储 数据类型指的是存储的数据…

关于接口自动化,你不能不知道的高级技巧——接口自动化神器apin进阶操作

一、变量提取和引用 变量提取和引用主要是为了解决接口之间的参数依赖问题。 使用场景&#xff1a;接口 A 的参数中需要使用接口 B 返回的某个数据&#xff0c;那么就要在请求 B 接口之后&#xff0c;提取数据保存&#xff0c;给请求 A 接口时使用。 1、变量提取 在用例集或…

【开发】视频集中存储/直播点播平台EasyDSS点播文件分类功能优化

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

【智慧工地源码】物联网和传感器技术在智慧工地的应用

物联网&#xff08;IoT&#xff09;和传感器技术在智慧工地中扮演着至关重要的角色。这些技术的应用&#xff0c;使得智慧工地能够实现对施工过程的精确监控、数据收集和分析&#xff0c;以及设备互联&#xff0c;从而提高工程效率、减少成本并改善工人的工作环境。 一、物联网…

9.13号作业

1> 将之前定义的栈类和队列类都实现成模板类 栈的模块类 #include <iostream> using namespace std;template <typename T> class Stack { private:T data[40]{0};T top-1; public:Stack (){cout<<"这是构造函数"<<endl;}int stack_e…

关于 Unity 连接 MuMu 模拟器上的 Unity Remote 5 的方法

在使用 Unity 开发 Android 的过程中&#xff0c;可以通过使用 Unity Remote 这个 app 来和真机连接&#xff0c;进而在真实环境下进行测试性能等工作&#xff0c;而本次则是由于其他问题引出的一个小坑&#xff0c;记录以备后续查询。 这次是由于在自学过程中遇到的一个工程&…

应用在Wi-Fi音箱中的国产高性能DSP音频处理芯片

WiFi音箱的工作原理是通过无线路由器&#xff0c;将音箱接入到外部网络当中&#xff0c;然后在通过手机、平板、电脑等设备连接音箱&#xff0c;通过一些多媒体协议将音乐推送到音箱当中进行播放&#xff0c;WiFi音箱具有着传输能力强&#xff0c;可同时连接多个设备进行播放等…

c\c++ windows自动打开cmd并进入mysql

每次不用可视化工具查看数据库的时候饭都要winr->cmd->mysql -u root -p->密码 虽然不麻烦但是多少也得消耗你几秒钟&#xff0c;秉承着时间就是金钱的观念 我决定通过windows模拟输入实现快速通过命令行查看mysql数据库 涉及到的知识: windows拉起进程&#xff0c;…

uniapp 微信小程序最新隐私弹窗更新方案,更新后无法登录问题解决方案

1&#xff0c;在manifest.json文件中的mp-weixin 节点下&#xff0c;添加&#xff1a;"__usePrivacyCheck__": true 2&#xff0c;在需要的页面配置隐私保护弹窗&#xff0c;或者直接写到首页也可以 <uni-popup ref"popusAuthorization" type"cen…

【目标检测】YOLOv8:快速上手指南

YOLOv8概述 YOLOv8是YOLOv5团队在今年新推出的一代YOLO版本&#xff0c;与前几代版本相比&#xff0c;其性能和速度差距如下图所示&#xff1a; 和其它版本不同的是&#xff0c;该仓库并非起名为YOLOv8&#xff0c;而是公司名ultralytics&#xff0c;因为他们想将此版本作为一…

RK3399 android7.1 实现双wifi功能 STA+AP

wifi模组&#xff1a; 主板使用的wifi模块为海华AW-NM43438W模组以及客户提供了一款USB接口的5G双频无线网卡RTL8821CU。 双wifi功能实现效果&#xff1a; 主板自带的wifi模组作为station正常连接外部wifi,USB接口的外接网卡作为AP&#xff08;热点&#xff09;供其他设备连接…

自动驾驶之高精地图介绍

高精地图 文章目录 高精地图前言什么是高精地图高精数据分发引擎1.3 名词解释1. ADAS(Advanced DriverAssistance System)2. 为什么需要高精数据的分发引擎 高精数据分发引擎的建设高精数据分发引擎与ADAS应用的关系高精数据分发引擎架构高精数据分发引擎的模型表达路网模型的抽…