本篇文章是总结一下最近所学, 对于TCP工作流程的一篇文章
带着如下思考咱们来走进TCP: TCP是如何保障页面文件能被残缺送达浏览器?
首先咱们晓得掂量Web页面性能的时候有一个重要指标,FP(First Paint), 他是指从页面加载到首次开始绘制的时长。咱们一看就晓得这个指标的重要性, 这齐全是关联到用户在应用的时候会不会骂你。影响FP指标其中一个重要因素是网络加载速度。
雷同的网络环境下, 有的页面关上快, 有的关上慢, 有的视频加载快, 有的加载慢...., 然而不论快慢, 他们都是基于TCP/IP的, 咱们用一个数据包来举例子。
这个一个对于数据包的"旅程"
互联网, 他实际上是一套理念和协定组成的体系架构. 只有各方都批准应用, 能力相互之间进行通信
互联网中的数据都是通过数据包来传输的。如果发送的数据很大, 那这条数据就会被拆分成很多个小数据包来传输
那怎么从一台电脑传输到另一台电脑的???
1. IP: 把数据包送达目标主机
数据包在互联网上进行传输, 就要合乎网际协议(简称IP)规范。咱们大家都晓得, 每一台电脑上都有这样的一串数字,比方: 192.168.1.1, 这就是IP, 他是干嘛用的呢? 他就像是每个电脑的名字, 比方有人叫大V, 那我就晓得了, 有人叫我。计算机就是通过IP地址来进行互相查找的。
计算机的地址叫做IP地址, 拜访任何网站实际上只是你的计算机向另外一台计算机申请信息
如果你的主机A, 想要将数据包发送给我主机B, 在传输之前就要将这个数据包附加上主机B的IP地址信息, 这样就能在万千太主机中找到我的主机B, 当然还须要加上你的主机A自身的IP地址, 有了你的IP地址, 我能力将数据返回给。
为了不便了解, 将网络简略分为三层构造, 如下图:
咱们一起来看一下从主机A到主机B的旅程:
- 下层将含有'阿里巴巴'的数据包交给网络层
- 网络层再将IP头附加到数据包上, 组成新的IP数据包
- 底层通过物理网络将数据包传输给主机
- 数据包被传输到主机B的网络层,在这里主机B拆开数据包的IP头信息, 并将拆开的数据局部交给下层
- 最终, 含有'阿里巴巴'信息的数据包就达到了主机B的下层。
2. UDP: 把数据包送达应用程序
咱们晓得IP是找到了对应的计算机, 然而一台计算机里必定不止一个应用程序, 比方王者光荣和爱奇艺是齐全不同的应用程序, 如何找到对应的应用程序呢?
这就须要基于IP智商开发能和利用打交道的协定, 最常见的是"用户数据包协定", 简称UDP。
UDP外面有啥啊?能有这么大能力...
UDP中一个最重要的信息是端口号, 噢哟?端口号原来有这样的作用哦....。通过端口号就能把指定的数据包发送给指定的应用程序了, 所以IP通过IP地址信息把数据包发送给指定电脑,而UDP通过端口号把数据包分发给正确的程序。
你必定能想想到, 它和IP头一样, 端口号会被装进UDP头外面, UDP再和原始数据包合并组成新的UDP数据包
为了反对UDP协定, 咱们把后面的三层构造扩大成四层构造, 在网络层下面减少了传输层, 如下图:
数据包从主机A到主机B的旅程:
- 下层将含有"阿里巴巴"的数据包交给传输层;
- 传输层会在数据包前加上UDP头, 组成新的UDP数据包, 再将新的UDP数据包交给网络层;
- 网络层再将I碰头加到数据包上, 组成新的IP数据包交给底层;
- 数据包被传输到主机B的网络层, 在这里主机B拆开IP头信息,并将拆开来的数据局部交给传输层;
- 在传输层, 数据包中得UDP头会被拆开, 并依据UDP中所提供的端口号, 把数据交给下层的应用程序;
- 最终, 含有"阿里巴巴"信息的数据包就旅行到了主机B的应用程序这里。
在应用UDP发送数据的时候, 有各种因素会导致数据包出错, 尽管UDP能够校验数据是否正确, 然而对于谬误的数据包, UDP并不会提供重发机制, 只是抛弃以后的包, 而且UDP在发送之后也无奈晓得是否能达到目的地。
尽管UDP不能保证数据的可靠性, 然而传输速度很快。
3. TCP: 把数据残缺的送达应用程序
UDP存在两个问题:
1. 在传输过程中, 容易丢包2. 大文件会被拆分成很多个小的数据包, 接管到的工夫必定是不同的, UDP不晓得如何组装这些数据包
TCP: 我能解决他的问题!!! 哇哦...., 你是谁??? TCP: 我是一种面向连贯的、牢靠的、基于字节流的传输层通信协议。
绝对于UDP, TCP有以下两个特点:
- 对于数据包失落状况, TCP提供重传机制
- TCP引入了数据包排序机制, 用来保障把乱序的数据包组成一个残缺的文件。
和UDP一样, TCP依然蕴含指标端口和本机端口号, 然而还提供了排序的序列号, 以便接收端通过序号来重排数据包。
咱们来看看TCP下, 单个数据包的传输流程:
通过上图, 咱们能够看出TCP和UDP流程差不多, 不同的中央在于, 通过TCP头的信息保障了一块大的数据传输的完整性。
上面咱们再看下残缺的TCP连贯过程, 来看看他是如何保障重传机制和数据包的排序功能的。
一个残缺TCP链接包含了三个阶段:"建设连贯"、"传输数据"、"断开连接"。
首先,建设连贯阶段
- 首先是客户端向服务端发送一个SYN来创立一个被动关上链接, 客户端把这端连贯的序号定为随机数A。意思就是通知服务端: 我要开启连贯了。
- 服务端收到之后为客户端送回一个SYN/ACK。ACK的确认码为A+1,SYN/ACK这个包自身又有一个随机产生的序号B。此时服务端通知客户端: 我筹备好了, 连贯吧。
- 最初, 客户端再次发送一个ACK。此时包的序号被设定为A+1,而ACK的确认码则是B+1。这样就实现了三次握手,进入了连贯创立状态
其次, 传输数据阶段
在该阶段, 接收端须要对每个数据包进行确认操作, 也就是接收端在接管到数据包之后, 须要发送确认数据包给发送端。所以当发送端发送了一个数据包之后, 在规定工夫内没有收到接收端反馈的确认音讯, 则判断为数据包失落, 并触发发送端的重发机制。
一个大文件在传输过程中被拆分成很多小数据包, 接收端会依照TCP头中的序号为其排序, 从而保障组成残缺的数据
最初, 断开连接阶段
数据传输结束之后, 就要终止连贯了, 进入到最初一个阶段"四次挥手"来保障单方都能断开连接。
到这里咱们大家就能明确, TCP为了保障数据传输的可靠性, 就义了数据包的传输速度, 因为"三次握手"和"数据包校验机制"等于把传输过程中的数据包的数量进步一倍。
总结:
- 咱们晓得了互联网中的数据是通过数据包来传输的, 数据包在传输过程中容易失落或出错。
- IP负责找到对应主机
- UDP负责找到对应的具体利用
- TCP保障了数据的残缺传输, 他分为三个阶段, 三次握手在第一个阶段。