不二如是 发表于 2020-2-8 10:30:06

06 - 把数据"完整"送达应用程序的TCP

本帖最后由 不二如是 于 2020-2-8 11:37 编辑

上一讲说完了 UDP,这次来说 TCP 。

UDP 虽然传输速度快,但不能保证数据可靠性~

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

**** Hidden Message *****
基于这两个问题,我们引入 TCP 了。

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

相对于 UDP,TCP 有下面两个特点:


[*]对于数据包丢失的情况,TCP 提供重传机制
[*]TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件

和 UDP 头一样,TCP 头除了包含了目标端口和本机端口号外。

还提供了用于排序的序列号,以便接收端通过序号来重排数据包。

传输模型和上一讲中 UDP 的一样,只不过将 UDP 换为 TCP 。

下面我们再看下完整的 TCP 连接过程。

通过这个过程你可以明白 TCP 是如何保证重传机制和数据包的排序功能的。

给大家一张完整生命周期图。

一个完整的 TCP 连接的生命周期包括了“建立连接”,“传输数据”和“断开连接”三个阶段。



首先,建立连接阶段

这个阶段是通过“三次握手”来建立客户端和服务器之间的连接。

TCP 提供面向连接的通信传输。

面向连接是指在数据通信开始之前先做好两端之间的准备工作。

所谓三次握手是指:

在建立一个 TCP 连接时,客户端和服务器总共要发送三个数据包以确认连接的建立。

其次,传输数据阶段

在该阶段,接收端需要对每个数据包进行确认操作,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端。

所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认消息。

则判断为数据包丢失,并触发发送端的重发机制。

同样,一个大的文件在传输过程中会被拆分成很多小的数据包。

这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。

最后,断开连接阶段

数据传输完毕之后,就要终止连接了,涉及到最后一个阶段“四次挥手”来保证双方都能断开连接。

到这里鱼油应该就明白了:

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

本讲了解 TCP 协议,是为了下一讲开始介绍的 HTTP~



如果有收获,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

如果想看更多,请订阅 淘专辑(传送门)(不喜欢更要订阅{:10_297:} )


1220305267 发表于 2020-4-3 14:05:03

感谢楼主无私奉献

Ruide 发表于 2020-5-20 15:14:06

丢包
页: [1]
查看完整版本: 06 - 把数据"完整"送达应用程序的TCP