您当前的位置:首页 > 电脑百科 > 网络技术 > 网络知识

TCP网络包传输的整个过程

时间:2022-10-31 15:52:11  来源:今日头条  作者:平凡人笔记

上文对于网络问题分析的还不够精细,比如有时候网络资源可能没有达到瓶颈,并且没有丢包产生,但这个时候网络传输速率就是很慢或者是有丢包产生了,但是却无法知道丢的是具体哪个包,没有办法知道整个tcp传输过程的具体情况,所以需要一种更加精细的去看网络包传递过程的方法即抓包。

用wireshark去分析上传文件整个tcp的传输过程,

用wireshark提供的高级的图表功能去感受下tcp在整个过程当中所经历的各种阶段。

tcp在整个过程当中所经历的阶段:三次握手、慢启动、拥塞避免、快速恢复、四次挥手。

除了三次握手、四次挥手,其他几个阶段都涉及到了tcp窗口的概念。

tcp的滑动窗口

tcp的发送和接收数据都是通过滑动窗口,在tcp协议里,发送数据的滑动窗口被称为发送窗口;接收数据的滑动窗口,被叫做接收窗口。

发送窗口大小会影响发送数据的大小,那它的大小是受制于两个因素:

第一个是对端接收窗口的大小,第二个是拥塞窗口的大小,取这两个窗口大小的最小值。

tcp的发送窗口,如果只受限于对端接收窗口大小的话,这种情况在局域网其实是没有什么问题的,但是在广域网里,数据传输过程中很有可能是经过很多的路由器或者是交换机,如果中途设备网络处理能力变差之后,即使对端接收窗口的能力很大,但是可能数据包在中途的时候就被丢掉了,所以tcp得有一种功能是能够感知网络的这种拥塞阻塞的情况,并根据这种情况的好坏,去调整发送窗口的大小,所以这个功能就是拥塞窗口的功能。

拥塞窗口是如何衡量这种拥塞情况的?

当发生重传的时候,这个拥塞窗口就会认为此时的网络发生了拥塞的情况。

重传是分为快速重传和超时重传,拥塞窗口会根据这两种重传方式作出不同的策略。

超时重传

指的是数据包在发送数据到对端的时候,本来是要接受到一个ack标志的数据包回来,但如果在一定时间以内发送端没有接受到对端的ack包,那么发送端就会认为数据包丢掉了,那它会重新去传递相同的数据包到对端,这种相当于定期触发的这种重传,被称为超时重传。

快速重传

当每次都要等到超时时再去重传,会增大端与端的时延,所以快速重传就认为如果是收到了对端三次重复的ack,那么就认为ack的这个包丢掉了,所以会马上对丢掉的包去进行重传,而不用等待定时器超时之后再去触发重传的动作。

对端重复ack是如何产生的呢? 因为tcp发包不是一个一个发的,而是一组一组的发到对端,所以其中如果某个包丢失了,那对端接收到的大于丢失包序号的包,那回应的ack将会是丢失前最大的ack序号。

 

比如发一组数据包到这个服务端,如果2号包丢失之后,那3、4、5号包还是有机会到达服务端的,

那服务端看到了3、4、5号包,但是又对比起自己的ack的序号,它发现还没有对2号包去进行ack,所以它对3、4、5号包的这种ack的序号就是2,所以当连续的收到三个ack 2之后,那客户端就会对2号包去进行一个重传的动作,这就是快速重传。

拥塞窗口对这两个重传是怎么进行不同策略的?

 

拥塞窗口它会经历三个阶段:慢启动、拥塞避免、快速恢复 。

依次来看一下,当连接建立的时候,每次收到一个ack,那么拥塞窗口能够去发送的最大mss(即一个tcp包的最大发送的字节数)就会翻倍,当这个最大发送的数据达到了慢启动的阈值(这个是可以通过内核去配置的),就会进入第二个阶段,叫作拥塞避免阶段。在拥塞避免阶段,拥塞窗口的增长速率,就没有慢启动阶段那么快了,它的策略是每经过一个往返延迟,拥塞窗口就会增长mss的大小,无论是慢启动还是拥塞避免阶段,如果期间碰到重传的这种行为的时候,那么拥塞窗口,会有选择性的去进入慢启动阶段还是一个快速恢复阶段。

快速恢复阶段是为了避免每次碰到拥塞时都会进入慢启动阶段而产生的,因为每次如果重传都进入到了慢启动阶段,那传输的效率会急剧的降低,所以快速恢复采用的策略是当遇到快速重传的时候,让拥塞窗口减半,然后它的mss的增长方式是和拥塞避免的增长方式是一样的,采用低斜率的线性增长的方式。然后遇到超时重传的时候,其实整个过程依然是会进入到慢启动阶段。这样的话,就能根据不同的重传,采用这种不同的缩小拥塞窗口的策略,来达到限制发送窗口的数据发送量的大小的目的。

