鱼C论坛

 找回密码
 立即注册
查看: 1149|回复: 2

[庖丁解牛] 06 - 把数据"完整"送达应用程序的TCP

[复制链接]
发表于 2020-2-8 10:30:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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

游客,如果您要查看本帖隐藏内容请回复

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

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

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

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

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

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

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

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

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

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

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

1567653467803tcpip-tcpstatus_.png


首先,建立连接阶段

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

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

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

所谓三次握手是指:

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


其次,传输数据阶段

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

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

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

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

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

最后,断开连接阶段

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

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

TCP 为了保证数据传输的可靠性,牺牲了数据包的传输速度。

因为“三次握手”和“数据包校验机制”等把传输过程中的数据包的数量提高了一倍。

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




如果有收获,别忘了评分


                               
登录/注册后可看大图


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



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-3 14:05:03 | 显示全部楼层
感谢楼主无私奉献
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 15:14:06 | 显示全部楼层
丢包
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表