TCP 协议是如何保证数据完整传输的
- 如果要想把一个数据包从主机 A 发送给主机 B,那么在传输之前,数据包上会被附加上主机 B 的 IP 地址信息,这样在传输过程中才能正确寻址。额外地,数据包上还会附加上主机A 本身的 IP 地址,有了这些信息主机 B 才可以回复信息给主机 A。这些附加的信息会被装进一个叫 IP 头的数据结构里。IP 头是 IP 数据包开头的信息,包含 IP 版本、源 IP 地址、目标 IP 地址、生存时间等信息。
- IP通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序。和 IP 头一样,端口号会被装进 UDP 头里面,UDP 头再和原始数据包合并组成新的UDP 数据包。UDP 头中包含目的端口,还有源端口号等信息。
- 互联网中的数据是通过数据包来传输的。如果发送的数据很大,那么该数据就会被拆分为很多小数据包来传输。UDP 协议并不知道如何组装这些数据包,从而把这些数据包还原成完整的文件。于是有了TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。对于数据包丢失的情况,TCP 提供重传机制,TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。TCP 头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包。
- 一个完整的 TCP 连接的生命周期包括了建立连接、传输数据、断开连接”三个阶段。在传输数据阶段,接收端需要对每个数据包进行确认操作。所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认消息,则判断为数据包丢失,并触发发送端的重发机制。同样,一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。
HTTP请求
- HTTP 是一种允许浏览器向服务器获取资源的协议,建立在TCP协议之上。
- 如果你在浏览器地址栏里键入极客时间网站的地址:http://time.geekbang.org/index.html, 那么接下来,浏览器会完成哪些动作呢?
(1)构建请求:首先,浏览器构建请求行信息(如下所示),构建好后,浏览器准备发起网络请求。
|