IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络协议:TCP保活机制和Nagle算法 -> 正文阅读

[网络协议]网络协议:TCP保活机制和Nagle算法

一 Nagle算法背景

有时候,我们可能会遇到一些很小的分组,比如,20字节的IP首部,20字节的TCP首部和1字节的数据,如果很多这样的小分组数据,在局域网一般不会出现拥塞,但是在广域网就可有可能。所以Nagle算法就是为了解决这样的小分组问题

二 Nagle算法详解

#1 TCP连接上最多只能有一个未被确认的小分组,该分组的确认到达之前不能发送其他的小分组

#2 发送端需要收集这些小分组,然后在未被确认的小分组确认的时候,就可以将收集的这些小分组组成一个报文段发送出去

#3 但是如果长时间没有被确认,就不发送收集的分组数据吗。满足以下三个任何一个条件,都可以发送出去:

第一: 如果窗口长度大于MSS(1460)且数据字节长度大于或等于MSS

第二: 等待了一定的时间(默认200毫秒)

第三: 如果有紧急数据发送

三 延迟确认

延迟确认

如果TCP对每一个报文段都进行ack确认,那么只是一个单独的报文段,只为发送一个ack代价比较高,所以TCP会延迟一端时间,如果这段时间内有数据发送到对端,则捎带发送ACK确认;或者在ACK定时器触发的时候,发现ACK尚未发送,则立即单独发送。

如果Nagle算法遇上了延迟确认怎么办?

第一次写入的数据到达对端之后,对端延迟确认,不发送ACK确认,而本端因为要发送的数据长度小于MSS,所以Nagle算法起作用,数据并不会立即发送,而是需要对端确认第一次发送的白文段的ACK,如果一直不ACK,只有等待对端超时才发送ACK,然后本端才能发送数据,从而会带来延迟。

四 禁用Nagle算法

默认情况下TCP是开启Nagle算法的,但是并不是适用于所有场景。Nagle算法比较适用于发送方发送大批量的小数据,提高了网络吞吐量,但是降低了实时性。但是在有些实时性比较强的应用程序,是不允许的,所以可以禁止Nagle算法。

那如何禁止Nagle算法呢?

我们可以通过参数tcp_nodelay来禁用。

五 Keepalive保活机制

如果发送端和接收端建立了连接,但是一直没有数据通信,连接是不会自动释放,除非重启了(一个空闲的TCP连接没有任何的数据交换)。

一般我们使用keepalive时会修改空闲时长,避免资源浪费,系统内核会为每一个TCP连接 建立一个保护记录,相对于应用层面效率更高。

常见的几种使用场景:

#1 检测挂掉的连接 (导致连接挂掉的原因很多,如服务停止、网络波动、宕机、应用重启等)

#2 防止因为网络不活动而断连(使用NAT代理或者防火墙的时候,经常会出现这种问题)

#3 TCP层面的心跳检测

tcp_keepalive_time一个连接需要TCP开始发送keepalive探测数据包之前的空闲时间。以秒为单位

tcp_keepalive_probes发送TCP keepalive探测数据包的最大数量,默认是9.如果发送9个keepalive探测包后对端仍然没有响应,就关掉这个连接

tcp_keepalive_intvl:发送两个TCP keepalive探测数据包的间隔时间,默认是75秒

六 http协议的keepalive机制和tcp的keepalive机制区别

主要是目的不一样:

在http早期,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的吞吐率。总之,http keep-alive是为了让tcp活得更久一点,以便在同一个连接上传送多个http

TCP协议中,keepalive是TCP保鲜定时器,当网络两端建立了TCP连接之后,闲置idle(双方没有任何数据流发送往来)了tcp_keepalive_time后,服务器内核就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用、主机不可达等等)。如果没有收到对方的回答(ack包),则会在 tcp_keepalive_intvl后再次尝试发送侦测包,直到收到对对方的ack,如果一直没有收到对方的ack,一共会尝试 tcp_keepalive_probes次,每次的间隔时间在这里分别是15s, 30s, 45s, 60s, 75s。如果尝试tcp_keepalive_probes,依然没有收到对方的ack包,则会丢弃该TCP连接。TCP连接默认闲置时间是2小时,一般设置为30分钟足够了。

总之,TCP的keepalive机制一种检测TCP连接状况的保鲜机制。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:52:51  更:2021-10-11 17:53:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/29 18:03:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码