本文是参考【图解TCP/IP】TCP(Transmission Control Protocol)是传输控制协议,其作用于传输层,是一种提供了面向连接通信服务的协议
看TCP的英文全称就知道,其主要作用就是传输 、控制,传输的是数据,控制的是在传输过程中丢包后的重发 、分包乱序后的有序重组 、控制数据传输的速率防止网络拥塞等
【图解TCP的通信机制】这也是我们口中一直说的TCP是一种可靠的传输协议的原因 。本文就将对TCP的作用过程以及一些机制进行讲解
TCP的通信机制
- 一、TCP连接管理
- 二、分段数据发送
- 三、重发控制
- 四、滑动窗口控制
- 五、滑动窗口的重发控制
- 六、流控制
- 七、拥塞控制
- 八、结束语
在建立连接之前,需要做一些准备,为了确保通信两端是否可以进行正常通信,发送端会通过TCP的首部发送一个SYN包作为建立连接的请求并等待接收端确认应答 。如果接收端确认应答并返回一个ACK包,则表示接收端同意与发送端进行通信,然后发送端再次发送一个ACK包给接收端,表示已收到你的同意通信的消息了,此后两端就可以正常通信了;若接收端没有返回给发送端一个确认应答的ACK包,则表示不同意与发送端进行通信,那么两端自然无法进行后续的通信了
两端若在通信完成以后肯定需要断开通信,同样也需要两端互发包来确认是否要断开通信 。比如,发送端先发送一个FIN包给接收端,告知想要断开连接,然后接收端可以返回给发送端一个ACK包表示同意你断开连接的请求,紧接着接收端也向发送端发送了一个FIN包,表示其也想断开连接的意愿,发送端在接收到该包后随即返回给接收端一个ACK包表示我也同意你断开连接,这样,两端就断开连接了
总结一下,一次完整的TCP连接的建立与断开至少需要来回发送7个包,其中建立连接需要发3个包,断开连接需要发4个包
我们来看一下完整的通信过程简图

文章插图
这就是大家常说的三次握手,四次挥手的过程
如果不好理解上面的建立、断开连接过程,这里我再给大家举一个小小的例子
发送端与接收端通信,就好比我们日常生活中两个人打电话,例如现在A给B打电话
- A问B:喂?你是B吗?
- B回答A:我是B呀,你是A吗?
- A回答B:对的,我是A
那么当A和B聊完天,准备挂电话了
- A对B说:我的事说完了,那么没啥事我就挂电话了哈
- B回答A:好的
- B又对A补充了一句:我也没啥事了,那我也挂了哈
- A回答B:好的
二、分段数据发送TCP不是拿到一整个包就直接原封不动地传给接收端的,因为若这样做,即使是发生了数据丢失,也不知道到底丢失了哪部分的数据,因此其采用的就是将数据分段发送的方式
这里先说明一点,不光建立和断开连接时接收端需要向发送端发送请求应答,在数据交互时也是需要的
例如有一个数据包,我们可以将其按顺序给每一个字节都标上一个序号,然后我们假设每次发送1000个序号区间的数据给接收端,所以第一次发送的是 序号 1 ~ 1000 的数据,接收端接收到了以后会返回给发送端一个请求应答,告知发送端下一次请发送 序号 1001 ~ 2000 的数据过来,过程如图所示

文章插图
上面我们假设的是每次发送1000个***区间的单位,而实际过程中,却不一定是这个值 。
在前面的学习中,我们得知数据在数据链路层中传输会收到MTU(最大传输单元)的影响,若数据大于该值,IP则会被分片处理,因此我们尽可能地不让这种事情发生,那么就要让传输的每段数据大小小于该通信线路上最小的MTU,该值称为MSS(最大消息长度)
推荐阅读
- 5个完全免费的优质软件
- Python 实现定时任务的八种方案
- Android开发中关于使用权限的常见错误
- 还在从零开始搭建项目?推荐一款高颜值的前后端分离脚手架
- 32位操作系统和64位操作系统的区别
- 一湖秋水什么意思?一湾秋水的意思
- 中秋节有哪些美好的诗句?关于中秋的诗句 最美中秋诗词佳句
- 一句形容动漫的诗句?关于动漫的诗
- 21世纪外科女医生穿越回古代,被迫嫁给残废的王爷?女外科医生穿越到古代治好王爷
- 两地分离的诗句?两人相隔两地的诗句
