发送固定长度的 TCP 帧

2024-01-08

我需要使用 TCP 通过具有固定非标准 MTU(例如 1560)的子网发送一些数据。 如果帧的长度小于 MTU,则通过该子网传输的所有以太网帧都应手动填充 0。

所以,数据大小应该是 (1560 - sizeof(IP 标头)- sizeof(TCP 标头))。

这就是我要做的方法:

  1. 我设置了 TCP_CORK 选项来减少数据碎片。它并不可靠,因为有 200 毫秒的上限,但它可以工作。

  2. 我知道 IP 标头的大小(20 字节),因此数据长度应等于(1540 - sizeof( TCP header ))。

  3. 那就是问题所在。我不知道 TCP 标头大小。它的“选项”字段的大小是浮动的。

那么,问题来了:如何获取TCP头的大小呢?或者也许有某种方法可以发送带有固定长度标头的 TCP 帧?


从用户应用程序使用 TCP 时尝试控制帧的大小是错误的。您正在错误的抽象级别上工作。这也是不可能的。

您应该做的是考虑用其他东西(UDP?)替换 TCP,或者,不太可能,但可能,重写您的以太网驱动程序以设置非标准 MTU 并进行您需要的填充。

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

发送固定长度的 TCP 帧 的相关文章

  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 什么是 SO_SNDBUF 和 SO_RCVBUF

    你能解释一下到底是什么吗SO SNDBUF and SO RCVBUF选项 好的 出于某种原因 操作系统缓冲传出 传入数据 但我想澄清这个主题 他们的角色 通 常 是什么 它们是每个套接字的缓冲区吗 传输层的缓冲区 例如 TCP 缓冲区 和
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 如何使用 Azure Active Directory .NET SDK 删除 AppRoleAssignment?

    我正在尝试找出如何删除AppRoleAssignment来自使用 Azure Active Directory 图形 API 的组或用户 我正在使用 NET SDK Microsoft Azure ActiveDirectory Graph
  • 声明与类型不兼容

    头文件 ifndef H bankAccount define H bankAccount class bankAccount public string getAcctOwnersName const int getAcctNum con
  • AVCaptureSession 旋转 |视频传输时的方向

    我正在开发视频流应用程序 其中我需要捕获前置摄像头视频帧并编码然后传输到另一端 典型的流程是这样的 AVCaptureSession gt AVCaptureDeviceInput gt AVCaptureVideoDataOutput g
  • 如何取消或处置 WebBrowser 元素的当前导航

    我正在开发一个 C NET Framework 4 0 应用程序 它按顺序访问一些页面 有时我必须移至下一页而不等待上一页完成工作 如何取消之前的导航过程WebBrowser元素 WebBrowser元素使用 Internet Explor
  • 模拟器设备框架未显示

    我第一次在 MacBook 上安装 Android Studio 我按如下方式安装了第一个模拟器 但是当我打开设备时 我看不到设备框架 我需要做什么才能看到设备周围的框架 我使用的是 M2 MacBook 创建模拟器 没有设备框架的模拟器
  • 初始化使指针来自整数而不进行强制转换 - C

    很抱歉 如果这篇文章显得无知 但我对 C 还很陌生 所以我对它没有很好的理解 现在我正在尝试找出指针 我编写了这段代码来测试是否可以更改更改函数中 b 的值 并通过传入指针将其带回主函数 不返回 但是 我收到一条错误消息 Initializ
  • Docker 挂载发生在入口点执行之前或之后

    我正在构建一个 Docker 映像来运行基于 Spring Boot 的应用程序 我希望用户能够通过将包含 application properties 的文件夹安装到容器中来提供运行时属性文件 这是我的 Dockerfile FROM j
  • Mysql:重复键更新所有值?

    有没有简单的方法可以更新重复键后的所有值 例如 INSERT INTO published books SELECT FROM books WHERE book id book id ON DUPLICATE KEY UPDATE ever
  • 从超类访问 __DATA__

    我有一个名为 Response 的超类 package Response use strict use warnings use HTML Template sub response my class request return requ
  • 并行运行测试会导致 java 堆内存不足。

    并行运行测试会导致 java 堆内存不足 但是当我不并行运行它们时 不存在内存问题 这是错误 java lang OutOfMemoryError Java 堆空间 在 java util Arrays copyOf Arrays java
  • 使用 NGINX 添加 AWS 公共证书

    我正在使用 EC2 并使用 NGINX 由 PuTTY 提供 我选择了AWS 公共证书因此我明白要使用HTTPS我也需要配置 NGINX 我找到了一些关于它的教程 但是他们到处都添加了ssl certificate and ssl cert
  • 如何在 UICollectionViewController 中提供 GetSizeForItem 实现?

    UICollectionViewDelegateFlowLayout http developer apple com library ios documentation UIKit Reference UICollectionViewDe
  • 如何在渲染方法之外使用未声明的反应?

    我在我的项目中使用 usated 库 在渲染方法中 我使用set像这样 render return
  • WebGL 和 Tessellation 库?

    在 C C 中 OpenGL 有一个很好的库 用于将复杂的多边形形状细分为三角形条和扇形 该库是 GLUtesselator 是否有任何库具有与 WebGL HTML 等效的功能 GLUtesselator 已由 Google 地图的 Br
  • Git diff:忽略以单词开头的行

    据我所知here https stackoverflow com questions 53450186 git diff show only changes not matching a pattern 我们可以告诉git diff忽略以
  • 在弹出窗口中显示用户控件

    I have a button and another control placed in a usercontrol I want to pop out the control below the button to the topp o
  • 强制 C# 应用程序编译为 x64 而不是 AnyCpu

    我一直在尝试使用 C 2010 Express 在 C 应用程序中引用本机 x64 dll 我有一个从 2008 年项目转换而来的演示项目 其属性中有配置和平台选项 但我创建的新项目没有 下拉菜单根本不存在 事实上我什至无法从 调试 切换到
  • 当在 bean 内部调用该方法时,Spring AOP 不起作用

    我的应用程序中编码了几个方面 除以下内容外 所有其他内容均有效 服务接口 package com enbiso proj estudo system service public interface MessageService Messa
  • 捕获异常但使用 Sidekiq 重试

    默认情况下 sidekiq 将重试任何引发异常的作业 没事儿 但是 我希望能够捕获该异常 以便我的异常处理程序不会收到通知 然后重试该作业 我如何在反应中实现这一点 所以我的代码如下所示 def perform rescue ExcClas
  • 发送固定长度的 TCP 帧

    我需要使用 TCP 通过具有固定非标准 MTU 例如 1560 的子网发送一些数据 如果帧的长度小于 MTU 则通过该子网传输的所有以太网帧都应手动填充 0 所以 数据大小应该是 1560 sizeof IP 标头 sizeof TCP 标