TCP是如何保证数据完整传输到浏览器的?

8/31/2022 IPUDPTCP

# 前言

衡量Web性能有一个指标FP(First Paint):页面加载到首次开始绘制的时长。该指标直接影响用户的跳出率,更快的页面响应意味着更多的PV、更高的转化率。
网络加载速度是影响FP的一个重要指标。
HTTP、WebSocket,它们都是基于TCP/IP的。

# 互联网 -- 一套理念和协议组成的体系架构

协议是一套众所周知的规则和标准,如果各方都同意使用,那么通信将变得毫无障碍。
互联网传输是通过数据包进程传输的,一个大的文件数据一般会被拆分成很多的数据包来进行传输,并非一个大的文件一次性传输的,但是数据包在传输的过程中会有很大概率会丢失或出错。

# IP -- 传输数据包

数据包要在互联网上进行传输,就需要符合网际协议(IP -- Internet Protocol)标准。只要是在互联网上在线的设备都有唯一的地址
计算机的地址就称为IP地址,访问网站实际是一台计算机向另一台计算机请求数据信息。
A主机想把数据包发送给B主机,传输之前,数据包会被附加上B主机的IP地址信息,另外也会附加上A主机本身的IP地址,有了这些信息,B主机才能回复信息给A主机,附加的信息会被放到IP头(IP数据包开头信息)的数据结构中
IP头:

  • IP版本
  • 源IP地址
  • 目标IP地址
  • 有效时间 IP传输数据包

# UDP -- 指定数据包送达的应用程序

基于IP之上开发的能和应用程序通讯的协议,用户数据包协议(User Datagram Protocol)
UDP重要的关键是端口号,每个想要访问网络的程序都是需要绑定一个端口号的。通过端口号UDP就能把指定的数据包发送给指定的程序,类似于IP根据IP地址信息把数据包发送给指定的电脑主机,所以端口号会被放到UDP头中,UDP头 + 原始数据包组合成新的UDP数据包
UDP头一般包含:

  • 源端口号
  • 目标端口号

为了支持UDP协议,IP地址传输的三层结构扩充为四层结构,在网络层和上层之间增加传输层
优点:UDP传输速度快,UDP一般应用在一些关注速度,对于数据完整性要求不严格的领域(在线视频、互动游戏)。
缺点:UDP不能保证数据可靠性,使用UDP发送数据时候,有很多因素导致数据包出错,虽然UDP可以校验数据是否正确,但是对于错误的数据包UDP并不提供重发机制,只是丢弃当前的包,并且UDP在发送之后也无法知道是否到达目标主机。 UDP传输数据

# TCP -- 确保数据包完整送达应用程序

对于浏览器or邮件此类要求数据传输可靠性(reliability)的应用,如果使用UDP传输会存在两个问题:

  • 数据包传输过程中容易丢失
  • 大文件被拆分成很多小的数据包进行传输,小的数据包经过不同的路由,在不同的时间点到达目标主机,UDP协议是无法知道组装这些数据包还原完整的文件

所以引入了TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP机制:

  • 对于数据包丢失,TCP支持重传机制
  • TCP引入数据包排序机制,确保乱序的数据包能组装还原成完整的文件

TCP头:

  • 本机端口号
  • 目标端口号
  • 排序序列号(便于接收端通过序号重排数据包) TCP传输数据

# TCP连接生命周期

  1. 建立连接
    通过三次握手,客户端服务端建立连接。
    TCP提供面向连接的通信传输。面向连接是指在数据传输之前先做好两端之间连接的准备工作。
    三次握手是指建立一个TCP连接时,客户端服务端总共需发送三个数据包来确认连接建立
  2. 传输数据
    重发机制:接受端需要对每个数据包进行确认操作,接受端接收到数据包后,需要发送”确认数据包”给发送端。当发送端发送一个数据包,规定时间内没有接收到接收端反馈的确认消息,则判断数据丢失,触发发送端重发机制。
    序号排序:一个大文件传输过程被拆分成很多数据包,数据包到达接收端后,接收端按照TCP头中的序号进行排序,确保组装成完整的数据。
  3. 断开连接
    四次挥手确保双方断开连接。

TCP为了保证数据传输的可靠性,牺牲了数据包的传输速度,因为“三次握手”和“数据包校验机制”等把传输过程中的数据包的数量提高了一倍。 TCP连接流程

# 总结

  • 互联网通过数据包来传输信息,数据包在传输过程容易丢失出错
  • IP负责把数据包送达给目标主机
  • UDP负责把数据包送达具体应用
  • TCP确保了数据传输的完整性,牺牲了数据包传输速度
  • TCP连接三个阶段:建立、传输、断开
Last Updated: 8/31/2022, 6:54:23 PM