TCP通过三次握手建立连接,四次挥手释放连接,确保连接建立和连接释放的可靠。
序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制 标准回答 可靠传输就是通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的。TCP是通过序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制一起保证TCP传输的可靠性的。 加分回答 可靠传输的具体实现是:
- 应用层的数据会被分割成TCP认为最适合发送的数据块。
- 序列号:TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。
- 检验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。
- 确认应答:如果收到的数据报报文段的检验和没有差错,就确认收到,如果有差错,TCP就丢弃这个报文段和不确认收到此报文段。
- 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。
- 拥塞控制:当网络拥塞时,减少数据的发送。
- 停止等待协议:它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
目录
1. 三次握手和四次挥手
2. 流量控制
3. 拥塞控制
4. 序列号
5. 超时重传
6. 停止等待协议
1. 三次握手和四次挥手
TCP通过三次握手(3个报文段)建立连接,四次挥手(4个报文段)释放连接,确保连接建立和连接释放的可靠。
【三次握手详细过程】
能否使用两次握手建立连接呢?
不行。如果TCP客户发起的请求滞留到达,此时TCP服务器会进入连接已建立状态,而TCP客户端仍为关闭状态,会导致TCP服务器的资源浪费。
【四次挥手详细过程】
2. 流量控制
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。(发送过快接收方来不及接受,可能导致数据丢失)
使用滑动窗口机制实现。
【以字节为单位的滑动窗口】
【问题】对于主机B发送的消息丢失,主机A迟迟收不到主机B的消息,双方会陷入死锁局面。
解决:设置持续计时器,超过则主机A发送0窗口探测报文(带有1字节),即使主机B的接收窗口为0规定也要接收0窗口探测报文。
【问题】0窗口探测报文(带有1字节)丢失怎么办?
解决:对于0窗口探测报文(带有1字节)也设置超时计时器,超时则重传。
3. 拥塞控制
拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。
四种拥塞控制算法 :
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
【慢开始+拥塞避免】
拥塞窗口cwnd,满开始门限ssthresh
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法,改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。【快重传+快恢复】
解决个别丢失但未拥塞,发生的超时重传而导致调用拥塞避免算法
快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
- 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
- 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传
快恢复:ssthresh=cwnd/2,cwnd=ssthresh
【慢开始结合拥塞避免】示例
【慢开始】:指数增长
【拥塞避免 】:当cwnd=ssthresh时,每次加1
【慢开始】:当发送超时重传,将ssthresh=cwnd/2,cwnd=1
【快重传+快恢复】示例
4. 序列号
序列号:TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。
5. 超时重传+超时重传时机的选择
问题:A给B发送数据,A 如何知道 B 是否正确收到了 M1 呢?
解决方法:超时重传
- A 为每一个已发送的分组设置一个超时计时器。
- A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。
- 若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。
超时重传时机的选择
6. 停止等待协议
它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。