TCP粘包、服务器TIME-WAIT过多的问题

本文详细探讨了TCP协议中的粘包问题及其解决方案,包括定长接收、包头添加长度和特殊符号分隔。同时,讨论了服务端是否可以发起四次挥手的情况,以及TIME-WAIT状态过多时可能导致的服务器资源消耗问题,提出了通过调整内核参数或增加服务器数量来缓解问题的策略。
摘要由CSDN通过智能技术生成

一、粘包

TCP是基于字节流传输的,只维护发送出去多少,确认了多少,没有维护消息与消息之间的边界,因而可能导致粘包和拆包问题。

粘包问题分为两种:

  1. 发送方产生粘包

    采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态,双方在连接不断开的情况下,可以一直传输数据。(一次连接发一次数据不存在粘包)
    但当发送的数据包过于小,那么 TCP 协议默认的会将这些较小的数据包进行合并发送(缓冲区数据发送堆压);(如果过大,取的时候纷乱了,就是拆包。)
    这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。

  2. 接收方产生粘包

    接收方采用 TCP 协议接收数据时的过程是这样的:数据到运输层,TCP 协议处理是将其放置接收缓冲区,然后由应用层来主动获取);这时会出现一个问题,应用层程序不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等我们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)(同理拆包也会发生)

tips:

TCP的短连接一般只会在 client/serv

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值