TCP协议之面向字节流

TCP协议以字节流方式进行传输,可能导致粘包问题。该问题因TCP对数据格式不关心,使得多条数据边界模糊。解决粘包可通过应用层协议设计,如特殊字符间隔、定长数据或声明数据长度。此外,TCP的保活机制确保长时间无数据交换的连接仍能检测其状态。TCP常用于HTTP/HTTPS等可靠传输场景,而UDP适用于无连接、高速传输场景。UDP可通过类似TCP的方法实现可靠传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.面向字节流:

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

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

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

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

2.粘包问题:

  • 什么是粘包问题?

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

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

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

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

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

  • 若是通信双方,长时间(7200s)没有数据往来,则会向对方发送一个保活探测包,要求对方对这个包进行回复;
  • 若收到回复则认为连接正常;
  • 若每隔(75s)发送一个保活包,连续发送多次(9次)都没有得到回复,则断开连接。

4.基于TCP的应用层协议有HTTP/HTTPS/SSH等。

5.TCP与UCP的对比:

  • TCP:面向连接、可靠传输、面向字节流
    应用于文件传输以及重要状态更新等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值