4.6 TCP面向字节流

TCP 是面向字节流的协议,UDP 是面向报文的协议

操作系统对 TCP 和 UDP 协议的发送方的机制不同,也就是问题原因在发送方。

UDP面向报文协议:

操作系统不会对UDP协议传输的消息进行拆分,在组装好UDP头部后就交给网络层处理,每个UDP报文就是一个用户消息边界。

操作系统接收到UDP报文后放入队列,队列每一个元素都是一个UDP报文

TCP面向字节流协议:

TCP协议传输时,一个完整的用户消息被拆分成多个 TCP 报文进行传输。我们不能认为每次 send 调用发送的数据,都会作为一个整体完整地消息被发送出去,至于什么时候真正被发送,取决于发送窗口、拥塞窗口以及当前发送缓冲区的大小等条件不能认为一个用户消息对应一个 TCP 报文,正因为这样,所以 TCP 是面向字节流的协议

如何解决粘包?

不知道一个用户消息的边界在哪

固定长度的消息

即每个用户消息都是固定长度的,比如规定一个消息的长度是 64 个字节,当接收方接满 64 个字节,就认为这个内容是一个完整且有效的消息。

特殊字符作为边界

两个用户消息之间插入一个特殊的字符串,这样接收方在接收数据时,读到了这个特殊字符,就把认为已经读完一个完整的消息。

自定义消息结构

我们可以自定义一个消息结构,由包头和数据组成,其中包头包是固定大小的,而且包头里有一个字段来说明紧随其后的数据有多大。

相关推荐
珹洺5 分钟前
计算机网络:(八)网络层(中)IP层转发分组的过程与网际控制报文协议 ICMP
tcp/ip·计算机网络·智能路由器
cat_with_cat1 小时前
Linux网络:UDP socket创建流程与简单通信
linux·网络·udp
水果里面有苹果1 小时前
17-C#的socket通信TCP-1
开发语言·tcp/ip·c#
不绝1911 小时前
怪物机制分析(有限状态机、编辑器可视化、巡逻机制)
网络·游戏·unity·游戏引擎
DemonAvenger1 小时前
Go中UDP编程:实战指南与使用场景
网络协议·架构·go
.YYY1 小时前
网络--初级
网络·计算机网络
2501_916007471 小时前
iOS 性能测试工具全流程:主流工具实战对比与适用场景
websocket·tcp/ip·http·网络安全·https·udp
阿维的博客日记2 小时前
HTTP/3.0的连接迁移使用连接ID来标识连接为什么可以做到连接不会中断
网络·网络协议·http
半路_出家ren2 小时前
第8章:应用层协议HTTP、SDN软件定义网络、组播技术、QoS
网络·网络协议·http·mpls·qos·sdn软件定义网络·组播技术
teeeeeeemo2 小时前
http和https的区别
开发语言·网络·笔记·网络协议·http·https