C++面试总结之网络(三)

本文详细介绍了TCP网络协议的相关知识,包括TIME_WAIT状态的危害与避免方法、TCP头部结构、拥塞控制机制(慢启动、拥塞避免、快速恢复算法)、TCP常用选项、UDP调用connect的作用、socket的可读可写条件、网络字节序以及滑动窗口协议的原理与应用场景。此外,还讨论了TCP重传机制,包括超时重传和快速重传策略,以及SACK方法在提高重传效率上的作用。
摘要由CSDN通过智能技术生成

1.TIME_WAIT状态的产生、危害、如何避免? 

【答】TCP协议在关闭连接的四次挥手中,为了应对最后一个 ACK 丢失的情况,Client(即主动关闭连接的一方)需要维持 time_wait 状态并停留 2 个MSL的时间。

危害:Linux分配给一个用户的文件句柄是有限的,如果系统中存在大量的 time_wait 状态,一旦达到句柄数上限,新的请求就无法被处理了,而且大量 time_wait 连接占用资源影响性能。

如何避免:在/etc/sysctl.conf文件中开启 net.ipv4.tcp_tw_reuse重用和net.ipv4.tcp_tw_recycle快速回收。

2.请画出TCP头部

 

3.TCP的拥塞控制机制是什么

我们知道TCP通过一个定时器(timer)采样了RTT(路的传播时间(propagation delay)、末端系统的处理时间、路由器缓存中的排队和处理时间)并计算RTO(超时重传时间),但是,如果网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,然而重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴” —— TCP的拥塞控制机制就是用于应对这种情况。

首先需要了解一个概念,为了在发送端调节所要发送的数据量,定义了一个“拥塞窗口”(Congestion Window),在发送数据时,将拥塞窗口的大小与接收端ack的窗口大小做比较,取较小者作为发送数据量的上限。

拥塞控制主要是四个算法:

慢启动:意思是刚刚加入网络的连接,一点一点地提速,不要一上来就把路占满。

连接建好的开始先初始化cwnd = 1,表明可以传一个MSS大小的数据。

每当收到一个ACK,cwnd++; 呈线性上升

每当过了一个RTT,cwnd = cwnd*2; 呈指数让升

阈值ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”

拥塞避免:当拥塞窗口 cwnd 达到一个阈值时,窗口大小不再呈指数上升,而是以线性上升,避免增长过快导致网络拥塞。

每当收到一个ACK,cwnd = cwnd + 1/cwnd

每当过了一个RTT,cwnd = cwnd + 1

拥塞发生:当发生丢包进行数据包重传时,表示网络已经拥塞。分两种情况进行处理:

等到RTO超时,重传数据包:sshthresh = cwnd /2;cwnd 重置为 1;进入慢启动过程

在收到3个duplicate ACK时就开启重传,而不用等到RTO超时:sshthresh = cwnd; cwnd = cwnd /2;进入快速恢复算法——Fast Recovery

快速恢复:至少收到了3个Duplic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值