在上传文件的过程当中,

 

tcp发送数据的接收窗口、发送窗口是如何变化的?

这里使用了wireshark的tcp stream graphs这种高级图表功能去看,首先来看一下慢启动阶段的一个特点,就是能够让发出去的包在特定时间以内能够呈现指数级增长,因为每收到一个数据包的ack,它会让拥塞窗口发出去的mss达到一个翻倍,所以它是一个指数级的增长。

这里用tcp的时序图stevens来看这种增长变化,x轴是时间,y轴是发出去包的seq number,可以看到,在前面0-5秒,特别是接近五秒这段时间,它的一个seq number的增长速率是相当大的,也是十分陡峭的,然后在慢启动之后,它的一个seq number其实是小于之前点的,那为什么会出现这样的点?是因为发生了重传,发生重传就是发送之前发出去过的包,所以seq number会小于之前发送出去的seq number。并且在这个慢启动之后,有好几波这种低于之前发出去的seq number的情况,所以这里猜测:在第一次慢启动之后,并且达到峰值之后,网络出现了这种拥塞的情况,导致发生了这种重传的现象,并且在后续的一段时间以内,这种重传的现象还时不时的在发生,说明此时网络真的是属于一种很拥塞的情况,然后在7.5秒之后,网络的情况就渐渐好转了,然后丢包的现象就开始好起来了。在5.5到7.5秒的期间,的确是有很多这种超时重传的现象,也验证了刚刚的猜想。

在五秒的时候发生了一个拥塞,这里对上传文件进行抓包,所以看一下这个拥塞到底是对传输速率有怎样的影响?

在wireshark里提供了图表的功能看整个过程的传输速率,

 

I/O Graphs就是看传输速率的图表,以100毫秒的间隔去看整个过程传输数据的变化,可以看到,在发生拥塞之前,传输速率的增长依然是呈指数级别的增长,然后在发生重传之后,速率在急剧的下降回来,下降到0之后,又开始呈现指数级别的增长,这里就和刚才所说的,碰到这种超时重传之后,会进入一个慢启动的阶段,慢启动阶段的特点就是能让发出去的包呈现一种指数级别增长。

第二次慢启动阶段所达到的峰值还没有第一次那么高的时候,又下降,但是这个下降的坡度没有第一次那么低,所以有可能这里是在进行一个快速恢复的阶段。

快速恢复的阶段碰到的是快速重传,碰到快速重传之后,传输数据就下降为之前的一半,然后进入一个快速恢复的阶段,快速恢复阶段,mss一直增长的,坡度是在一个固定斜率的直线,所以也和传输速率图是极其吻合的,所以很有可能这里发生了一个快速重传。

然后关于传输速率的影响,除了拥塞带的影响 其实还有接收窗口所带来的影响。

如果接收窗口太小了,传输速率是提升不上去的,那么如何肯定传输速率下降了是由于网络的阻塞而不是接收窗口所带来的影响呢?

其实有两点,第一点在tcp的时序图stevens找到了对应速率下降的时间点,并且看对应时间点包的传输情况是有发生大量超时重传的,说明的确有丢包产生,说明当时的网络状况并不好。

第二点通过wireshark和window scaling去看接收窗口随时间的一个变化情况,

 

可以看到绿色这条线是代表的接收窗口的大小,蓝色这种bytes out就是经常说的在途数据,在途数据是指已经发送但是还未被确认的数据,在途数据越多,说明发送端发送的数据就越多。

整个过程,可以看到接收窗口其实是在不断增长的,并且增长到有4M之后,没有变小,一直是稳定的持续到4M这个界限,然后反而是发送端的一个在途数据在达到峰值之后,就一直变小,并且在后续的这段抓包时间内,都没有达到接收窗口的饱和,所以断定了这里传输速率的下降其实是由于当时网络真的是不好,不是由于接收窗口这种大小导致的。

那如果是由于接收窗口大小导致的,那这个window sacaling所展现出来图应该是怎么样的?

Site Out比较贴合4M的这个直线,而不是中间留了那么一大片空白的地方,并且在wireshark中可以看到很多tcp window full这种包,就说明你的接收窗口可能是一直处于一种饱和的状态,有可能接收窗口太小了,这个时候得调大接收窗口的数量。

调整接收窗口的大小的策略

