84、TCP 协议如何保证可靠传输?

第一种回答

1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传。

2.数据校验:TCP报文头有校验和,用于校验报文是否损坏。

3.数据合理分片和排序:tcp会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新 排序后交给应用层。而UDP:IP数据报大于1500字节,大于MTU。这个时候发送方的IP层就需要分 片,把数据报分成若干片,是的每一片都小于MTU。而接收方IP层则需要进行数据报的重组。由于 UDP的特性,某一片数据丢失时,接收方便无法重组数据报,导致丢弃整个UDP数据报。

4.流量控制:当接收方来不及处理发送方的数据,能通过滑动窗口,提示发送方降低发送的速率,防止 包丢失。

5.拥塞控制:当网络拥塞时,通过拥塞窗口,减少数据的发送,防止包丢失。

 

第二种回答

1.建立连接(标志位):通信前确认通信实体存在。

2.序号机制(序号、确认号):确保了数据是按序、完整到达。

3.数据校验(校验和):CRC校验全部数据。

4.超时重传(定时器):保证因链路故障未能到达数据能够被多次重发。

5.窗口机制(窗口):提供流量控制,避免过量发送。

6.拥塞控制:同上。

 

第三种回答

首部校验

这个校验机制能够确保数据传输不会出错吗? 答案是不能。

原因

TCP协议中规定,TCP的首部字段中有一个字段是校验和,发送方将伪首部、TCP首部、TCP数据使用 累加和校验的方式计算出一个数字,然后存放在首部的校验和字段里,接收者收到TCP包后重复这个过 程,然后将计算出的校验和和接收到的首部中的校验和比较,如果不一致则说明数据在传输过程中出错。

这就是TCP的数据校验机制。 但是这个机制能够保证检查出一切错误吗?显然不能。

因为这种校验方式是累加和,也就是将一系列的数字(TCP协议规定的是数据中的每16个比特位数据作 为一个数字)求和后取末位。 但是小学生都知道A+B=B+A,假如在传输的过程中有前后两个16比特位 的数据前后颠倒了(至于为什么这么巧合?我不知道,也许路由器有bug?也许是宇宙中的高能粒子击 中了电缆?反正这个事情的概率不为零,就有可能会发生),那么校验和的计算结果和颠倒之前是一样 的,那么接收端肯定无法检查出这是错误的数据。

解决方案

传输之前先使用MD5加密数据获得摘要,跟数据一起发送到服务端,服务端接收之后对数据也进行MD5 加密,如果加密结果和摘要一致,则认为没有问题

 

上一篇:CentOS7 编译安装 Nginx (实测 笔记 Centos 7.0 + nginx 1.6.2)


下一篇:84. 柱状图中最大的矩形