TCP报文、滑动窗口、拥塞窗口解释
部分参考:https://blog.csdn.net/zhangdaisylove/article/details/47294315
源端口号:占2个字节,就是发起方的port
目的端口号:占两个字节,接收方的port
seq:占4个字节,发送方标记自己的segment的序列号,用以各个tcp报文的顺序。
ack:占4个字节,应答号,通常解释为期待接收到下一个序列号的报文,个人理解为这是第一个接收方未接收到的包
4位首部长度:占 4bit,表示tcp头部长度,单位为4个字节。
6位保留位
标志位:分别为URG、ACK、PSH、RST、SYN、FIN,
URG表示本包数据有紧急数据,ACK表示本包中ack值有效,PSH表示本包数据需要立即把本包数据从缓存区送出去,
RST表示连接有错误,重置连接,SYN表示建立连接,FIN表示结束连接。
16位窗口大小:表示接受方可以接受对方数据的缓存区大小。
16位校验和:
16位紧急指针:当URG被置位时,该值表示从开始到该值所指字节都是紧急数据。
一:滑动窗口
有时候接受方的缓存区已经满了,这个时候如果继续发送数据,那么接收方就会把数据丢弃掉,这样会白白浪费流量,所以在TCP的ACK中每次都会通知发送方自己可以接受的数据大小,也就是TCP报文中的16位窗口值,如果窗口变成了零以后,那么发送方就会停止发送,一直等到接收方可以接收数据,但是一直等待会出问题,如果其中ACK丢了,就会以为对方还不能接收数据,这个时候发送方可以发送窗口探测包。其中数据为0。
解释:当发送方收到接收方发来应答包后,应答号ack,加上报文中的窗口值减一,就是目前接受方的缓存最大可接受的数据包序列号,如下图ack=4,窗口值为6,那么4+6-1=9,也就是说发送知道目前最大可发送的数据包序号只能到9。
这就是滑动窗口,ack表示了窗口的左边界,ack+wind-1是窗口的右边界,即[ack,ack+win-1]区间,
目前只可以发送seq属于[ack,ack+win-1]区间的tcp数据包。由于ack一直变化,所以[ack,ack+win-1]属于向右滑动。
二:拥塞控制:
拥塞控制的目的避免网络拥塞,同时最大化网络利用率。不能一开始就发送大量数据到网络,以免造成网络拥塞,要对网络进行试探,并实时根据网络状态控制发送量,这就是拥塞控制的目的。这是一种试探网络状态的算法,判断当前网络最大可以一次性发送多少个MSS且不会导致网络拥塞。(MSS是TCP最大段大小,根据MTU计算,MTU为1500,则MTU-IP头-TCP头=1460)。
1. 如何实现:
拥塞控制的实现就是调整两个值:拥塞窗口值(cwnd),拥塞窗口阈值(ssthresh)。拥塞窗口阈值ssthresh是前一次拥塞时cwnd值的一半,建立连接之初,拥塞窗口cwnd=1,阈值ssthresh可以为无限大(因为不知道网络发送流量上限是多少,无法确定,设为一个较大值(ssthresh=65536),进行试探,或者指定其他适当值)。
2. 调整两个值的流程:
1)连接建立之初只发送一个数据包(cwnd=1),假定当前状态是最差,这样对网络负荷影响最小(避免拥塞)。
2)如果没有出现应答超时或者重复应答(网络没有拥塞,那么继续加大流量(最大化网络利用率,同时要避免拥塞)
- 此时当拥塞窗口在其阈值之下时(cwnd<ssthresh),继续翻倍增长窗口(cwnd=2*cwnd就是翻倍发送量)
- 如果在阈值之上(cwnd>=ssthresh),则线性增加窗口值(cwnd=cwnd+1)。
进入2);如果出现拥塞则进入3)。
3)出现应答超时或者重复应答(网络已拥塞,探测到拥塞值),如果
- 如果应答超时,将拥塞窗口阈值变为超时时的拥塞窗口的值的1/2(ssthresh=cwnd/2),将拥塞窗口值变为1(cwnd=1),并(网络状况很差,避免拥塞,立即将窗口设为0)
- 如果重复应答,将拥塞窗口阈值变为重复应答时拥塞窗口值的1/2(ssthresh=cwnd/2),然将拥塞窗口值变为阈值并加3(cwnd=ssthresh+3),然后。(网络状况有点差,但是没有很差,窗口缩半)
进入2)。
解释:这是发送方主机主动控制的值,是为发送方的TCP建立的一个受网络状况而定的窗口。每次发送数据时都会根据拥塞窗口和滑动窗口(对方ack应答包中的16位窗口大小)大小对比,选取值小的那一个作为数据包的长度值。
拥塞控制是最大化网络利用率,流量大小随网络状态动态调整。开始值要小但是要快速增加(指数增加),当到达阈值时流量增速要放缓(线性增加)以免很快又造成网络拥塞,另外由于第一次建立连接ssthresh的值较大,一般第一次 只会出现进翻倍发送。典型图如下所示:
总结:拥塞窗口阈值总是变为发生拥塞时的1/2(ssthresh=cwnd/2),拥塞窗口值在应答超时时变为0,在重复应答时变为当前值1/2后再加3(即新阈值加3)。
三、拥塞窗口和滑动窗口
拥塞窗口也可以决定出一个最大的发送序列号,滑动窗口也可以,需要二者取其小。另外拥塞窗口是发送方主动感知网络状态,进而决定的发送数据的流量,而滑动窗口是接收方告知发送方的。
四、其他
3:超时控制,窗口控制,流量控制,拥塞控制对比
1)超时控制,只是在每一个数据都要确定收到 ACK,没有收到ACK超过时间限定就会重发。
2)窗口控制,会对持续收到的同一个ACK三次以后重发数据,并且如果长时间没有收到ACK,那么也会重发数据。
3)流量控制,就是确认接收方是否有足够缓存接受数据,否则一个劲发会浪费网络流量。
4)拥塞控制,这个是试探网络是否可以接受目前的数据发送大小。
5)网络和主机缓存一起决定着数据发送数据的大小。
4:延迟应答
有时候没必要对每个数据都立刻发送ACK,可以稍微等待下一个数据也收到了,然后发送ACK,或者等待时间过长也发送ACK。
5:捎带应答:
就是把应答放在其他的数据包中一起发送过去。
6:半关闭:
TCP 的 shutdown() 可以停留在一个只接收数据,而不写数据的状态中,这个时候状态称为半关闭。
TCP报文、滑动窗口、拥塞窗口解释相关推荐
- 关于TCP报文段以及拥塞窗口cwnd的理解纠正
@(计算机网络) 在普通的拥塞控制算法中,我们总是粗粒度的关注每个RTT拥塞窗口的变化,比如初始报文段MSS = 1KB,在慢开始阶段增长规律是1→2→4→8...1\rightarrow 2\rig ...
- TCP/IP中的拥塞窗口控制机制
TCP拥塞控制是通过控制一些重要参数的改变而实现的.TCP用于拥塞控制的参数主要有: (1) 拥塞窗口(cwnd):拥塞控制的关键参数,它描述源端在拥塞控制情况下一次最多能发送的数据包的数量. (2) ...
- tcp发送窗口(滑动窗口)、拥塞窗口
TCP发送窗口拥塞窗口试题分析 题目一: 来源2015年408计算机综合 试题链接:https://www.nowcoder.com/questionTerminal/3241441c88f04ab5 ...
- 滑动窗口与拥塞窗口_流云哭翠-ChinaUnix博客
一.滑动窗口 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的. 对ACK的再认识,ack通常 ...
- tcp协议栈优化1-增加TCP初始拥塞窗口
看linux3.0 network代码,发现TCP initcwd(初始拥塞窗口)默认已经调为10,同时,TCP rcvwnd初始接收窗口也已调为10. tcp initcwd初始化函数-- ...
- TCP/IP传输层协议实现 - TCP接收窗口/发送窗口/通告窗口(lwip)
1.tcp通告窗口/接收窗口/发送窗口 接收端有一个接收窗口大小,接收端只能接收这么多数据,接收窗口的数据需要被上层接收后才释放更大接收空间,才可以接收更多数据:接收窗口之前的数据已经被接收,再次接收 ...
- TCP报文( tcp dup ack 、TCP Retransmission)
最近因使用FTP 上传数据的时候总是不能成功,抓包后发现 TCP 报文出现 TCP dup ack 与 TCP Retransmission 两种类型的包.收集整理下 TCP dup ack (重复应 ...
- 网络:传输层 TCP报文格式解析
一.TCP报文格式 1.为了提供可靠的数据传输,TCP报文首部字段有较多的字段,TCP报文格式如下图: 图2 TCP报文格式 16位源和目标端口(16位):用于多路复用/多路分解来自或送至上层应用的数 ...
- 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)
TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...
最新文章
- Sql Server 2012 分页方法分析(offset and fetch)
- 二叉树代码我写得很乱!!!整理一下思路
- 数据结构与算法(C++)– 树(Tree)
- 3.1 cat:合并文件或查看文件内容
- spring学习(44):p名称空间注入
- kafka retries参数入门
- IBM上线了一个人工智能,叫做Project Debater,堪称辩论神器!
- 教你正确修改handsome博客模板页面宽度
- 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——5 - America Seen with European Eyes(概说美国——欧洲人眼中的美国)
- Android 8.0 、9.0源码编译问题记录
- 数据结构——折半查找法
- 百慕大区块链战略不仅仅为了赢得新公司的青睐
- UE4蓝图案例:媒体播放器的开关1
- 如何高效实现多窗口卖票
- mmap在嵌入式中的应用
- 除了打通各类知识平台的激励系统,他们还想做国际领先的区块链技术社区
- webrtc部分手机黑屏的原因排查
- php正则匹配input,正则表达式 - php正则匹配p标签及带特定的中文
- PCL demo运行
- STM32实现定时器控制LED闪烁