Tcp协议的相关特性

目录

1)确认应答

2)超时重传

3)连接管理机制

4)滑动窗口

 5)流量控制(是滑动窗口的延伸,目的是为了保证可靠性)

6)拥塞控制(也是滑动窗口的延伸,也就是限制滑动窗口发送的速率)

 7)延时应答(相当于流量控制的延伸)

8)捎带应答

9)面向字节流  -->粘包问题

10)TCP异常情况

如何基于UDP协议实现可靠传输?

啥样的场景中适合使用TCP,啥用的场景中适合使用UDP?


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)滑动窗口

滑动窗口存在的意义就是在保证可靠性的前提下,尽量提高传输效率

滑动窗口的本质就是在“批量的发送数据”,一次发一波数据,然后一起

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值