首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核 TCP MSS 机制详细分析

前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了。...[2][3] 而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前公开的分析文章却没对该部分内容进行详细分析。...所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析。...对于MSS的深入研究 关于该漏洞的细节,别的文章中已经分析过了,这里简单的提一下,该漏洞为uint16溢出: tcp_gso_segs 类型为uint16 tcp_set_skb_tso_segs:...最后发现,传入tcp_write_xmit函数的mss_now都是通过tcp_current_mss函数进行计算的 随后对tcp_current_mss函数进行分析,关键代码如下: # tcp_output.c

1.8K20

Linux 2.6.16 TCP 连接速度异常的问题分析

分析认为SESU10母盘上内核TCP拥塞控制算法和Windows的Ack频率控制的策略存在不兼容情况。...目前至少确认 2.6.16内核版本存在此问题,打TCP优化补丁或者更换Tlinux以后可以解决问题。...客户端: Windows XP, Windows7,任意浏览器或者旋风(单线程下载) 测试工具:wireshark, httpwatch 测试连接:分别是自建CDN、百度下载、深圳DC+Apache 问题分析...: 通过客户端抓包分析发现速度很慢的段有两个问题: 服务器端总是等到前面的数据包确认以后才发送第二个包 Windows总是等到200ms左右才发送ACK确认。...Linux这一端,首先怀疑和nagle算法有关系,在nws服务器上设置TCP_NODELAY以后仍然可以重现,可以排除Nagle算法的影响。