接收窗口受tcp里面的receive buffer大小的影响,reveive buffer是由内核去根据系统可用内存的情况和内核参.NET.ipv4.tcp_rmem参数动态的去调节,tcp的receive buffer的大小,不完全的等于接收窗口的大小,是用reveive buffer的大小去除以2的指数次方的大小分配给应用,这个参数也是可以去通过内核文件去改配置的。

就比如这个scale的大小是2的时候,那就会有1/4的receive buffer是给应用的,然后其余的3/4才会真的用于接收窗口。

如果表达tcp窗口的大小值,在tcp协议报文中留意window字段,在抓到包里面可以看到,window字段的表达式其实只有16位,16位就决定了要表达这个窗口的最大值,只能表示位64kb,那如果tcp窗口大于64kb的时候 ,就要用另外一个字段window scaling,这个字段能够去和window这个字段去进行乘积,同样的去通过2的scale次方进行一个乘积,然后得到的最终结果,才是实际的接收窗口的大小。

window scaling字段会在握手的时候就告诉给对方,如果是接收窗口是瓶颈的话,那可能要调大接收方的receive buffer或者是tcp window scaling的参数。

本文介绍了tcp stream graphs宏观的分析了文件上传过程当中tcp的传输过程,用的是wireshark里面提供这种图表的功能。



