共计 2634 个字符,预计需要花费 7 分钟才能阅读完成。
本篇文章是总结一下最近所学, 对于 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 保障了数据的残缺传输, 他分为三个阶段, 三次握手在第一个阶段。