首页 > 其他分享 >计算机网络知识点(四)

计算机网络知识点(四)

时间:2024-06-17 11:29:17浏览次数:16  
标签:知识点 窗口 重传 ACK TCP 发送 计算机网络 超时

目录

一、简述TCP可靠性保证

1、检验和

2、序列号/确认应答

3、超时重传

4、最大消息长度

5、滑动窗口控制

6、拥塞控制

二、简述 TCP 滑动窗口及重传机制

三、滑动窗口过小怎么办

四、如果三次握手时每次握手信息对方没收到会怎么样

五、简述 TCP 的 TIME_WAIT,为什么需要有这个状态


一、简述TCP可靠性保证

        TCP主要提供了检验和序列号/确认应答超时重传最大消息长度滑动窗口控制等方法实现了可靠性传输。

1、检验和

        通过检验和的方式,接收端可以检测出来数据是否有差错和异常。假如有差错就会直接丢弃TCP段,重新发送。TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分:TCP首部、TCP数据、TCP伪首部。

2、序列号/确认应答

        这个机制类似于问答的形式。比如在课堂上老师会问你 “明白了吗?”,假如你没有隔一段时间回应或者你说不明白,那么老师就会重新讲一遍。其实计算机的确认应答机制也是一样的,发送端发送信息给接收端,接收端会回应一个包,这个包就是应答包。

        上述过程中,只要发送端有一个包传输,接收端没有回应确认包(ACK包),都会重发。或者接收端的应答包,发送端没有收到也会重发数据。这就可以保证数据的完整性。

3、超时重传

        超时重传是指发送出去的数据包到接收到确认包之间的时间,如果超过了这个时间会被认为是丢包了,需要重传。那么我们该如何确认这个时间值呢?

        我们知道,一来一回的时间总是差不多的,都会有一个类似于平均值的概念。比如发送一个包到接收端收到这个包一共是0.5s,然后接收端回发一个确认包给发送端也要0.5s,这样的两个时间就是 RTT(往返时间)。然后可能由于网络原因的问题,时间会有偏差,称为抖动(方差)。

        从上面的介绍来看,超时重传的时间大概是比往返时间+抖动值还要稍大的时间。但是在重发的过程中,假如一个包经过多次的重发也没有收到对端的确认包,那么就会认为接收端异常,强制关闭连接,并且通知应用通信异常强行终止。

4、最大消息长度

        在建立TCP连接的时候,双方约定一个最大的长度(MSS)作为发送的单位,重传的时候也是以这个单位来进行重传。理想的情况下是该长度的数据刚好不被网络层分块。

5、滑动窗口控制

        我们上面提到的超时重传的机制存在效率低下的问题,发送一个包到发送下一个包要经过一段时间才可以。所以我们就想着能不能不用等待确认包就发送下一个数据包呢?这就提出了一个滑动窗口的概念。

        窗口的大小就是在无需等待确认包的情况下,发送端还能发送的最大数据量。这个机制的实现就是使用了大量的缓冲区,通过对多个段进行确认应答的功能。通过下一次的确认包可以判断接收端是否已经接收到了数据,如果已经接收了就从缓冲区里面删除数据。 

        在窗口之外的数据就是还未发送的和对端已经收到的数据。那么发送端是怎么样判断接收端有没有 接收到数据呢?或者怎么知道需要重发的数据有哪些呢?通过下面这个图就知道了。

        如上图,接收端在没有收到自己所期望的序列号数据之前,会对之前的数据进行重复确认。发送端在收到某个应答包之后,又连续3次收到同样的应答包,则数据已经丢失了,需要重发。

6、拥塞控制

        窗口控制解决了两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。然而如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,就会产生丢包问题。为此TCP引入慢启动机制,先发出少量数据,就像探路一样,先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。

        发送开始时定义拥塞窗口大小为1;每次收到一个ACK应答,拥塞窗口加1;而在每次发送数据时,发送窗口取拥塞窗口与接送段接收窗口最小者。

        慢启动:在启动初期以指数增长方式增长;设置一个慢启动的阈值,当以指数增长达到阈值时就停止指数增长,按照线性增长方式增加至拥塞窗口;线性增长达到网络拥塞时立即把拥塞窗口置回 1,进行新一轮的“慢启动”,同时新一轮的阈值变为原来的一半。

二、简述 TCP 滑动窗口及重传机制

        1. 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。TCP的滑动窗口解决了端到端的流量控制问题,允许接受方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。

        2. TCP在发送数据时会设置一个计时器,若到计时器超时仍未收到数据确认信息,则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时(RTO)。另一种方式的重传称为快速重传,通常发生在没有延时的情况下。若TCP累积确认无法返回新的ACK,或者当ACK包含的选择确认信息(SACK)表明出现失序报文时,快速重传会推断出现丢包,需要重传。

三、滑动窗口过小怎么办

        我们可以假设窗口的大小是1,也是就每次只能发送一个数据,并且发送方只有接受方对这个数据进行确认了以后才能发送下一个数据。如果说窗口过小,那么当传输比较大的数据的时候需要不停的对数据进行确认,这个时候就会造成很大的延迟。