Tags:TCP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
从零开始了解网络协议:TCP/IP详解
从零开始了解网络协议:TCP/IP详解 在当今数字化的时代,网络协议已经成为我们生活中不可或缺的一部分。作为互联网的基础,网络协议规定了数据如何在不同的网络设备之间传输。TC...【详细内容】
2024-02-01  Search: TCP  点击:(59)  评论:(0)  加入收藏
从零开始学习Python网络编程:探索TCP协议与实例演示!
Python 是一种高级的编程语言,拥有广泛的网络编程库。这些库允许 Python 开发者能够使用 TCP 和其他网络协议进行通信。在本文中,我们将探讨 TCP 协议,并通过一个简单的例子来...【详细内容】
2023-11-23  Search: TCP  点击:(219)  评论:(0)  加入收藏
TCP分段技术:克服IP和MAC层内存限制的关键
IP和MAC层在发送数据包时都面临内存受限的问题,这就导致它们对消息的长度有所限制。为了克服这个限制,TCP在将数据传递给IP层之前,需要将可变长度的字节打包成多个段,确保每个段...【详细内容】
2023-11-22  Search: TCP  点击:(239)  评论:(0)  加入收藏
TCP发送窗口、接收窗口以及其工作原理
可用窗口的计算是理解TCP滑动窗口的关键,要了解可用窗口的计算,我们需要理解三个指针——SND.UNA、SND.NXT和RCV.NXT。上面的图表是从发送方的角度拍摄的快照。我们...【详细内容】
2023-11-13  Search: TCP  点击:(353)  评论:(0)  加入收藏
Wireshark抓包分析TCP协议:三次握手和四次挥手
前言 面试中我们经常会被问到TCP协议的三次握手和四次挥手的过程,为什么总喜欢问这个问题呢? 其实我们平时使用的很多协议都是应用层协议,比如HTTP协议,https协议,DNS协议,FTP协议...【详细内容】
2023-11-01  Search: TCP  点击:(239)  评论:(0)  加入收藏
一台服务器​最大并发 TCP 连接数多少
以一道运维面试题开局:你接触过的单机最大并发数是多少?操作系统最大文件打开数是65535,服务器又是怎么做到支持10w并发的?你认为当前正常配置的服务器物理机最大并发数可以到多...【详细内容】
2023-10-04  Search: TCP  点击:(71)  评论:(0)  加入收藏
C# 如何判断某个 TCP 端口是否被占用?
在C#中使用TcpClient或者其他通用的方式建立的Socket,该如何判断这个端口是否被占用?比如下面的代码:TcpClient tc = new TcpClient(ip,port);在C#中,可以使用 System.Net.Netwo...【详细内容】
2023-09-26  Search: TCP  点击:(54)  评论:(0)  加入收藏
网络层协议详解:理解TCP/IP、HTTP、FTP等协议的功能与工作原理
在计算机网络中,网络层是计算机通讯的重要组成部分,它负责处理数据包的传输和路由,是实现网络通信的必不可少的组件之一。网络层引入了三个协议:IP协议、ARP协议和路由协议。IP...【详细内容】
2023-09-06  Search: TCP  点击:(253)  评论:(0)  加入收藏
TCP与UDP协议:网络通信中的两大重要角色
引言在这个像点点滴滴组成的虚拟宇宙中,网络通信就像是我们的超级高速公路系统,让信息在世界间飞速穿梭。想象一下,如果网络是一条繁忙的交通道路,那么协议就是交通信号灯,确保数...【详细内容】
2023-09-01  Search: TCP  点击:(231)  评论:(0)  加入收藏
TCP、UDP是如何流量、拥塞控制的?今天一口气讲透!
一、TCP TCP首部 流量控制 拥塞控制 三次握手,四次挥手 tcp 怎样保证数据正确性?流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度1、TCP首部源端...【详细内容】
2023-07-18  Search: TCP  点击:(252)  评论:(0)  加入收藏
▌简易百科推荐
学生偷看“不良网站”,手机上3个痕迹无法清除,网友:咋不早说
众所周知,中国的常规教育中,总是“谈性色变”,但在这个信息爆炸的互联网时代,即便是一些年纪很小的孩子,也能轻易接触到一些所谓的不良网站,因此这一方面的教育缺失,其实是很可怕的...【详细内容】
2024-03-28    叶姐生活指南  Tags:不良网站   点击:(11)  评论:(0)  加入收藏
什么是网络中的路由器?核心功能解释
路由器是互联网连接的核心元素,是一种允许多个设备连接到互联网,并促进将数据包转发到各自的目标地址的设备。使用动态路由技术,路由器检查数据并在各种可用路径中选择最有效的...【详细内容】
2024-03-07    千家网  Tags:路由器   点击:(31)  评论:(0)  加入收藏
过年该不该升级Wi-Fi 7路由?看完就知道
打开电商网站不难发现,从2023年第三季度到现在,Wi-Fi 7路由器新品越来越多。而且价格不再是高高在上,已经基本和Wi-Fi 6路由价格差不多了。看到这些Wi-Fi 7新品路由,不少朋友就...【详细内容】
2024-02-27    中关村在线  Tags:Wi-Fi   点击:(37)  评论:(0)  加入收藏
聊聊 Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。译自Navigating the Network: A Comprehensive Guide to Kubernete...【详细内容】
2024-02-19  云云众生s  微信公众号  Tags:Kubernetes   点击:(39)  评论:(0)  加入收藏
SSL协议是什么?关于SSL和TLS的常见问题解答
SSL(安全套接字层)及其后继者TLS(传输层安全)是用于在联网计算机之间建立经过身份验证和加密的链接的协议。尽管SSL协议在 1999年已经随着TLS 1.0的发布而被弃用,但我们仍将这些...【详细内容】
2024-02-06  IDC点评网    Tags:SSL协议   点击:(69)  评论:(0)  加入收藏
从零开始了解网络协议:TCP/IP详解
从零开始了解网络协议:TCP/IP详解 在当今数字化的时代,网络协议已经成为我们生活中不可或缺的一部分。作为互联网的基础,网络协议规定了数据如何在不同的网络设备之间传输。TC...【详细内容】
2024-02-01    简易百科  Tags:TCP/IP   点击:(59)  评论:(0)  加入收藏
BGP路由属性:互联网路由的灵活控制器
在互联网的庞大网络中,边界网关协议(BGP)是确保不同自治系统(AS)间路由信息有效交换的关键协议。然而,BGP的功能远不止于此。其核心组成部分,即BGP路由属性,赋予了BGP强大的灵活性,使...【详细内容】
2024-01-26  诺诺爱生活    Tags:互联网路由   点击:(40)  评论:(0)  加入收藏
简易百科之什么是网络延迟?
简易百科之什么是网络延迟?随着互联网的普及和发展,网络已经成为我们生活中不可或缺的一部分。然而,我们在使用网络时可能会遇到一种情况,那就是网络延迟。那么,什么是网络延迟呢...【详细内容】
2024-01-24    简易百科  Tags:网络延迟   点击:(149)  评论:(0)  加入收藏
网络延迟与网络速度有什么区别?分享具体的答案
通常,许多人抱怨网速测试。速度还是不错的,但是他们玩游戏的时候怎么会卡住,还是断开连接等等问题,这一系列问题始终困扰着大家。那么,网络延迟与网络速度有什么区别呢?请不要担心...【详细内容】
2024-01-24  萌新小郭    Tags:网络延迟   点击:(51)  评论:(0)  加入收藏
揭秘IP地址的网络威胁与攻击类型
在当今数字化时代,网络攻击已经成为网络安全的一大挑战。IP地址,作为互联网通信的基础,也成为网络威胁和攻击的焦点之一。本文将深入探讨不同类型的网络威胁和攻击,以及如何防范...【详细内容】
2024-01-22  IP数据云    Tags:IP地址   点击:(78)  评论:(0)  加入收藏
站内最新
站内热门
站内头条