TCP层的那些知识,你掌握了多少?

前言

网络是一个计算机的重要学科,不管是tcp、udp、http还有各类各样的协议,他们都是网络的一部分。给一个地址,是我大三上考试前作的一些笔记,固然还有其余的学习内容。git

思惟导图

网络体系结构模型

在图片中咱们可以看到数据链路层和物理层可以合并成网际接口层。这是由于TCP/IP模型其实存在两种的说法,一个是四层模型,一个是五层模型,而他们的区别也就是在此处。github

其实在现实生活中,咱们基于的网络都是基于TCP/IP模型创建的,可是这个章节咱们主要讨论的是TCP层,你也一样能够叫他传输层。算法

TCP层

在TCP层中,其实存在两个协议有以下图两种:TCPUDP服务器

TCP/传输控制协议

这是咱们网络基础中的重中之重 网络

其实知识点不少不少,因此抽出几个重点内容讲解。tcp

三次握手

握手的实现顺序:ide

  1. 第一次握手:客户机向服务器发出包SYN
  2. 第二次握手:服务器确认客户机的包SYN,发送给客户机包SYN+ACK。
  3. 第三次握手:客户机确认服务器的包SYN+ACK,发送包ACK+Data给服务器。

从第三次握手开始,咱们就已经能够带上咱们的数据进行传输了。post

采用三次握手不是二次握手缘由:学习

为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误3d

简单的说就是:因网络缘由,客户端重传了请求创建链接报文,当2号请求报文与服务器创建链接并断开后,1号请求链接到达。采用二次握手致使服务器进入链接状态,而客户端处于关闭状态,形成资源的消耗。

其实从另一个角度看,这是一个两军对垒的问题。

图画的有点丑陋,哈哈哈哈哈哈哈!!

讲个故事好了,一天吴军想打魏国,蜀军这天也想打魏国,他们看到对方,都想借对方只手灭了魏国,本身坐收渔翁之利。这个时候,吴军选择先派出使者去发出同盟请求,并以狼烟做为信号 (第一次握手开始) ,可是会途径魏国啊,那可能使者就有掉脑壳或者被偷换的可能了 (数据包丢失或者数据位出错) ,到了蜀军之后,蜀军承认了此次的行动,而后送走了来使 (第一次握手成功,第二次握手开始) ,固然中间又要路过魏国,有可能出现上述状况。最后吴军点了狼烟,就冲去灭魏国了。(完成第二次握手,发出数据,开始第三次握手)

四次挥手

四次挥手就没有这么精彩的故事了,就平淡点讲一下好了。

挥手的实现顺序:

  1. 第一次挥手:客户机向服务器发送包FIN
  2. 第二次挥手:服务器确认客户机的包FIN,发送给客户机包ACK
  3. 第三次挥手:服务器向客户机发送包FIN
  4. 第四次挥手:客户机确认服务器的包FIN+ACK,发送给服务器ACK,完成挥手

为何要实现4次握手呢?

其实这是为了关闭双方的资源,和三次握手并不同,三次握手的主体是客户端,而四次挥手的主体是二者,由于二者都须要确保本身的资源完成关闭。

如何实现数据的完整性

这是和UDP最大的区别,UDP毕竟是一个容错的传输协议。

看看TCP的包头结构,几个地方可以引发咱们的注意,那就是检验和确认号序号,这确实是他的三个校验的方式。

可是还有问题,若是我发的包中途丢失,那该怎么办呢?TCP给出的解决方案就是计时器,还有重传机制。(重传机制在上方的三个校验方式中一样获得了应用)

UDP/用户数据报协议

TCP的包头相比就简单了许多,他的校验方式也确实只存在一种检查和的确认。

为何须要这样的协议?

想来这是绝大多数人思考过的问题,其实缘由有下面几个:

  1. 应用场景的不一样。 相似语音通话,视频通话中都全都是用了UDP协议。举一个很简单的例子,打语音电话的时候,你会由于别人的一个字缺失而失去对整句话意思的理解吗?更况且,在语音电话的时候,咱们没听清楚的事情是能够,从新再询问一遍的。也就是说咱们的沟通之间是容错的。
  2. 传输效率的问题。 若是使用的是TCP协议,那么出现的问题就在于他的流量控制和拥塞控制,他的传输速率会受到网络环境改变的冲击而随之改变。可是UDP不同,他没有三次握手,四次挥手,它只是一股脑的只管发,这个带宽已经足够大的时代,彻底是可以承受起这样的资源占用的,而效率上也获得了保障。
  3. 使用感觉。 这是效率问题做为铺垫的引伸,人的卡顿感是有必定的范围的,若是使用TCP协议却由于网络波动改变数据流量大小,那人们的体验感会立刻降低,并且数据包到达的速度不理想,能够一个“开”的语音被拆成了“k”,“ai”,瞬间失去语义。而后还要可能“k”到了,“ai”丢了,重传等到了3秒之后,那更完了。

总结

其实TCP协议还有流量控制和拥塞控制的特色,分别基于的是滑动窗口机制还有AIMD的算法。他的变化依据最后都来自于波动的网络中,数据包的来回传递时间、丢包率等等。

另外TCPUDP协议的使用我也说了是考虑使用场景。TCP协议的应用场景其实更多,咱们上网下载个视频啊,发消息都是使用的TCP协议,由于这些数据咱们是须要保证数据的完整性的。

以上就是个人学习成果,若是有什么我没有思考到的地方或是文章内存在错误,欢迎与我分享。


相关文章推荐:

Android必知必会的四大组件 -- ContentProvider篇

Android必知必会的四大组件 -- Activity篇

Android必知必会的四大组件 -- Broadcast Receiver篇

相关文章
相关标签/搜索