logo头像

云影sky

看了那么多,TCPIP究竟是什么(二)

本文约 1200 字,读完需要约 4分钟
“本文主要讲解TCP如何实现可靠传输。”

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

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

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

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

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

确定的过程大概是这样:

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

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

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

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

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

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

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

TCP 可靠传输

TCP 可靠传输

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

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

多次发送数据没有回复,一段时间之后断开连接

多次发送数据没有回复,一段时间之后断开连接

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

TCP 使用窗口控制机制。

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

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

MSS:Maximum Segment Size 最大消息长度

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

◆ ◆ ◆  ◆ 


06

06,2019

今天的大新闻是林志玲姐姐宣布结婚了,恭喜她,志玲姐姐一直都是我心目中的女神,突然觉得好温暖。                                                                                          另外 5G 牌照今天下发,我觉得是标志性的一刻,中国移动、中国联通、中国电信、中国广电四家获得牌照,5G 离我们的生活越来越近了。我记得很小的时候我还羡慕别人用手机上 QQ 聊天、用 QQ 音乐听歌,现在这已经成了基本的生活习惯,不得不让人憧憬未来5-10年,网络技术会如何影响我们的日常生活。


推荐阅读

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

TCP三次握手和四次分手

vuejs 中双向绑定的模拟实现


·end·

止水lx

一个想要分享点知识的公众号

微信号:lxfriday_xyz