目录
TCP的通信机制的核心特性
|----------------|-------------------|
| TCP的通信机制最核心的特性是可靠传输。 ||
| TCP至少通过以下机制来保证传输的可靠性 ,在保证可靠性的同时也采取一些机制来提升传输效率: ||
| <1> 确认应答 | <6> 阻塞控制 |
| <2> 超时重传 | <7> 延时应答 |
| <3> 连接管理 | <8> 捎带应答 |
| <4> 滑动窗口 | <9> 面向字节流 |
| <5> 流量控制 | <10> 异常情况处理 |
一、确认应答
|--------------------------------------------------|
| 确认应答是TCP最核心的机制,以确认应答为核心,辅助其他机制,使得TCP完成了可靠传输。 |
1)什么是确认应答?
|-----------------------------------------------------------------------------|
| 发送端将数据发送给接收端,接收端成功收到数据后(即确认),会给发送端返回一个应答报文(即应答)。应答报文的作用是让发送端知道数据是否成功传输。 |
2)如何"确认"?
|-------------------------------------------------------------------|
| <1> 校验和:用于确认接收的数据是否在传输的过程中发生了改变。常使用CRC或MD5等校验方式。 |
| <2> 序号:序号是一系列具有大小关系的整数,描述了数据的先后顺序。接收端需要确认收到的数据包的序号是否符合数据序列。 |
3)如何"应答"?
|-------------------------------------------------------------------------------------|
| <1> "ACK"标志位:使用应答报文进行应答,应答报文被称为ACK(Acknowledge),如果该数据包是应答报文,标志位"ACK"将为1,否则为0。 |
| <2> 确认序号:应答报文中将包含"确认序号"。确认序号的作用在于告知发送端,接收端已经收到了哪些数据和接下来需要发送端发送的下一系列数据的起始位置。 |
二、超时重传
1)丢包的概念
|----------------------------------------------------------------|
| 丢包是指,数据包在网络传输的过程中没有到达接收端;或者虽然到达了接收端,却因为传输过程中的干扰使得接收到的数据是错误的数据。 |
2)什么是超时重传?
|---------------------------------------------------------------|
| 超时重传是指,在发送端发送数据后没有接收到接收端的应答报文,在等待一段时间后(即超时)就会重新发送该数据(重传)。 |
| 重传可以大幅提升数据传输的可靠性。 |
3)两种触发超时重传的情况
|----------------------------------------|
| 上述两种情况,归根结底是由于发送端没有收到应答报文才触发了超时重传。 |
4)等待多久算超时?
|------------------------------------------------------------|
| 初始等待时间,不同的系统设定的时间是不一样的,而且这个时间是可以配置的。 |
| TCP为了保证无论在任何环境下都能较高性能的通信,会动态计算最大超时时间。每一次超时后,等待的时间都会变长。 |
5)重复的数据如何处理?
|---------------------------------------------------------------------------------------|
| 在上述情况2,返回的ACK丢包的情况下。接收端会多次收到重复的数据。 |
| TCP通过"序号"这一属性来识别哪些包是重复的包,已经接收过的包的"序号"会被存放在"接收缓冲区"中,如果接收端发现当前发送的数据已经存在,会直接丢弃这些数据包。 |
| "接收缓冲区"不仅能进行去重,还能进行重排序,确保读取的顺序和发送的顺序是一致的。 |
阅读指针 -> 《 TCP 的通信机制(二) -- 连接管理(三次握手和四次挥手) 》