zoukankan      html  css  js  c++  java
  • TCP封包解包---如有错误,请纠正!

      最近遇见很多的关于TCP中封包解包的数据,在TCP节点之间的信息传递,每次传送的内容是结构体,所以每次在传送的时候,要将结构体中的数据进行封包,然后当一端接收到数据之后,要对接收到的buf参数中的数据进行解包。

      TCP是数据流的传送,数据之间没有分割,UDP是数据包的传送,数据之间有分割,所以UDP是不存在数据的封包解包。

      TCP之所以要进行封包解包:

       例如A->B传送数据,第一段数据是4kb,第二段数据是4kb

       A端可能会由于Nagle算法(TCP总是希望尽可能的发送足够大的数据),在发送第一段数据的时候会将数据存在缓冲区中,然后看还有没有数据要发送,如果这时候第二段数据来了,当达到MSS值时此时会将几段数据一起发送过去。 

       B端也可能由于应用层响应的不及时,所以缓冲区会有几段数据的累计。

       也会因为A端和B端之间的数据包的大小不同,所以当B是一个数据段的发送,但是在A端有收到的数据有几种情况:

        1.A端收到的数据是一个数据的大小,接着会收到第二个数据;

        2.A端收到的数据是第一个数据和第二个数据的部分,接着会收到剩下的第二个数据段;

        3.A端收到的数据是第一个数据的部分,接着会收到剩下的第一个数据和第二个数据段;

        4.A端收到的数据是第一个数据和第二个数据。

     然后由于以上的种种原因,会将数据进行封包,并且在传送中类似于http请求中的content-length信息中,说明了信息的长度,这样在从缓冲区读取信息时,会根据相应的信息长度将信息读取出来。

     

  • 相关阅读:
    安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息
    用jmeter监控服务器资源
    CSS获取兄弟节点
    selenium之CSS定位
    Linux find 命令详解
    git 添加文件的可执行权限
    判断三角形类型
    冒泡排序
    selenium 显示等待 隐式等待 和强制等待
    flask 基本配置和参数解释
  • 原文地址:https://www.cnblogs.com/chenyang920/p/6583135.html
Copyright © 2011-2022 走看看