面试题:谈谈你对TCP的认识

一 TCP

1. 简介
首先,TCP是一个传输层协议,提供进程到进程之间的可靠性数据传输服务,还提供流量控制差错控制等机制。
其次,TCP是面向连接的,其通信模式是全双工的;面向连接是指:

  • 在发送数据之前必须建立连接;
  • 连接状态只在两端维护,沿途节点不维护;

连接建立需要进行三次握手,关闭连接需要进行四次挥手
接下来面试官会问可靠性数据传输的原理、流量控制、差错控制、三次握手和四次挥手等;

二 TCP的可靠性传输

1. TCP的可靠性传输原理

  • 流水线机制;
  • 累计确认;
  • TCP使用单一重传定时器,当超时或收到重复的ACK会触发重传事件;
  • 其它的还有使用序列号对TCP报文段进行排序和丢掉重复的报文段;使用校验和检查错误的报文段;

2. 流水线机制
流水线机制,允许发送方在收到ACK之前,可以连续的发送多个分组,发送方和接收方需要更大的存储空间以缓存分组。
3. 累计确认
接收方收到序列号1、2、3、4和5的包,不必每个都确认,只需确认第5个就行,当发送方收到接收方对5的确认ACK后,就明白接收方前5个都已经正确接收。
4. 超时重传和快速重传
超时重传:发送端发送报文后,由于长时间没有收到ACK(该分组还在路上或者丢失),所以会重传当前分组;同时定时器RTO(Retransmission Timeout)会加倍。如果再次超时,定时器会再次加倍。
快速重传:如果发生超时,TCP的定时器的时间会设置到很大,重发丢失分组之前要等很长时间。因此需要通过重复的ACK检测分组丢失,如果发送方收到同一个数据的3个ACK,则会假定该分组已经丢失,会立即重传。

三 流量控制和拥塞控制

流量控制是接收方和发送方的问题,而拥塞控制是整个网络的问题。
1. 流量控制
在TCP的报头中,有一个receive window的字段,接收方会通过设置该字段存储自己缓冲区的可用空间。这样发送方将会限制自己已发送但还未收到ACK的数据不超过接收方的可用空间。当RecvWindow为0时,为了避免死锁,发送方还是会发送很小的数据段。
2. 拥塞控制
通过限制发送发的发送速率来进行拥塞控制:

LastByteSent-LastByteAcked <= CongWin

CongWin(congest window)被称作拥塞窗口,最后一个发送的字节减去最后一个被确认过的字节序列号,要小于等于CongWin。发送速率:

rate≈CongWin/RTT (Bytes/sec)

动态调整CongWin以改变发送速率。
这里写图片描述
注:在早期版本,当发生拥塞后直接将CongWin置为1,现在是将其置为原来的一半;
如何动态调整发送速率,可以总结为:
**加性增-乘性减;
慢启动;**
慢启动并不是指增长速度慢,而是指初始速率低,初始速率为1,然后每收到一个ACK,就将CongWin翻倍,直到达到阈值的一半;
加性增是指到达阈值的一半后,每次让CongWin增加1,而乘性减是当发生loss事件后,将CongWin减为原来的一半(也可能置为1);
lose事件:收到3个重复的ACK或者超时;
总结:
当CongWin低于阈值的时候,发送者处于慢启动阶段,CongWin指数增长;
当CongWin高于阈值,发送者处于拥塞避免阶段,CongWin线性增长;
当收到3个重复的ACK,阈值设置为CongWin的一半,CongWin设置为阈值,然后进行线性增长;
当超时发生,阈值设置为CongWin的一半,CongWin设置为1,然后进行指数增长;

最后三次握手和四次挥手请参考:https://blog.csdn.net/qq_38038480/article/details/80569651

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值