TCP协议之面向字节流

1.面向字节流:创建一个TCP的socket,会在网络中同时创建一个发送缓冲区和接受缓冲区。刚开始会将数据写入发送缓冲区。若数据太短,则在发送缓冲区中等待,等到合适时机会将合适大小的数据以字节流的形式发送出去;若数据太长,则进行拆分,然后发送。由于TCP是全双工的,所以读写数据时没有限制,可以一次性接受所有数据;也可以每次接收一点,分多次接收。TCP面向字节流的特点是:传输灵活...
摘要由CSDN通过智能技术生成

1.面向字节流:

  • 创建一个TCP的socket,会在网络中同时创建一个发送缓冲区和接受缓冲区。

  • 刚开始会将数据写入发送缓冲区。若数据太短,则在发送缓冲区中等待,等到合适时机会将合适大小的数据以字节流的形式发送出去;若数据太长,则进行拆分,然后发送。

  • 由于TCP是全双工的,所以读写数据时没有限制,可以一次性接受所有数据;也可以每次接收一点,分多次接收。

    TCP面向字节流的特点是:传输灵活,但是存在粘包问题。

2.粘包问题:

  • 什么是粘包问题?

    TCP传输的数据在发送缓冲区或接收缓冲区中堆积,因为TCP收发的灵活性,可能导致多条数据被当做一条数据接收。简单来说,就是两条数据的黏连。

  • 本质原因:TCP在传输层对数据的格式并不关心,所以每条数据之间没有明显的边界区分,这样会造成粘包问题。

  • 解决方案:需要用户在应用层对数据进行边界管理

    1. 特殊字符间隔:对于定长数据,在包与包之间采用明显的特殊字符间隔,HTTP就采用这样的方法。
    2. 定长数据:每次按照数据长度大小读即可。
    3. 对于不定长数据,可以在应用层协议头中显式声明数据长度,这是最佳的方案,UDP协议就采用这种方案。

3.TCP连接管理中的保活机制:

  • 若是通信双方,长时间(7200s)没有数据往来,则会向对方发送一个保活探测包,要求对方对这个包进行回复;
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值