TCP中的流式传输

流式协议

tcp是一种流式协议

  • 发送端应用层调用send函数完成数据发送以后,数据并没有真正从网络上发送出去,只是从应用程序拷贝到了操作系统内核协议栈。
  • 真正发送的时刻和数据大小,取决于发送窗口、拥塞窗口以及当前发送缓冲区大小等。
  • eg:当我们发送A和B字符串,这两个字符串可以在同一个分组中被发送出去,也可以分为多个分组发送出去。
  • 接收端会根据序号进行拼接。如果发送过程中有TCP分组丢失,后续的分组陆续到达,则TCP协议栈会缓存后续的分组,直到前面丢失的分组到达。

网络字节序

大端字节序:高位在低地址,符合我们日常书写
eg:0x0201
在这里插入图片描述
注:如果是传输ASCII码,因为ASCII码是8位的字节组成的,因此不会涉及到大端序和小端序,直接对字节流做解码即可。

报文粘包问题

原因

解析报文时候,如果确定报文的边界很重要,不然会导致解析失败

做法

报文长度

发送端预先把报文长度发给接收端
在这里插入图片描述

特殊字符

利用特殊的字符作为边界

例子:http报文格式,通过设置回车符、换行符作为HTTP报文协议的边界
在这里插入图片描述
思考:用特殊字符作为结尾,进行报文解析的时候,需要对换行符和换行回车符都做处理?
因为Unix下文件的结尾只有\n,但windows下文件的结尾是\r\n,服务端收到报文,不知道是来自哪种系统的,因此都要做处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值