粘包/拆包问题一直都存在,只是到TCP就拆不动了

科技资讯 投稿 5200 0 评论

粘包/拆包问题一直都存在,只是到TCP就拆不动了

    OSI open-system-Interconnection
  • TCP/IP 5层协议栈
    • 应用层和操作系统的边界是 系统调用,对应到网络编程是socket api
  • TCP/UDP 概况
  • TCP粘包问题
  • TCP/IP报头深思

OSI开放系统互联

OSI实际并没有落地,TCP/IP 5层协议栈是目前主流的落地实现。

TCP/IP 5层协议栈

不管是OSI还是TCP/IP5层协议栈,均会出现应用程序和操作系统边界(代码执行在用户态/内核态。

系统调用system call,socket api便是TCP/IP协议栈中应用层的网络编程接口。

TCP/UDP概览

    Transmission Control Protocol是面向连接的,可靠的,基于字节的、双向流式传输层协议。

  • USer Datagram Protocol面向消息的传输服务,传输的数据是有边界的。
    区别:

UDP: 想法就发,不用三次握手建立连接。

建立TCP连接之后,才能做http请求、sql请求,tcp连接很耗时,故服务器都存在连接池化机制。

http请求-响应模型,tcp是双向通信流。

TCP粘包/拆包

数据链路层,网络层的粘包和拆包问题都由协议自行处理了,我们日常的网络应用开发都在对接传输层,故面临的粘包问题指的是TCP粘包。


旁白

梳理了整个TCP/IP协议栈的流程,结合TCP报头/IP报头,我们就知道粘包、拆包一直都存在,只是拆到TCP层的时候,我们没有办法区分应用层断续发送的请求/调用,这就是我们口口相传的TCP粘包/拆包问题,需要应用层用特殊分隔符或者长度解析。

编程笔记 » 粘包/拆包问题一直都存在,只是到TCP就拆不动了

赞同 (22) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