当前位置: 首页 > 面试题库 >

请问TCP用了哪些措施保证其可靠性

李兴安
2023-03-14
本文向大家介绍请问TCP用了哪些措施保证其可靠性相关面试题,主要包含被问及请问TCP用了哪些措施保证其可靠性时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

1、序列号、确认应答、超时重传

数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。

2、窗口控制与高速重发控制/快速重传(重复确认应答)

TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。

使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒......

3、拥塞控制

如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以TCP在为了防止这种情况而进行了拥塞控制。

慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个rtt),将拥塞窗口大小*2。

拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个rtt,拥塞窗口大小+1),以此来避免拥塞。

将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程。

快速重传:在遇到3次重复确认应答(高速重发控制)时,代表收到了3个报文段,但是这之前的1个段丢失了,便对它进行立即重传。

然后,先将阈值设为当前窗口大小的一半,然后将拥塞窗口大小设为慢启动阈值+3的大小。

这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量,再进入慢慢上升的过程,网络不会轻易的发生瘫痪。

 

 

TCP三次握手

深信服

TCP的三次握手过程如下:

 

1)首先客户端发送seq=c的SYN数据包

服务器端响应一个seq=s,ack=c+1的SYN+ACK数据包

最后客户端回复一个seq=c+1,ack=s+1的ACK数据包,三次握手完成

 类似资料:
  • 本文向大家介绍请你解释一下TCP为什么可靠一些相关面试题,主要包含被问及请你解释一下TCP为什么可靠一些时的应答技巧和注意事项,需要的朋友参考一下 考察点:TCP 三次握手,超时重传,滑动窗口,拥塞控制。  

  • (是的,我意识到我的超时机制不准确)

  • 由于E立方管理平台可以在因特网上运行,所以网络安全问题必须认真对待,为此,E立方管理平台采取了三方面的措施:      1、对数据进行高强度加密      2、保证所有的调用必须经过认证才能调用      3、SQL数据库被网络层隔离在局域网中,而不是暴露在互联网上,外界无法直接访问。     以上措施确保了E立方管理平台可以在互联网上安全使用。 在Excel客户端方面,E立方管理平台不要求降低宏

  • 本文向大家介绍请你说一下TCP怎么保证可靠性,并且简述一下TCP建立连接和断开连接的过程相关面试题,主要包含被问及请你说一下TCP怎么保证可靠性,并且简述一下TCP建立连接和断开连接的过程时的应答技巧和注意事项,需要的朋友参考一下 参考回答: TCP保证可靠性: (1)序列号、确认应答、超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收

  • GHC有很多可以执行的优化,但我不知道它们都是什么,也不知道它们在什么情况下执行的可能性有多大。 我的问题是:我可以期望它每次应用什么转换,或者几乎如此?如果我看一段经常执行(评估)的代码,我的第一个想法是“嗯,也许我应该优化它”,在这种情况下,我的第二个想法应该是“不要想它,GHC得到了这个”? 我在读《流融合:从列表到流再到什么都没有》这篇论文,他们使用的将列表处理改写成另一种形式的技术,GH

  • 我正在调查我编写的一个定期运行的作业中的一个数据正确性问题,这个问题似乎是由BigQuery以非原子方式两次覆盖同一个表引起的。更具体地说,我在同一时间运行了同一查询的两个副本(由于重试逻辑),两个副本都设置为覆盖同一个表(使用WRITE_TRUNCATE选项),结果表的每一行都有两个副本。我希望一个查询用查询结果编写一个表,而另一个查询用相同的结果覆盖它,而不是以一个双倍大小的表结束。 我在设计