阅读 422

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

前言

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

思维导图

网络体系结构模型

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

其实在现实生活中,我们基于的网络都是基于TCP/IP模型建立的,但是这个章节我们主要讨论的是TCP层,你也同样可以叫他传输层。

TCP层

在TCP层中,其实存在两个协议有如下图两种:TCPUDP

TCP/传输控制协议

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

其实知识点很多很多,所以抽出几个重点内容讲解。

三次握手

握手的实现顺序:

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

从第三次握手开始,我们就已经可以带上我们的数据进行传输了。

采用三次握手不是二次握手原因:

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误

简单的说就是:因网络原因,客户端重传了请求建立连接报文,当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篇

关注下面的标签,发现更多相似文章
评论