TCP网络数据包什么时候会在应用层产生分片?

2024-03-15

TCP报文什么时候会在应用层分片?当应用程序发送 TCP 数据包时,应用程序层的接收者是否会收到两个或多个数据包中的数据包?如果是这样,什么条件会导致数据包被分割。似乎数据包在达到以太网(在网络层)1500 字节的限制之前不会被分段。但是,该分段对于应用程序层的接收者来说是透明的,因为网络层将在将数据包发送到下一层之前重新组装分段,对吗?


当它到达 MTU 低于数据包大小的网络设备时,它将被分割。大多数以太网设备都是 1500,但通常可以更小,例如 1492(如果以太网通过 PPPoE (DSL) 传输,因为需要额外的路由信息​​),如果添加第二层(如 Windows Internet 连接共享),则甚至更低。而拨号一般是576!

一般来说,你应该记住这一点TCP不是数据包协议。它使用最低级别的数据包通过 IP 进行传输,但就任何 TCP 堆栈的接口而言,它是一种流协议,不需要为您提供与发送或接收的物理数据包 1:1 的关系(例如,大多数堆栈将保留消息,直到某一段时间到期,或者有足够的消息来最大化给定 MTU 的 IP 数据包的大小)

例如,如果您发送了两个“数据包”(调用发送函数两次),则接收程序可能只会收到 1 个“数据包”(接收 TCP 堆栈可能会将它们组合在一起)。如果您正在通过 TCP 实现消息类型协议,则应在每个消息的开头包含一个标头(或其他一些标头/页脚机制),以便接收方可以将 TCP 流拆分回单独的消息,无论是当消息分两部分接收,或者当多个消息作为一个块接收时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP网络数据包什么时候会在应用层产生分片? 的相关文章

  • 通过 TCP 客户端套接字接收数据时出现问题

    我正在尝试用 C 语言编写一个 TCP 客户端程序 客户端将在其中启动 连接到服务器 然后它会发送一些信息 然后监听它收到的信息并做出相应的反应 我遇到麻烦的部分是持续聆听 这是我所拥有的 while 1 numbytes recv soc
  • 查找网络中的所有IP地址

    我正在尝试用 C 来做这个 我需要找到我的网络中所有活动的 IP 地址并将它们显示在列表中 我可以 ping 网络中所有可用的 1 255 IP 地址 但我想让这个过程更快 此代码在大约 1 秒内扫描我的网络 255 个 D 级段 我在 V
  • 什么是消息边界?

    什么是 消息边界 在以下情况下 TCP 和 UDP 之间的区别之一是 UDP 保留消息 边界 我理解之间的区别TCP and UDP 但我不确定的定义 消息边界 由于 UDP 在每个单独的数据包中包含目的地和端口信息 因此是否可以为消息提供
  • 在 C# 中通过 TCP 发送 C 结构体

    我正在编写一个程序 通过 TCP 与一台设备的管理界面进行交互 问题是 设备的文档是用C写的 而我写的程序是用C 写的 我的问题是 文档指定 通信基于基于C结构的API缓冲区 再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP
  • 使用 iPhone 作为热点时 TCP 连接无法正常工作

    我正在开发一个 iOS 应用程序 它通过 TCP 套接字连接到在 Android 上运行的服务器应用程序 为了找到第二个设备的 IP 我使用 UDP 请求并接收服务器的 IP 当我将它们连接到 Wi Fi 网络或使用 Android 设备作
  • net.TCPConn 允许在 FIN 数据包后写入

    我正在尝试为一些服务器端代码编写单元测试 但我在确定关闭测试用例时遇到了困难 环回 TCP 连接似乎无法正确处理干净关闭 我在一个示例应用程序中重现了这一点 该应用程序按顺序执行以下操作 创建客户端和服务器连接 通过从客户端向服务器成功发送
  • PHP 上的多个 TCP 套接字请求

    是否可以使用 PHP 上的套接字服务器接受多个请求 并行 如果可以的话 怎样做 普通的 PHP 脚本无法接收多个请求 但如果你真的计划创建一个套接字服务器 作为 cmdline php 脚本启动 那么是的 这是可能的 调查http pear
  • 如何在 Windows 中为高级网络适配器属性设置巨型数据包和接收/传输缓冲区?

    我正在尝试为网络适配器设置一些高级属性 例如巨型数据包 接收 发送缓冲区 我尝试使用 Win32 NetworkAdapter Win32 NetworkConnection Win32 NetworkAdapterConfiguratio
  • 为什么我们可以将 sockaddr 转换为 sockaddr_in

    我明白为什么强制转换很有用sockaddr to sockaddr in 但我不明白这怎么可能 据我所知 它们的大小相同sockaddr in添加了sin zero使其大小相同 我想知道编译器如何知道从哪里获取信息sockaddr in如果
  • accept() 创建一个新套接字是什么意思?

    我的问题基于以下理解 套接字由 ip port 定义 服务器和客户端都有自己的套接字 Socket连接由五组server ip server port client ip client port protocol定义 套接字描述符是标识套接
  • C - 如何正确使用 OpenSSL 的 BIO_write()

    我是 OpenSSL 新手 我知道 BIO write BIO b const void buf int len 需要在循环中调用 但我不完全确定我是否正确使用它 我写了一个这样的函数 int32 t SendPacket BIO cons
  • 发起TCP连接关闭后如何接收数据?

    TCP 允许一侧发出 FIN 并让另一侧在结束其一侧的连接之前响应一些数据 我如何使用 NET 来实现这一点TcpClient 看来我必须使用Close发出FIN 但之后我不能再打电话Client Receive since Client被
  • AMQP如何克服直接使用TCP的困难?

    AMQP如何克服直接使用TCP发送消息时的困难 或者更具体地说 在发布 订阅场景中 在 AMQP 中 有一个代理 该代理接收消息 然后完成将消息路由到交换器和队列的困难部分 您还可以设置持久队列 即使客户端断开连接 也可以为客户端保存消息
  • IP 标志的不分段位在哪里使用?

    我很想知道 IP 标志的 不分段 DF 位在哪里使用 因为碎片对于更高层来说是不可见的 并且他们也不关心 我也在寻找一个例子 预先非常感谢 碎片并不总是对所有上层都可见 一些早期 甚至可能是当前 微控制器 TCP IP 堆栈没有实现碎片处理
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • OpenSSL:无需 SSL_read() / SSL_write() 即可执行加密/解密

    我已经用 C 语言编写了一个基于事件的网络库 现在我想通过 OpenSSL 添加 SSL TLS 支持 而不是使用SSL read and SSL write 我宁愿让 OpenSSL 只执行传出 传入数据的加密 解密 让我自己传输 接收数
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • 为什么 TCP 段中的 SYN 或 FIN 位会占用序列号空间中​​的一个字节?

    我试图理解这种设计背后的基本原理 我浏览了一些 RFC 但没有发现任何明显的东西 这并不是特别微妙 这样 SYN 和 FIN 位本身就可以被确认 因此如果丢失则可以重新发送 例如 如果连接关闭而没有发送更多数据 那么如果 FIN 没有发送任
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 如何强制关闭 TcpListener

    我有一个通过 tcpListener 进行通信的服务 问题是当用户重新启动服务时 抛出 地址已在使用 异常 并且服务在几分钟左右无法启动 有没有办法告诉系统终止旧连接 以便我可以打开一个新连接 我不能只使用随机端口 因为服务无法通知客户端端