4.8K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 内核 TCP MSS 机制详细分析

    [2][3] 而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前公开的分析文章却没对该部分内容进行详细分析。...所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析。 测试环境 1....对于MSS的深入研究 关于该漏洞的细节,别的文章中已经分析过了,这里简单的提一下,该漏洞为uint16溢出: tcp_gso_segs 类型为uint16 tcp_set_skb_tso_segs: tcp_skb_pcount_set...最后发现,传入tcp_write_xmit函数的mss_now都是通过tcp_current_mss函数进行计算的 随后对tcp_current_mss函数进行分析,关键代码如下: # tcp_output.c...endif 所以在Linux 4.15内核中,在用户不干预的情况下,内核是不会发出头部大小为60字节的TCP包。

    1.8K50

    谈谈Linux中的TCP重传抓包分析

    收到研发反馈,TCP重传严重。...,可接受短暂的非0情况 ulimit -a检查服务打开的文件句柄上限,10多万正常是足够的 通过ifconfig查看网卡是否存在持续drop、error现象 容器状态正常,开始使用wiresherk分析抓包文件...Wiresherk常用操作 1、Statistics->Conversations会话统计功能,统计通信会话之间接收和发送的数据包和字节数,通过这个工具可以找出网络中哪个会话(IP地址或端口号)最谈谈Linux...中的TCP重传抓包分析占用带宽,进一步作出网络策略 2、Statistics–>Flow graph会话通信过程图形可视化,还可以看到是否有TCP的延迟包括延迟确认(Delayed ACK),服务端是否开启...、Time-to-live exceeded(Fragment reassembly time exceeded) 补充三、Linux网络性能排查常见套路 快速定位网络异常,请阅读原文 作者BLOG:www.liangsonghua.me

    8.3K60

    tcp状态分析

    tcp 状态 tcp握手挥手的状态图如下: 服务端状态 CLOSED: 初始状态, 表示 TCP “关闭” LISTENING: server 侦听远方的tcp端口的连接请求(Server端bind某个端口...TIME_WAIT状态下的TCP连接会等待 2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。...每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout...主要的目的是确保报文能够完整传输 常见TCP排查命令 netstat -nat: 查看 tcp 各个连接状态的数量 tcpdump -iany tcp port 9000: 对tcp端口为9000的进行抓包...lsof -i:9000, 对9000端口的套接字状态进行查看 参考资料 TCP状态分析

    46620

    TCP问题分析

    TCP问题分析 网络的五层协议 物理层 数据链路层 网络层,IP协议,ICMP协议(ping) 传输层,传输层有两个协议,面向连接的TCP和无连接的UDP,TCP是点对点的可靠连接,保证数据顺序必达...tcp9.jpg ? tcp10.jpg 这个是未用Nagle算法的抓包信息 滑动窗口 ?...抓包分析 wireshark工具来查看tcpdump的抓包 对于有root过的android手机,如果手机系统中已经内置了tcpdump,可以直接使用tcpdump命令开启抓包:tcpdump -i any...tcpdump chmod 777 /system/bin/tcpdump 到此为止,tcpdump就成功安装到了/system/bin/目录下,接着用如下命令还是抓包 Java中的Socket异常分析...端的TCP发起了一个FIN,可能是调用了socket的close方法 tcpdump抓包分析 tcp dup ack 重复的Ack,#前面的数组表示丢包的包序号,后面表示第几次丢失,之所以会重复的Ack

    1.2K30

    WireShark TCP分析

    TCP连接交换8 bit字节构成的字节流,TCP对字节流的内容不作任何解释,它并不知道传输的数据字节流是二进制数据,还是ASCII字符或者其他类型数据,对于字节流的解释由TCP连接双方的应用层解释,TCP...报文格式 TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段,一个TCP报文段分为首部和数据两部分,TCP的全部功能都体现在它首部中各字段的作用,TCP报文段首部的前20个字节是固定的,后面有...TCP首部长度进行推算,MSS是TCP报文段中数据字段的最大长度,数据字段加上TCP首部才等于整个TCP报文段,MSS=MTU-20(TCP headers)-20(IP headers),一般情况下MTU...TCP报文段,下图画出了三报文握手建立TCP连接的过程: 假定主机A运行的是TCP客户程序,而B运行TCP服务器程序,最初两端的TCP进程都处于CLOSED(关闭)状态,图中在主机下面的方框分别是TCP...== 1 文末小结 通过本文的介绍我们了解了WireShark的基本使用和TCP协议的原理,在分析TCP流时我们可以从序列号、确认号、窗口大小等方面入手,深入理解数据包的传输过程,同时我们也学会了如何利用

    1K10

    TCP重传分析

    TCP重传的基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传。 1.jpg 上面的时序图,就是TCP重传的全部内容吗?...有有种测量方法: 1)重传队列中数据包的TCP控制块 TCP每发送一个数据包,就会把该数据包复制一份放到TCP重传队列中,数据包skb中的TCP控制块包含着一个变量tcp_skb_cb->when,记录了该数据包的第一次发送时间...TCP时戳选项时,发送端记录在TCP包头选项内的时戳可以被接收端随响应反射回来,发送端就可以利用响应报文的反射时戳计算出某个TCP包的即时往返传输时间。...那TCP的超时定时器具体是怎实现的呢?...5,选择性重传 TCP通信时,如果发送序列中间某个数据包丢失,TCP会通过重传最后确认的包开始的后续包,这样原先已经正确传输的包也可能重复发送,急剧降低了TCP性能。

    8K42

    TCP细节分析

    TCP是什么? 具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。...在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻售,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以,总共需要...于是,Linux下给了一个叫tcp_syncookies的参数来应对这个事——当SYN队列满了后,TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequence Number发回去(又叫cookie...我们注意到,在TCP的状态图中,从TIME_WAIT状态到CLOSED状态,有一个超时设置,这个超时设置是 2*MSL(RFC793定义了MSL为2分钟,Linux设置成了30s)为什么要这有TIME_WAIT...建链接的SYN可能就被直接丢掉了(你可能会看到connection time out的错误)(如果你想观摩一下Linux的内核代码,请参看源码 tcp_timewait_state_process)。

    97460

    Linux网络编程TCP

    TCP/IP协议 TCP/IP 协议栈是一系列网络协议(protocol)的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。...OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...使用TCP协议的流程图 根据流程图逐一讲解API接口.

    5.4K30

    Linux网络】TCP协议

    引言 TCP协议是传输层中非常重要的协议。本篇博客我们将从TCP头部信息、TCP状态转移、TCP数据流、TCP数据流的控制等等方面来讨论! 在TCP协议中,通信双方的地位是平等的。...1、TCP协议的特点 传输层中我们常用的协议有两个:TCP协议和UDP协议。TCP协议相对于UDP协议的特点是:面向连接、可靠的、面向字节流的。...当接收缓冲区收到一个或者多个TCP报文后,TCP模块将它们携带的应用程序的数据按照TCP报文的序号【见下文】依次放入TCP接收缓冲区中,并通知应用程序读取数据。...Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时 时间都是500ms的整数倍....接下来我们来分析一下四次挥手过程中通信双方状态变化: 如图,OS内核会为TCP连接双方创建相应的11TCP状态【包括三次握手过程中的5种状态和四次挥手断开过程中的6种状态】。

    9610

    Linux TCP RST情况

    其中复位标志RST的作用就是“复位相应的TCP连接”。 TCP连接和释放时还有许多细节,比如半连接状态、半关闭状态等。详情请参考这方面的巨著《TCP/IP详解》和《UNIX网络编程》。...原因在于Socket.close()方法的语义和TCP的“FIN”标志语义不一样:发送TCP的“FIN”标志表示我不再发送数据了,而Socket.close()表示我不在发送也不接受数据了。...; 客户端和服务器统一使用TCP短连接。...然后是客户端和服务器统一使用TCP长连接:客户端使用TCP长连接很容易配置(直接设置HttpClient就好),而服务器配置长连接就比较麻烦了,就拿tomcat来说,需要设置tomcat的maxKeepAliveRequests...,固定5分钟tcp连接回收,而且发现连接出错时,重发之前10s内消息。

    5.9K10

    IM TCP网络问题分析

    服务器出现心跳急剧下降到60秒的异 常 出现异常的都是使用80端口,如果是使用8000端口就恢复正常 原因 80端口是Http的常用端口号,连接到IM服务器之后,由于服务器并没有 把Http和TCP...连接服务做区分导致IM的TCP使用80端口连接进来的时候被误 识别成是一个Http请求,所以就对IM的TCP数据流(TLV格式)进行解析导 致报错返回了一个Http请求报错的网页的Html数据,...具体log分析流程 connect to server success,hostname:gw.im.okii.com,port:80代表 TCP连接IM服务器gw.im.okii.com成功,连接端口为...服务做了区分之后,从大数据分析来看,中国香港几台 有上传大数据的手表分析来看全部都恢复正常使用 等待客户端的新版IM程序测试更新 青海心跳异常 现象 青海心跳周期异常的现象和中国香港的现象一模一样...remoteAddress=gw.im.okii.com,remotePort=80} 客户端在不切换域名和端口的情况下断线重连成功 解决方案 客户端禁止使用80端口 针对以上中国香港问题分析出的客户端在心跳下调策略

    1.4K20

    TCP、UDP、IP 协议分析

    在这里只对IP、TCP、UDP协议头做一个分析。 首先来看看在网络中,一帧以太网数据包的格式: ?...在Linux 操作系统中,当我们想发送数据的时候,我们只需要在上层准备好数据,然后提交给内核协议栈 , 内核协议栈自动添加相应的协议头。 下面我们来看看,每一层添加的协议头具体内容。 一....TCP协议 TCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。 1.TCP分析 先来分析一下TCP头的格式以及每一个字段的含义: ?...MSS = MTU - IP头 - TCP头,MTU表示最大传输单元,我们在IP头分析的时候会讲到,它一般为1500个字节。IP头和TCP 头部带可选选项的时候都是20个字节。...用wirshar抓包分析如下: ?

    2.6K31

    TCP 异常关闭研究分析

    作者:谢代斌 研究测试TCP断开和异常的各种情况,以便于分析网络应用(比如tconnd)断网的原因和场景,帮组分析和定位连接异常掉线的问题,并提供给TCP相关的开发测试人员作为参考。...通过对tconnd的流水日志和ProtocalHandler的Qos日志进行统计分析,发现连接异常断开时TCP的错误码大部分是“104: Connection reset by peer”(Linux下...结论:这种情况下服务器程序接收和发送部分TCP消息后,在Send消息时产生“32: Broken pipe”(Linux下)或“10053: An established connection was...当TCP连接的进程正常关闭Socket时,对端进程在检查到TCP关闭事件之前仍然向TCP发送消息 (Windows客户端),则在Send消息时会产生“32: Broken pipe”(Linux下)或“...鉴于此,对TCP的连接做进一步的场景测试分析。2.

    9.2K00

    tcp传输速率优化分析

    1, 简要说明 对于TCP传输,出口带宽和网络带宽都很高,传输速率就比如很大吗? 答案是:不一定。 考虑这样一种场景:有一个主播在美国推流,国内用户观看直播,拉流速率很小,视频非常卡顿。...分析发现,带宽其实并不小,只是延时比较大(大于300ms)。 所以说速率跟延时相关,延时大会导致速率变下。...2,速率跟延时的关系推导 由于TCP的滑动窗口特性,已发送出去的一组数据必须ACK之后(经过一个RTT),滑动窗口才会滑动,才可以发送下一组数据,一组数据大小为SWND ,1S之内可以发送1000/RTT...可以通过两种方式来增大SWND,来增加速率: 1)增大接收方接收缓存; 2)使用多连接传输;(单连接因为SWND相对比较小往往很难吃满带宽,通过增加连接数,每条连接都占用带宽来增加总的速度) 增大接收缓存效果分析...通过修改linux内核参数来调整接收缓存大小,修改办法如下: 通过使用sysctl命令修改net.ipv4.tcp_rmem的第三个值。

    3.8K20
    领券