c语言sgoto 标志位,如何在Go中设置TCP数据包的“不分段”标志位?(How to set “don't fragment” flag bit for TCP packet in Go?)...

如何在Go中设置TCP数据包的“不分段”标志位?(How to set “don't fragment” flag bit for TCP packet in Go?)

我打算在Go中设置“do not fragment”标志位,与C中的这个标志位相同。我检查了常量列表,但没有找到该选项。 那么Go的相应选项是什么?

提前致谢!

I intend to set the "don't fragment" flag bit in Go, the same thing as this post while it is in C. I checked the constant list but I didn't find this option. So what is the corresponding option in Go?

Thanks in advance!

原文:https://stackoverflow.com/questions/37761538

更新时间:2019-11-05 23:35

最满意答案

如何在Go中设置TCP数据包的“不分段”标志位?

首先你应该知道TCP确实不喜欢IP碎片。 大部分(如果不是全部)主要实现通过使用路径MTU发现来避免TCP段的碎片。

TL; DR是包含TCP段的典型IP包具有DF位置位。 你可以(也应该)尝试一下。 在这里,我嗅探了我的机器和stackoverflow.com之间的几秒钟的流量:

% tshark -w /tmp/tcp.pcap tcp and host stackoverflow.com

% tshark -r /tmp/tcp.pcap -T fields -e ip.flags | sort | uniq -c

186 0x00000002

0x02表示DF位置位。 我承认在其他捕获中,我看到了没有DF位的IP​​数据包中的偶尔TCP段; 我怀疑rfc1191对此有解释。

现在回到你的问题,我认为没有可移植的方式来设置DF位,这是一个更广泛的问题(甚至没有POSIX便携式方法)。 golang.org/x/sys下的相关软件包中可能会有一个(可能)逃脱孵化器。

例如,在支持IP_DONTFRAG的Unix(如FreeBSD)上,可以使用unix.SetsockoptInt并挖掘相关的常量值。

在Linux上没有IP_DONTFRAG ,正如你从你链接的问题中发现的那样。 解决方法似乎是使用IP_MTU_DISCOVER ,它恰好在unix包中作为常量提供。 你可以使用相同的unix.SetsockoptInt来设置它。

How to set "don't fragment" flag bit for TCP packet in Go?

First up you should know that TCP really doesn't like IP fragments. Most if not all major implementations avoid fragmentation for TCP segments by using path MTU discovery.

The TL;DR is that the typical IP packet containing a TCP segment has a DF bit set. You can (and should) try this out. Here I am sniffing a few seconds of traffic between my machine and stackoverflow.com:

% tshark -w /tmp/tcp.pcap tcp and host stackoverflow.com

% tshark -r /tmp/tcp.pcap -T fields -e ip.flags | sort | uniq -c

186 0x00000002

0x02 means the DF bit is set. I confess in other captures I have seen the occasional TCP segment in an IP packet without a DF bit; I suspect rfc1191 has an explanation for this.

Now back to your question, I think there's no portable way to set the DF bit and this is a more widespread question (there isn't even a POSIX-portable way). There is (likely) an escape hatch in the relevant package for your implementation under golang.org/x/sys.

For example, on a Unix that supports IP_DONTFRAG such as FreeBSD one could use unix.SetsockoptInt and dig the relevant constant value.

On Linux there is not IP_DONTFRAG, as you discovered from the question you linked. The workaround seems to be to use IP_MTU_DISCOVER which happens to be available as a constant in the unix package. You can use that same unix.SetsockoptInt to set it.

2017-05-23

相关问答

自己解决。 指向发送者IP的是sin.sin_addr.s_addr ,但它必须是服务器ip! 要小心,因为在代码中看到这样的错误并不容易! :-) 现在数据包包含正确的MAC信息。 接下来的问题是为什么我没有从服务器获得任何syn-acks ,但我会为这个问题提出一个新问题。 Solved it myself. It was the sin.sin_addr.s_addr that pointed at the senders IP, but it had to be the servers i