四、如果三次握手时每次握手信息对方没收到会怎么样

        1. 如果第一次握手消息丢失,那么请求方不会得到ack消息,超时后进行重传;

        2. 如果第二次握手消息丢失,那么请求方不会得到ack消息,超时后进行重传;

        3. 如果第三次握手消息丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。而Server重发SYN+ACK包的次数,可以设置/proc/sys/net/ipv4/tcp_synack_retries修改,默认值为5.如果重发指定次数之后,仍然未收到 client 的ACK应答,那么一段时间后,Server自动关闭这个连接。

        client 一般是通过 connect() 函数来连接服务器的,而connect()是在 TCP的三次握手的第二次握手完成后就成功返回值。也就是说 client 在接收到 SYN+ACK包,它的TCP连接状态就为 established (已连接),表示该连接已经建立。那么如果 第三次握手中的ACK包丢失的情况下,Client 向 server端发送数据,Server 端将以 RST 包响应,方能感知到 Server 的错误。

五、简述 TCP 的 TIME_WAIT,为什么需要有这个状态

        1. TIME_WAIT状态也成为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL (Maximum Segment Lifetime),它是任何报文段被丢弃前在网络内的最长时间。这个时间是有限的,因为TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段。 对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个 ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以 防这个ACK丢失(另一端超时并重发最后的FIN)。这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地 址和端口号,服务器的IP地址和端口号)不能再被使用。这个连接只能在2MSL结束后才能再被使用。

        2. 理论上,四个报文都发送完毕,就可以直接进入CLOSE状态了,但是可能网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

标签:知识点,窗口,重传,ACK,TCP,发送,计算机网络,超时
From: https://blog.csdn.net/L_peanut/article/details/139718164

相关文章

  • 数据库恢复技术知识点合集(复习总结)
    目录一、事务的基本概念二、事务的ACID特性1.原子性2.一致性3.隔离性4.持续性三、数据库恢复概述四、故障的种类1.事务内部的故障2.系统故障——软故障1.系统故障的原因2.系统故障的恢复3.介质故障——硬故障1.介质故障的原因2.介质故障的恢复五、......
  • Unity学习笔记----摄像机组件信息相关知识点总结
    一.ClearFlags1.skybox天空盒一般用于3d游戏。2.SolidColor颜色填充一般用于2d游戏。3.Depthonly只画该层,背景透明与Depth配合使用,等会再写。4.Don'tClear不移除,渲染覆盖不会擦除上一帧的画面,一般不使用。默认二.CullingMask选择性渲染部分层级,可以指定渲染对......
  • 计算机网络知识点(二)
    目录一、简述CSRF攻击的思想及解决方法二、MAC地址和IP地址的作用三、TCP三次握手和四次挥手的过程四、TCP两次握手是否可行五、简述TCP和UDP的区别,它们的头部结构是什么样的一、简述CSRF攻击的思想及解决方法        1、CSRF全称是“跨站请求伪造”。即黑客可......
  • 移动端超超超详细知识点总结(Part4)
    rem基础1.rem单位rem(rootem)是一个相对单位,类似于em,em是父元素字体大小。不同的是rem的基准是相对于html元素的字体大小。比如,根元素(html)设置font-size=12px;非根元素设置width:2rem;则换成px表示就是24px。rem的优势:父元素文字大小可能不一致,但是整个页面只有一个html,......
  • 【计算机网络仿真实验-实验2.7】单臂路由
    实验2.7单臂路由1.实验拓扑图2.测试连通性测试PC1PC2PC3之间的连通性无法ping通,因为它们处在不同的网段,而二层交换机不具备路由功能,因此没办法接通3.在交换机上创建vlan10,并将端口0/2划分到vlan10中Switch>enableSwitch#configureterminal......
  • 软考 系统架构设计师系列知识点之杂项集萃(38)
    接前一篇文章:软考系统架构设计师系列知识点之杂项集萃(37)第62题以下关于域名服务器的叙述,错误的是()。A.本地缓存域名服务不需要域名数据库B.顶级域名服务器是最高层次的域名服务器C.本地域名服务器可以采用递归查询和迭代查询两种查询方式D.权限服务器负责将其管辖......
  • 软考 系统架构设计师系列知识点之杂项集萃(37)
    接前一篇文章:软考系统架构设计师系列知识点之杂项集萃(36)第60题用例(usecase)用来描述系统对事件做出响应时所采取的行动。用例之间是具有相关性的。在一个“订单输入子系统”中,创建新订单和更新订单都需要核查用户账号是否正确。用例“创建新订单”、“更新订单”与用例“核......
  • 个人自用python知识点
    str字符串常用方法str_1="abcdefgaaaAGJIFJIJaadfn"#1.index返回某个字符第一次出现的下标,若无则报错print(str_1.index("a"))#print(str_1.index("p"))#报错#2.find返回某个字符第一次出现的下标,若无则返回-1print(str_1.find("a"))print(str_1.find(&quo......
  • 软考 系统架构设计师系列知识点之杂项集萃(35)
    接前一篇文章:软考系统架构设计师系列知识点之杂项集萃(34)第56题遗留系统的演化可以采用淘汰、继承、改造和集成四种策略。若企业中的遗留系统技术含量较高,业务价值较低,在局部领域中工作良好,形成了一个个信息孤岛时,适合于采用()演化策略。A.淘汰B.继承C.改造D.集成正......
  • 第1章 计算机网络和因特网
    1.1什么是因特网回答这个问题:我们更够描述因特网的具体构成(nutsandbolts),即构成因特网的基本硬件和软件组件。我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。1.1.1具体构成描述端系统通过通信链路(communicationlink)和分组交换机(packetswitch)的网络连......