当前位置:   article > 正文

如何理解TCP的面向字节流和UDP的面向报文?_tcp面向字节流,udp面向报文

tcp面向字节流,udp面向报文

如何理解TCP的面向字节流和UDP的面向报文?

先来说说为什么 UDP 是面向报文

当用户消息通过 UDP 协议传输时,操作系统不会对消息进行拆分,在组装好 UDP 头部后就交给网络层来处理,所以发出去的 UDP 报文中的数据部分就是完整的用户消息,也就是每个 UDP 报文就是一个用户消息的边界,这样接收方在接收到 UDP 报文后,读一个 UDP 报文就能读取到完整的用户消息

总结一句话:使用UDP协议每次就发送一个报文表示完整数据

再来说说为什么 TCP 是面向字节流

当用户消息通过 TCP 协议传输时,消息可能会被操作系统分组成多个的 TCP 报文,也就是一个完整的用户消息被拆分成多个 TCP 报文进行传输。
这时,接收方的程序如果不知道发送方发送的消息的长度,也就是不知道消息的边界时,是无法读出一个有效的用户消息的,因为用户消息被拆分成多个 TCP 报文后,并不能像 UDP 那样,一个 UDP 报文就能代表一个完整的用户消息。

我们不能认为一个用户消息对应一个 TCP 报文,正因为这样,所以 TCP 是面向字节流的协议

当两个消息的某个部分内容被分到同一个 TCP 报文时,就是我们常说的 TCP 粘包问题,这时接收方不知道消息的边界的话,是无法读出有效的消息

问题的解决交给应用层去处理

如何解决粘包呢?

  • 固定长度的消息
  • 特殊字符作为边界
  • 自定义消息结果
    在Netty中提供了这三种对于的Handler来解决粘包半包的问题
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/588789
推荐阅读
相关标签
  

闽ICP备14008679号