随机推荐

  • 使用 WordPress 高级自定义字段时“url”的字符串偏移量非法

    我正在将 Bootstrap 模板转换为 WordPress 主题 对于自定义字段 我正在使用该插件高级自定义字段 https wordpress org plugins advanced custom fields 问题是当我尝试在以下命
  • 使用多个 OR || 简化 IF 语句相同变量的条件

    这是我的代码 var something four if something one something two something three something five something six something seven do
  • 使用@staticmethod 有什么好处吗?

    我想知道您是否在代码中使用 staticmethod 装饰器 就我个人而言 我不使用它 因为写 staticmethod 比写 self 需要更多的字母 使用它的唯一好处 对我来说 可能是代码更加清晰 但由于我通常为 sphinx 编写方法
  • C++ 程序无法使用 Clang 和 Visual Studio 2010 Express 进行编译

    我正在尝试使用 Visual C 2010 Express 编译本教程中所述的源代码 http kevinaboos wordpress com 2013 07 23 clang tutorial part ii libtooling ex
  • 如何以编程方式找出机器的上次登录时间?

    我想 a 以编程方式和 b 远程查找用户成功登录 Windows 计算机的最后日期 时间 通过远程桌面或控制台 我愿意采用任何典型的 Windows 语言 C C VB 批处理文件 JScript 等 但任何解决方案都很好 尝试这个 pub
  • 将朴素贝叶斯训练分类器保存在 NLTK 中

    我对如何保存经过训练的分类器有点困惑 例如 每次我想使用分类器时重新训练它显然非常糟糕且缓慢 我如何保存它并在需要时再次加载它 代码如下 提前感谢您的帮助 我正在使用 Python 和 NLTK 朴素贝叶斯分类器 classifier nl
  • 为什么说C++不支持参数多态?

    根据维基百科页面参数多态性 https en wikipedia org wiki Parametric polymorphism 类型多态性的一些实现表面上与参数多态性相似 同时也引入了特殊方面 C 模板专门化就是一个例子 问题 为什么说
  • 哪些 UNIX 命令支持彩色输出?

    我喜欢使用支持彩色输出的 UNIX bash 命令 因此 我定义了一些别名 它们自动启用我知道支持此选项的命令的彩色输出 但是 我确信有数百个命令支持彩色输出 我想知道它们是什么 我的那些 bash aliases文件是 ls color
  • .NET - 调整图像大小的边框

    我正在尝试在 NET 中调整图像大小 但调整大小后的图像周围出现微弱的黑色边框 我找到了一个帖子 http social msdn microsoft com forums en US csharpgeneral thread cf7650
  • 从变量引用另一个工作簿中的工作表时下标超出范围

    看图片 http s12 postimg org ov8djtuh9 Capture jpg http s12 postimg org ov8djtuh9 Capture jpg Context 尝试激活另一个工作簿中的工作表 变量 cSh
  • Flexbox 难以将图标与容器底部对齐

    我在使用 Flexbox 时遇到了一些困难 如你所见 我有一个aside包含社交媒体图标的有序列表的元素 由于某种原因 我无法将这些图标粘在包含的内容的底部div HTML代码 div class outercontainer group
  • SQL 在每个 SELECT 请求上获取 ROW_NUMBER 和 COUNT

    我正在构建一个网格机制 我需要从数据库中检索找到的总数或记录的数据 仅检索其中包含 row number 的这些记录的范围 我正在使用 Sql Server 进行测试 但我也需要在 Oracle 和 MySql 上支持它 这就是我正在尝试的
  • Visual Studio 2013 中的 SQL Server 项目

    我最近从 Visual Studio 2010 升级到 Visual Studio 2013 我的大多数项目都可以使用 VS2013 打开 但 SQL Server 2008 数据库项目 被列为不兼容 除外 VS2013 项目模板不包含 S
  • JELLY_BEAN 及以下版本的 JavascriptInterface 注释

    正如上面明确指出的官方文档 https developer android com reference android webkit WebView html addJavascriptInterface 28java lang Objec
  • PostgreSQL psql命令行显示bytea列

    我有一个图像数据库 图像表有两个bytea列 我想查询该表并查看这些列 以便能够了解这些条目是否存储图像 因为它们是可为空的列 目前 当我使用 psql 命令行查询数据库时 我的整个命令行屏幕会变成空白 试图显示 bytea 我已经用谷歌搜
  • 无法将“UITableViewCell”类型的值转换为“(AppName).(CustomCellName)”

    我目前正在尝试使用 xCode 6 3 swift 1 2 创建自定义表格视图单元格 由于某些原因 在 cellforRowAtIndexPath 方法中 我似乎无法设置我的单元格变量 代码将编译 但是当这行代码命中时 var cell M
  • Scala Sets 包含相同的元素,但 SameElements() 返回 false

    在使用 Scala 进行工作时可迭代对象的练习 http scala exercises 47deg com koans iterables 我遇到了以下奇怪的行为 val xs Set 5 4 3 2 1 val ys Set 1 2 3
  • 删除 node-role.kubernetes.io/master:NoSchedule 污点

    我可以输入什么 CLI 命令来删除node role kubernetes io master NoSchedule来自 Kubernetes 集群中主节点的污染 以下命令失败 lnxcfg ip 10 0 0 193 kubectl ta
  • 如何计算2个node2vec模型之间的距离

    我有 2 个不同时间戳的 node2vec 模型 我想计算两个模型之间的距离 两个模型具有相同的词汇 我们更新模型 我的模型是这样的 model1 1 0 1 0 5 2 0 3 0 4 3 0 2 0 5 model2 1 0 15 0
  • TCP网络数据包什么时候会在应用层产生分片?

    TCP报文什么时候会在应用层分片 当应用程序发送 TCP 数据包时 应用程序层的接收者是否会收到两个或多个数据包中的数据包 如果是这样 什么条件会导致数据包被分割 似乎数据包在达到以太网 在网络层 1500 字节的限制之前不会被分段 但是