导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:336
阅读量:1256311
访问量:133860
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
博文->>首页 博主的更多博文>>
笔记 | 网络编程基础:TCP如何保证可靠性
Tags : 网络编程基础,TCP,可靠性发表时间: 2020-05-27 02:27:28
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
比如: 转自:Su的技术博客  原文地址:

面试官:说说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最全面试题!让面试官难不倒你!


笔记系列↓

笔记 | Java对象探秘

笔记 | JVM内存区域结构:一计两栈一堆一区

笔记 | 并发编程的三大挑战

笔记 | TCP与UDP的区别

回复公众号【资料】获得干货资料集锦:技术ppt、IT大会资料、架构、分布式资料等。

打赏
打赏
关注公众号
公众号
类别:面试| 阅读(328)| 赞 (1)
评论
暂无评论!
发表评论
昵  称:

验证码:

内  容:

    同时赞一个 赞