看了那么多,TCP/IP究竟是什么(二)

正文约 1200 字,读完需要 4 分钟


本文主要讲解TCP如何实现可靠传输。


TCP 的传输过程有点像送快递,快递用顺丰送的很快,用其他的可能会拖延几天,送的路上可能会不小心弄丢了,快递送到之后,对方需要签收以确保自己完整拿到了快递。


TCP 传输的时候也可能会出现丢失数据、重复发送或者发送顺序混乱的问题。


下面是 TCP 可靠传输的基础。


问题1 TCP 分段传输的段长度怎么确定?


在建立连接的时候就会确定传输的段长度(也称作最大消息长度,MSS),之后的传输都是以这个 MSS 作为传输单位。

扫描二维码关注公众号,回复: 6496823 查看本文章


确定的过程大概是这样:


主机1:大哥,咱们的MSS用4500怎么样?(第一次握手)


主机2:小老弟,传这么多我吃不消啊,就传1400吧,少量多次呀!(第二次握手)


主机1:好的,大哥,之后咱们都以1400作为传输单位啦!(第三次握手)


实质是在两者之间选一个较小的作为传输单位。


问题2 TCP 传输数据是分段的,如何保证数据被完整的接收到


通过序列号与确认号提高可靠性。


发送者发送数据的时候带有数据的序列号(seq)和数据长度,而接受者接收到这段数据就会返回确认号(ack),发送者收到 ack 就知道这段数据已经被成功接收到了。




问题3 数据发送的时候可能会丢失,如何重发呢


TCP 被要求能在各种环境下提供高性能通信,即使网络拥堵(类似堵车)也要能保证这点。它在每次传输时都会计算往返的时间差,数据重发之后若收不到应答还会继续发送,等待确认的时间会以2倍、4倍的方式成指数增长。但是发送方也不会一直重发,达到固定次数之后,会认为连接发生了异常,强制地断开连接。




问题4 确认对方接收到前一段之后才能发送下一段,如何提升发送速度呢


TCP 使用窗口控制机制


简单来讲就是在一个大范围内分多次发送,先不管对方有没有接收到,等这个范围发送完了之后,再看对方没收到哪段就发送哪段。


这里,发送端有一个内存池,接收到对应的确认号之后会从这个池子清除掉,发送端收到三次相同的确认时(确认号相同),就会将对方需要的数据发送出去。因为发送多次确认,就表示这一段对应的数据对方没有接收到。


  • MSS:Maximum Segment Size 最大消息长度


之所以会专门讲 TCP,是因为 TCP 的应用非常广泛,很多通信都会用到 TCP ,一些过程的交互也会设计成类似 TCP 三次握手的模式。另外面试时,考查协议问到 TCP 的概率也极其高。


止水lx

一个想要分享点知识的公众号,关注送技术资料


转载于:https://juejin.im/post/5cfb23966fb9a07eb051b413

猜你喜欢

转载自blog.csdn.net/weixin_34390105/article/details/91429697