...

如何在Go中设置TCP数据包的“不分段”标志位? 首先你应该知道TCP确实不喜欢IP碎片。 大部分(如果不是全部)主要实现通过使用路径MTU发现来避免TCP段的碎片。 TL; DR是包含TCP段的典型IP包具有DF位置位。 你可以(也应该)尝试一下。 在这里,我嗅探了我的机器和stackoverflow.com之间的几秒钟的流量: % tshark -w /tmp/tcp.pcap tcp and host stackoverflow.com

% tsha

...

前一段时间想出来但忘记发布我发现的内容。 答案是你不可能真的。 在udp头文件中设置标志需要创建原始套接字,这需要root权限,这在iOS中是不具备的。 谢谢苹果! 幸运的是,在我的特殊情况下,我能够让我的客户改进他们的固件。 Figured this out awhile ago but forgot to post what I found. The answer is you can't really. Setting flags on the udp header requires the

...

这看起来很好。 TH_SYN是单个位,因此如果在th_flags设置该位,则表达式将为真(非零)。 That looks fine to me. TH_SYN is a single bit, so that expression will be true (nonzero) if that bit is set in th_flags.

tcp_dissect_pdus没有wslua API。 但你可以自己实现它。 如果你想组装跨越两个或更多数据包的pdu,那就相当简单了: function slicer.dissector(tvb, pinfo, tree)

...

local pdu_length = get_pdu_length(...)

if pdu_length > tvb:len() then

