Java网络编程之TCP协议核心机制(三)

题外话

最近学习内容很多嗷

正题

延时应答机制

当客户端发送数据到服务器时,服务器不会立即返回ACK,而是等待一会再返回ACK

这段等待时间应用程序可能会消化掉接收缓冲区中的数据,当服务器返回ACK时,就会携带此时接收缓冲区大小的信息

当客户端下次再发送数据的时候就可以发送的大一些

延时时间的两种策略

1.按照一定的时间指定延时

2.根据收到的数据量延时

上述两个延时策略是结合使用的

捎带应答机制

建立在延时应答机制的基础上,提升效率的方式

具体如下图

粘包问题

在字节流读写数据的场景中,会涉及到一个非常关键的问题,粘包问题

如上图

当客户端向服务器发送给多个数据到内存缓冲区,我们无法知道哪个数据到哪里截止,这就是粘包问题

粘包问题解决方法

1.使用分隔符

定义任意字符都可以,只要字符在请求数据中是不存在的

2.约定包的长度

当我们发送数据的时候,可以将数据长度放在数据前,这样就可以正确读取数据

关于异常情况及处理方法

1.传输过程中,其中一个进程崩溃(结束)了

操作系统可以回收释放对应的PCB(进程控制块),相当于调用close

2.某个主机关机

操作系统会强制结束所有用户进程再进入关机,进程结束后会进行四次挥手断开连接的

3.某个主机电源断电或者网线断开

服务器断电或者网线带哪里,客户端接收不到ACK数据包,就会触发超时重传,重传几次会发送复位报文(RST)

没有响应之后客户端会单方面删除服务器信息

客户端断电或者网线断开,服务器一段时间接收不到客户端发送的数据,就会触发心跳包,服务器会周期性给客户端发送心跳包

正常情况下客户端会给服务器返回ack,但是客户端断电了,就不会返回任何数据

小结

至此,所有的TCP核心机制已经结束了

1.确认应答机制

2.超时重传机制

3.连接管理机制{三次握手,四次挥手}

4.滑动窗口机制

5.流量控制机制

6.拥塞控制机制

7.延时应答机制

8.捎带应答机制

9.战报问题

10异常情况及处理方法

现在加入粉丝团以后就是老粉了,麻烦家人们给个三连(点赞关注收藏!!!)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值