iOS开发攻城狮的集散地

TCP/IP的基础知识

2020-01-14  本文已影响0人  麻辣柠檬

首先,TCP/IP在某些情况下指的就是TCP协议与IP协议,但是有时指的是协议群。

而TCP/IP协议群包括,应用层协议,传输层协议,网际协议,路由控制协议。
其中传输层协议包括TCP与UDP,网际协议包括IP/ICMP/ARP。

所以四层模型的说法(应用层,传输层,网络层,数据链路层)是否是对应四层协议呢?

TCP与UDP的区别

TCP是可靠的,面向连接的流协议。拥有重发控制,拥塞控制,流量控制,顺序控制等功能。

UDP是不可靠的,无连接的数据报协议。没有TCP拥有的功能,意味着遇到丢包,拥塞,顺序错乱等问题时,需要应用自己去解决。

【由于UDP不需要确认数据是否发送成功,所以UDP的速度是比TCP要快的】

为什么TCP是可靠的连接?

三次握手的连接方式

TCP连接需要进行三次握手,连接方式类似于朋友之间的聊天。

三次握手.png

于是客户端与服务器就建立了TCP连接,在建立连接之后就可以进行传输了

客户端每次发送完一条数据,都会收到服务端的完成响应,告诉客户端我已经收到数据了。

数据发送与响应.png

重发机制

TCP之所以稳定,还因为它的机制。

我们将发送端比作发送妹子,接受端比作接收妹子。将她们建立起来的连接作为TCP连接。

发送妹子会在进行三次握手的时候计算出请求响应的时间,再加上为预防突发情况的耗时来作为响应延迟时间。

由于发送妹子每次发送数据成功后都会得到接收妹子的完成响应,所以理论上当一次数据发送成功后,发送端就会等待响应。

等待的时间就是发送妹子计算出来的响应延迟时间。如果超过这个时间还没有收到完成响应,那么她就会认为数据已丢包,于是就重新发送这段数据,再收不到响应就再发送。而发送到一定次数仍然没有收到响应,那么她就认为接收妹子已经挂掉了,然后主动断开连接。

这里用理论上,是因为发送端并不会发一条数据就等待一次响应,这样效率太低了。

为了提高效率,就有了窗口机制。

窗口机制

TCP是以段为单位传输数据的,我们将一段理解为一条数据,那么窗口机制就是一次连续发送多条数据,并且不需要等待接收妹子响应后再发送下一条。

窗口机制.png

例如一个窗口可以存放四条数据,于是我们的发送妹子连续发送4条数据。

然后等待接收妹子的响应。当发送端收到第一条响应的时候,那么窗口就会自动下移一段,因为第一段数据已经接收到成功响应就不需要管它了。以此类推,一直到所有数据全部发送完成,然后断开连接。

当然,因为TCP妹子们是全双工的,所以她们会边发数据边接受响应。

那么如果一个窗口中某条数据没有收到怎么办呢?

那就需要重发机制 + 顺序控制机制

顺序控制机制

我们接收到的数据是一段一段的,要显示完整的数据还需要将一段段的数据组合起来。如果不进行编号排序的话,因为网络丢包,延迟等原因,我们收到的数据段可能不会与发送时的顺序相同,就会造成解码失败或乱码的情况。

但是TCP妹子是非常细心地,她们不允许这种情况发生,于是发送妹子就为每条数据段进行编号,当对方收到数据后再按照顺序排列,然后再进行解码。

顺序控制机制.png

那么如果一个窗口中的某条数据没有发送成功,并不会影响客户端的继续发送。而接收妹子会在响应时会告诉对方少了哪一条数据。

但是因为延迟的原因,这条数据可能并不是没有发送成功,只是还在路上而已,需要让数据飞一会。所以当发送妹子收到缺失数据的响应时不会立刻重发,会继续等待。直到连续三次接收到缺少同一条数据的响应,这时发送妹子就认为该段数据已丢失,然后重发这段数据。

接收妹子收到缺失的数据后再按照顺序排列起来,进行解码等操作。

再发送完所有数据后,妹子们就需要断开连接了。

四次挥手断开连接

断开连接的方式也非常类似我们的聊天方式。正好学生们刚放寒假,我就用要答案来比喻一下四次挥手的方式

四次挥手.png

断开连接可以是任何一方提出的,图中的答案可以理解为数据。

当客户端提出想要断开连接时,服务端就会告诉客户端我已经收到你要断开连接的请求了。但此时并不会断开连接。

客户端会继续等待,直到服务端响应说:我已经没有数据要发送了,断开连接吧(这时服务端已经断开连接)。

客户端会回复:好的。然后继续等待一个响应时间,当确定没有收到回复后,客户端才会断开连接。

说完TCP妹子们再来说说UDP汉子

UDP是汉子?

UDP才不管数据有没有成功到达,快就完事了。【我真的没有开车】

如果说TCP的连接是需要发送妹子与接收妹子建立连接,并保证数据的可靠性。

那么UDP就是汉子,他不需要与任何人建立连接,他只需要将数据像扔快递一样往接收端扔就行了。管你快递坏了还是飞到一半没了,反正我的工作就是扔快递。【所以他单身】

可是这样为什么还会有那么多人去用UDP呢?

UDP虽然不能保证数据的可靠性,但是他快啊。像音视频传输,我并不需要保证数据的可靠,我需要能及时的反应信息,如果有一段数据出现问题,那视频就卡着就行了,不需要重新发送。等收到正常的数据后再显示正常的数据。

所以UDP更广泛的用于视频音频等,将来也会用于物联网等方面。

由于UDP并没有TCP那么多的机制,那么遇到丢包等情况,就需要应用自己去解决,这也是在考验团队的能力。

好啦,希望这篇文章能更好的帮助大家理解,如果有不正确的地方还希望能指出来,毕竟我也是个小白,不能误导了大家。

😘😘😘😘😘😘😘😘😘😘😘觉得有用的点个赞吧😘😘😘😘😘😘😘😘😘😘😘

上一篇下一篇

猜你喜欢

热点阅读