TCP面试题之滑动窗口原理

Wesley13
• 阅读 1155

TCP 滑动窗口

作用:

    1. 提供TCP可靠性:对发送的数据进行确认    2. 流量控制:窗口大小随链路变化

一、TCP窗口机制

    TCP中窗口大小是指tcp协议一次传输多少个数据。因为TCP是一个面向连接的可靠的传输协议,既然是可靠的就需要传输的数据进行确认。TCP窗口机制有两种,一种是固定窗口大小,另一种是滑动窗口。数据在传输时,TCP会对所有数据进行编号,发送方在发送过程中始终保持着一个窗口,只有落在发送窗口内的数据帧才允许被发送;同时接收方也始终保持着一个接收窗口,只有落在窗口内的数据才会被接收。这样通过改变发送窗口和接收窗口的大小就可以实现流量控制。

二、TCP窗口大小

    TCP的窗口滑动技术通过动态改变窗口的大小来调节两台主机之间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口,一个用于接收数据,一个用于发送数据。接收方设备要求窗口大小为0时,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。    TCP在传送数据时,第一次接受方窗口大小是由链路带宽决定的,但是接收方在接收到的数据后,返回ack确认报文,同时也告诉了发送方自己的窗口大小,此时发送方第二次发送数据时,会改变自己的窗口大小和接收方一致。 当窗口过大时,会导致不必要的数据来拥塞我们的链路,但是窗口太小时,会造成很大的延时,比如为1时,发送方每发送一个数据,接收方就会返回一个ack报文,在发送方未接收到接收方的确认报文ack之前不会进行下一次发送。(当链路变好了或者变差了这个窗口还会发生变化,并不是第一次协商好了以后就永远不变了。)【这句话不太理解】

三、窗口滑动协议

    窗口滑动协议是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待接收确认报文前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。

四、滑动窗口原理

 TCP面试题之滑动窗口原理

  1. 窗口大小是指无需等待确认就可以继续发送数据的最大值,上图的窗口大小是4000字节(4段)

  2. 发送前4段时,无需ACK,直接发送

  3. 收到第一个ACK后,滑动窗口向后移动,继续发送第五段的数据

  4. 操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答,只有应答的数据才会从缓冲区中删除

  5. 窗口越大,则网络的吞吐率就越高

五、滑动窗口丢包原理

发送端丢包原理

 TCP面试题之滑动窗口原理

当某一段报文丢失了,图中(1001-2000)数据段丢失了,接收方没有接收到该数据段,则会一直给发送端发送ACK(下一个是1001),如果发送端连续收到同样的ACK(下一个是1001),就会将对应的(1001-2000)重新发送,这时候如果接收端收到1001后,再次返回的就是ACK(7001)。这种机制被称为“高速重发机制”(快速重传)

接收端丢包原理

TCP面试题之滑动窗口原理

接收端的下一个2001丢失了,但是发送端收到了ACK(下一个3001),说明1-3000的数据段已经接收到了,数据已经传输到了发送端,所以不需要理会。

点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Android 中的Socket通讯机制
Android中的网络通讯无非Http和Socket,Socket有两种形式——TCP和UDP。TCP与UDP区别TCP传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到
Wesley13 Wesley13
3年前
TCP的三次握手与四次挥手
TCP的三次握手与四次挥手一、TCP(TransmissionControlProtocol传输控制协议)TCP是面向对连接,可靠的进程到进程通信的协议TCP是提供全双工服务,即数据可在同一时间双向传输二、TCP报文段(封装在IP数据报
Wesley13 Wesley13
3年前
TCP、UDP协议及两者的区别
一、TCP协议:位于传输层,提供可靠的字节流服务。所谓的字节流服务(ByteStreamService)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。即TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达
Wesley13 Wesley13
3年前
34.TCP取样器
阅读文本大概需要3分钟。1、TCP取样器的作用   TCP取样器作用就是通过TCP/IP协议来连接服务器,然后发送数据和接收数据。2、TCP取样器详解!(https://oscimg.oschina.net/oscnet/32a9b19ba1db00f321d22a0f33bcfb68a0d.png)TCPClien
Wesley13 Wesley13
3年前
TCP协议详解
  TCP协议作为基本的传输控制协议,提供了面向连接的、可靠的通信机制。由于其优越的特性,被广泛应用于网络通信中,成为了今天互联网的基石。其为了屏蔽网络底层种种复杂的因素做出了巨大的努力,同时也导致了TCP内部各种机制之间的相互作用,让初接触它的人们很难理清头绪。本文就从TCP的传输窗口这个点切入,带领大家一睹TCP实现机制的风采。1. 前言
Wesley13 Wesley13
3年前
TCP之超时重传机制
  TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错、超时丢包等问题TCP设计了超时重传机制,其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。1、超时重传时间  R
浅谈TCP、UDP、ICMP三种常见协议
TCP是位于传输层的协议,它是面向链接的,提供全双工的服务,数据流可以双向传输。TCP是一种可靠的传输,它拥有三次握手机制保证数据传输的可靠性,如果对方没有接收到数据则会一直尝试重新传输。像FTP文件传输,远程登陆,HTTP,SMTP,HTTPS等等需要保证传输完整性的都是基于TCP协议。
浅说TCP状态机制
TCP(TransmissionControlProtocol)是一种面向连接的、可靠的传输协议,常用于互联网中应用层的数据传输。在协议栈中,TCP处于传输层,负责数据的分段、传输和重组等工作,同时采用状态机制来维护连接的状态。下面我们就来详细介绍一下TCP协议栈链接跟踪的工作原理。
API 小达人 API 小达人
1年前
如何在 Eolink Apikit 中发起 TCP/UDP 文档测试
TCP/UDP是两种常用的网络传输协议。TCP协议提供可靠的连接,而UDP协议提供不可靠的连接。