目录
6)拥塞控制(也是滑动窗口的延伸,也就是限制滑动窗口发送的速率)
1)确认应答
可靠性:简单来说就是发送方发出去数据之后,能够知道对方有没有收到~~
保证可靠传输的核心机制,关键就是接受方收到消息之后,给发送方,返回一个应答报文(ACK),表示自己已经收到了
举个例子说明:
如果数据就是按照这样的方式传递没有什么问题,但如果收到的消息先是“滚”,其次才是“好呀好呀”,这是就会出现“误会”
之所以会出现这种问题,是因为网络上,数据接收的顺序,不一定和发送的顺序完全一致!!,存在后发先到的情况,因此这时我们只要对消息进行编码就可以解决,如下:
Tcp的针对消息的序号,并不是按照“消息条数”来进行编号的,而是按照字节来编号
2)超时重传
相当于对确认应答进行了补充,确认应答是网络一切正常的时候,通过ACK通知发送方我收到了,如果出现了丢包的情况,超时重传机制就起到了效果
出现丢包的两种情况:
(1)发出去的消息丢了
当我发出消息后,就担心这个消息是不是丢了,我就在等这个ACK,如果确实发丢了,对方直接就没有接收到,我这里肯定就没法收到ACK
此时超时重传就起到了作用,因为我没有收到ACK,我就认为我的消息可能发丢了,那么就会再一次发送
(2)另一种情况就是ACK丢了,虽然对方收到了,但是我没有收到ACK
由于我没法区分到底是因为那种原因导致的没有收到ACK,所以就认为对方压根没有收到,再重新发送一次,这里的重发不是立即发送,而是等待一会再重发
如果是第二种原因,那么对方会不会收到重复消息?当然不会。
因为:Tcp内部有一个去重操作
接受方收到的数据会先放到操作系统内核的“接收缓冲区”中
接收缓冲区可以视为是一个内存空间,并也可以视为一个“阻塞队列”
收到的数据Tcp会根据序号,来检查数据是否在缓冲区中,如果存在就直接丢弃,不存在就放进去,从而保证程序调用socket api拿到的数据是不重复的
注意:重传如果失败,可能还会继续尝试,但也不会无休止尝试....
基于上述两种机制,TCP的可靠性就得了保证
3)连接管理机制
点击以下链接查看
https://blog.csdn.net/qq_64421953/article/details/124156951?spm=1001.2014.3001.5502
4)滑动窗口
滑动窗口存在的意义就是在保证可靠性的前提下,尽量提高传输效率
滑动窗口的本质就是在“批量的发送数据”,一次发一波数据,然后一起