pinfo.desegment_len = pdu_length - tvb:len(

...

就像@Sivir所说,你需要建立三次握手,因为你想使用TCP协议。 从理论上讲,握手应该是这样的 YourProgram :发送SYN数据包 服务器 :发送SYNACK数据包 YourProgram :发送ACK数据包 有关这方面的更多信息,请点击此处 。 Like @Sivir said you need to establish a three way handshake because you want to use the TCP protocol. In theory the hands

...

以这种方式调整TCP连接是不可能的,控制它是没有意义的。 如果您需要使用此行为产生流量,则无法使用普通的TCP套接字,但需要使用原始套接字 ,您可以根据需要设置标头。 您当然需要在应用程序中重新实现所需的TCP连接的所有部分才能实现此功能。 Tuning a TCP connection this way can not be done and it would not make really sense to control it. If you need to produce traffic

...

发送字符串时,可能会在多个TCP数据包中发送。 如果发送多个字符串,它们可能都在一个TCP数据包中发送。 您没有接触到数据包,TCP套接字只是一个恒定的数据流。 不要指望对recv()每次调用都与recv()的单个调用配对,因为这不是真的。 您可以发送"abcd"和"efg" ,并可以从recv()读取"a" , "bcde"和"fg" 。 最好在收到数据后立即发送数据,以便网络堆栈尽可能快地提供有关您要发送的内容的信息。 它将确切地决定做什么。 您可以根据需要发送大字符串,如有必要,它将被分解为

...

不,因为永远不会发送目标主机名。 发件人使用DNS查找要与之通信的主机的IP地址,然后将数据包发送到该IP地址。 (更低级别,IP地址转换为MAC地址,这是硬件层使用的) 您的TCP套接字层应该允许您查看套接字的源和目标IP地址,然后您必须执行反向DNS查找以将其转换回主机名。 但请记住,一个IP地址可以转换为多个主机名... No, because the destination hostname is never sent. The sender uses DNS to find the IP

...

首先,让我们澄清MTU和MSS之间的区别。 这些属于堆栈的不同层(2和3)。 TCP / IP是一个非常不幸的分层蛋糕,它们都支持碎片,但不同,它们在这个问题上没有合作。 IP碎片是TCP不知道的事情。 事实上,如果其中一个IP片段丢失,整个系列就会被宣告丢失。 TCP不是这样:如果属于同一TCP流的IP数据报之一丢失,并且它们被TCP分段,则只需要重新传输丢失的部分。 这种混乱的核心原因是路由器必须能够在具有不同MTU的两个物理网络之间进行阻抗匹配, 而无需了解更高(TCP)协议 。 现在,所有

...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

林锐 高质量c语言编程下载,新年献礼:Go语言深度入门手册

(文末的阅读原文,效果最佳!)作者:李佶澳 微信:lijiaocnGo 语言深度入门手册,帮你更好的理解 Go 语言,写出更高效、更规范、更不易出错的代码。Go 在 2012 年发布 1.0 版本,距今已经 8 年了。和历…

android中shape资源定义,Android中drawable使用Shape资源

本文实例为大家分享了drawable使用Shape资源的具体内容,供大家参考,具体内容如下1.画一条水平方向的虚线android:shape"line" >android:dashGap"3dp"android:dashWidth"6dp"android:width"1dp"android:color…

永洪报表工具_2020年最值得推荐的五大BI工具

现在很多公司和业务部门都十分注重数据分析,并为企业信息化建设做准备。以前收集、处理、分析数据可能是IT部门和数据库员的专属,现在很多业务部门都急切的开始用数据分析的思维分析业务问题。在过去,大多数数据人员的工作模式都是自己使用ex…

容量耦合系数模型_期刊在线 | 基于ALE流固耦合方法的刷式密封泄漏特性理论与实验研究...

01引言刷式密封是一种广泛应用于航空发动机等透平机械的优良接触式动密封[]。近年来,随着透平机械逐渐向高参数方向发展,由刷式密封引起的泄漏损失越来越大,直接影响透平机械的工作效率。因此开展刷式密封的泄漏流动特性研究具有重要理论和实…

设备管理器android感叹号,设备管理器其他设备感叹号

设备管理器其他设备感叹号客观地讲,常规的设备管理器问题与设备管理器在哪,设备管理其怎么打开以及设备管理其其他设备感叹号是什么问题等。本文重点介绍设备设备管理器其他设备感叹号相关问题,希望能够为对此有需求的朋友提供参考或帮助。设…

android studio 集成 第三方sdk,Android FrameWork集成第三方SDK的jar包和so庫

本文講解的如何在Android FrameWork如何集成XXXsdk的jar包和so庫首先在framework/opt/建立XXSDK的文件夾講jar包和so庫拷貝進去1:framework/opt/xxsdk/然后直接看Android.mk就行# Copyright (C) 2009 The Android Open Source Project## Licensed under the Apache License, Ve…

unity要学ecs吗_ECS的泛泛之谈

这篇文章将带着你从设计出发重新发现ECS。注意:此篇为泛泛之谈,不涉及具体实现。从Abstract说起从”是”到”能”再到”有”对对象的抽象是整理代码的要点,继承是一种比较古老并常见的抽象,其描述了一个对象"是"什么,其…

条令考试小程序辅助器_计算机一级考试干货!

计算机一级考试干货一年两度的计算机等级考试就要在2019年3月30-31日期间开始啦!为了更好的让同学们了解考试的大体内容,我们已整理如下内容,可以供大家参考。同时,希望大家认真备考,争取都一次性过哦!考试…

android文件系统只读,android

>>#1 票数:408最近,我扎根了Droid X,一切似乎都运转良好。 我对build.prop进行了一些更改,当我执行adb push build.prop /system/ ,出现以下错误: failed to copy c:\\build.prop to /system//build.…

燃气灶电气线路图及原理_一位造价大神的电气工程造价知识整理笔记_深圳电气造价预算培训要多少钱...

电气设备安装工程是建设工程中的一种常见的、重要的设备安装工程。电气设备安装工程计价涉及到许多电气工程专业知识。一、电气设备安装工程的组成一般的电气设备安装工程是以接受电能,经变换、分配电能,到使用电能或从接受电能经过分配到用电设备所形成…

荣耀es升级鸿蒙,华为手机明年全部升级鸿蒙系统 所有自研设备换OS

近日,华为举行 HarmonyOS 2.0 手机开发者 Beta 活动,现场正式发布了 HarmonyOS 2.0 手机开发者 Beta 版本。华为消费者业务软件部副总裁杨海松在接受媒体采访表示,到今天为止,参与鸿蒙开发项目的开发者数量超过 10 万,…

signature=08653706deda7871a1f662eae4d2b33e,The nature of nuclear Halpha emission in LINERs

摘要:To get insight in the nature of the ionized gas in the nuclear region of LINERs we have performed a study of HST Halpha imaging of 32 LINERs. The main conclusion from this analysis is that for the large majority of LINERs (84%) an unresolve…

腐蚀国内稳定服务器_工控机箱和服务器机箱区别在哪里

服务器机箱必须能够装进机柜,一个标准机柜的宽度是19英寸482.6mm,所以机箱的宽度是几乎固定的,一般是17英寸左右,两侧再安装把手和轨道。机箱高度也有规定,用U(Unit)做单位,1U是44.5mm,机箱高度…

signature=99daf37ca32015c39987d04abe5a559d,合肥2015年7月4日至2015年7月16日交通违章查询...

备注:查询时按ctrlf,方便快速查找。小型汽车(蓝牌)藏AQ1103 川A2ZH95 川A2ZL77 川A4RL16 川AB9B03 川AF8R10川AG28F8 川RS5355 鄂A51602 鄂A6NW35 鄂A721K6 鄂A87Q05鄂A8XQ78 鄂A9DU50 鄂AH07W0 鄂AJ1V12 鄂AK08L5 鄂AM02D6鄂AM5488 鄂AN1A91 鄂AP5Y77 鄂…

hive不在同一台机 hue_环境篇:呕心沥血@CDH线上调优

环境篇:呕心沥血CDH线上调优为什么出这篇文章?近期有很多公司开始引入大数据,由于各方资源有限,并不能合理分配服务器资源,和服务器选型,小叶这里将工作中的总结出来,给新入行的小伙伴带个方向&…

网页制作的基本语言html,网页制作基础语言HTML.ppt

网页制作基础语言HTML2. 内嵌音频播放插件 通过内嵌音频播放插件可以在浏览器中出现控制面板,也可作为背景音乐。其格式为: 【例2-27】 3. IE中的背景音乐 可以插入背景音乐格式,不过只有在IE浏览器中才可以听到。其格式为: 播放次…

coji 编程机器人_WowWee编程机器人怎么样 WowWee编程机器人使用测评

现在社会已经互联网化,很多小孩的补习班里面也开始出现编程特色补习班,也出现了编程玩具,下面乐海购的编辑就来说说:WowWee编程机器人怎么样WowWee编程机器人使用测评。WowWee编程机器人怎么样我家宝宝对于WowWee编程机器人这样的…

宿松县事业单位计算机基础知识,计算机基础知识试题(事业单位考试)

原标题:计算机基础知识试题(事业单位考试)1、世界上首先实现存储程序的电子数字计算机是____. A.ENIAC B.UNIVAC C.EDVAC D.EDSAC2、计算机科学的奠基人是____.A.查尔斯。巴贝奇 B.图灵 C.阿塔诺索夫 D.冯。诺依曼2、世界上首次提出存储程序计算机体系结构的是____.…

数组添加进formdata_javascript – FormData追加数组中的项目

public List Regions { get; set; }在名为News.An Region Model的模型中public class Region{public int Id { get; set; }public string Name { get; set; }public static Region Parse(DataRow row){return new Region{Id Database.GetInteger(row["Id"]),Name D…

perl 安装html,centos perl 安装HTML-Parser时报错

新装了centos7,安装perl模块时,发现系统自带的perl很多基础的包都没安装(是基础perl的阉割版本,甚至失去了很多重要的基础包 http://www.perlmonks.org/?node_id486526),比如 ExtUtils::MakeMaker,ExtUtils::ParseXS,ExtUtils::E…