面试官:说说TCP协议是如何保证传输的可靠性?
这个面试题也是最最基础的网络面试题,比较偏向毕业生或者刚入门者,有几年的工作经验一般问的比较少,但是也要对这块了如指掌,why?毕竟基础是非常非常重要的!
从前面《笔记 | 面试官问我:TCP与UDP的区别》我们知道,TCP和UDP的不同之一是TCP可以保证数据传输的可靠性,但是你知道为什么TCP可以保证可靠性,需要依靠什么机制来保证其可靠性呢?
1、应答确认
接收方收到报文就会确认,主要使用seq序列号与ack应答确认机制。
2、超时重传
当报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传。
一种情况是发送数据包丢失,另一种是确认包丢失。报文发出到收到应答中间有一个报文的往返时间RTT,如果超时则会进行重传。
3、数据校验
TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。虽说校验和是一个比较脆弱的校验,但在数据链路层可以进行探测和纠正。
4、数据合理分片和排序
UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
tcp会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
5、连接管理
TCP建立连接时的三次握手和断开连接时的四次挥手。下篇文章推出,敬请期待。
6、流量控制
当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,解决了两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。接收方处理数据的速度是有限的,如果发送方发送数据的速度过快,会导致接收方的缓冲区满,而发送方如果继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。因此TCP支持根据接收方的处理能力,来决定发送方的发送速度,这个机制叫做流量控制。
在TCP报文段首部中有一个16位窗口长度,当接收方接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接收方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口置为0,发送方收到后就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收方把窗口大小告诉发送方。
7、拥塞控制
当网络拥塞时,减少数据的发送。网络犹如一条条宽度一定的渠道,水量过大就会造成溢出或崩堤,类似网络发送数据非常繁忙,造成拥堵。所以在网络非常拥堵时,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,就会产生丢包问题。
拥塞控制方法分为:慢开始、拥塞避免、快重传和快恢复。
小结
简记为:确认、重传、校验、分片、排序、连接、流控、拥控。
(只要你围绕这几点分别跟面试官说明,这道题通过没问题的。)
更详细的内容,请建议参考网络书籍。
文章关联→→:一份Netty最全面试题!让面试官难不倒你!
笔记系列↓↓↓:
笔记 | 并发编程的三大挑战
回复公众号【资料】获得干货资料集锦:技术ppt、IT大会资料、架构、分布式资料等。
3、Kafka面试题!掌握它才说明你真正懂Kafka
4、Netty 5.0为啥被舍弃?原因竟然是...
5、中台之上——业务架构系列【汇总】
-关注搬运工来架构,与优秀的你一同进步-
如果喜欢这篇文章可以点在看哦↘
本文仅供学习!所有权归属原作者。侵删!文章来源: 搬运工来架构
文章评论