标签: mtu

发送固定长度的TCP帧

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

因此,数据大小应为(1560 - sizeof(IP标头) - sizeof(TCP标头)).

这就是我要这样做的方式:

  1. 我设置TCP_CORK选项以减少数据的分段.它不可靠,因为有200毫秒的天花板,但它的工作原理.

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

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

所以,问题是:如何获得TCP头的大小?或者也许有一些方法来发送带有固定长度标头的TCP帧?

c linux network-programming tcp mtu

5
推荐指数
2
解决办法
2130
查看次数

TCP数据包的MTU是否包含TCP和IPv4标头?

或者:TCP/IPv4数据包的最大有效负载大小是多少.

非常感激!

干杯.

ip tcp mtu

5
推荐指数
1
解决办法
3278
查看次数

实际在Android和iOS中央/外围设备上协商Bluetooth LE ATT MTU

在Android上,我们有requestMtuand onMtuChanged,这似乎意味着如果中央设备和外围设备都基于Android,则必须手动协商MTU大小(但我可能是错的,并且可能在连接时也会自动发生,而无需我干预)。requestMtu仅讨论写请求(无响应写)操作的文档,没有提及通知,还说该文档用于“连接”,但没有提及它来自中央还是外围。 因此,目前尚不清楚,可以/应该使用连接的哪一侧requestMtu以及它如何影响通知大小和写入大小?

在iOS上,似乎没有直接替代品,requestMtu而我们只有central.maximumUpdateValueLength(自iOS 7,起)。它的文档(与Android相反)说它maximumUpdateValueLength仅用于通知更新,这意味着它仅在外围设备方面有用,因为您是从外围设备向中央发送通知。 但是写呢?如果我正在写(再次无响应)从中央到外围设备的特性,我如何知道我的批处理大小以确保有效写入?

考虑到混合系统(Android / iOS中央/外围设备),这一切都令人困惑,并且不清楚在哪方面以及何时/应该/应该请求/响应MTU大小协商。是否有描述ATT MTU交换选项的文档,它们对应于实际的Android和iOS实现?

android bluetooth mtu ios bluetooth-lowenergy

5
推荐指数
1
解决办法
1235
查看次数

将 iOS BLE MTU 大小更改为 512 (SWIFT)

有没有办法将 iOS 上的 MTU 值从默认值更改为任意值?

就像在 Android 中一样,可以执行 requestMTU(512)。

谢谢

mtu ios bluetooth-lowenergy

5
推荐指数
1
解决办法
8719
查看次数

路径MTU发现 - ICMP响应在哪里?

我正在Linux中进行路径MTU发现的一些实验.据我所知,从RFC 1191中,如果路由器接收到一个非零DF位的数据包,并且该数据包无法在没有分段的情况下发送到下一个主机,那么路由器应丢弃数据包并将ICMP消息发送到初始发件人.

我在我的计算机上创建了几个VM,并按以下方式链接它们:

VM1 (192.168.100.2)

R1  (192.168.100.1, 
     192.168.150.1)

R2  (192.168.150.2, 
     192.168.200.1)

VM2 (192.168.200.2)
Run Code Online (Sandbox Code Playgroud)

Rx - 是安装了Linux的虚拟机,它们有两个带静态路由的网络接口.从V1 Ping V2并反之亦然.

traceroute from 192.168.100.2 to 192.168.200.2 (192.168.200.2)
 1  192.168.100.1 (192.168.100.1)  0.437 ms  0.310 ms  0.312 ms
 2  192.168.150.2 (192.168.150.2)  2.351 ms  2.156 ms  1.989 ms
 3  192.168.200.2 (192.168.200.2)  43.649 ms  43.418 ms  43.244 ms

tracepath 192.168.200.2
 1:  ubuntu-VirtualBox.local                               0.211ms pmtu 1500
 1:  192.168.100.1                                         0.543ms 
 1:  192.168.100.1                                         0.546ms 
 2:  192.168.150.2                                         0.971ms 
 3:  192.168.150.2                                         1.143ms pmtu 750
 3:  192.168.200.2                                         1.059ms reached
Run Code Online (Sandbox Code Playgroud)

段100.x和150.x具有MTU 1500.段200.x具有MTU 750.

我正在尝试发送启用了DF的UDP数据包.事实上,在数据包大小超过750的情况下,VM1根本不发送数据包(我收到了send()调用的EMSGSIZE错误). …

mtu icmp

4
推荐指数
1
解决办法
4039
查看次数

如何通过代码(在python中)找到网络的mtu值?

我必须编写一个代码,我需要在python中使用udp协议发送数据.我需要将数据包大小设置为网络的MTU值.有什么方法可以决定在python中编写一些代码的网络的MTU值?

python sockets mtu

4
推荐指数
1
解决办法
5395
查看次数

有没有办法在 Linux 中使用 C 以编程方式设置接口 MTU?

目前我的程序正在调用system()ifconfig执行此操作。

它看起来有点乱 - 也许ifconfig不在路径上,或者在某个非标准位置。然后我需要检查iproute2 的等效项,以防失败。

有没有办法使用 C 以编程方式设置它?

c linux networking network-programming mtu

4
推荐指数
2
解决办法
4289
查看次数

如何永久更改MTU设置

我想永久改变MTU1500.通过永久我的意思是,如果我重新启动系统还是会做service network restart它总是支持1500.

我按照这篇文章http://www.cyberciti.biz/faq/centos-rhel-redhat-fedora-debian-linux-mtu-size/

但不幸的是,它对我不起作用.

这是我做的:

检查当前MTU:

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP qlen 1000 
Run Code Online (Sandbox Code Playgroud)

添加MTU="1500"/etc/sysconfig/network-scripts/ifcfg-eth0:

[root@ip-xx-xx-xxx~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=yes
IPV6_MTU="1500"
MTU="1500"
Run Code Online (Sandbox Code Playgroud)

然后MTU再次检查,(没有运气):

root@ip-xx-xx-xxx ~]# service network restart 
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  
Determining …
Run Code Online (Sandbox Code Playgroud)

linux networking tcp mtu

4
推荐指数
1
解决办法
2万
查看次数

TCP/UDP和以太网MTU碎片

我在线阅读了各种网站和教程,但我仍感到困惑.如果消息大于IP MTU,则send()返回发送的字节.消息的其余部分会发生什么?我是否send()再次打电话并尝试发送其余信息?或者是IP层应该自动处理的东西?

c tcp fragmentation send mtu

3
推荐指数
1
解决办法
2918
查看次数

如何在 POSIX 中获得 MTU

什么是 POSIX 函数来获取 MTU 大小值?谢谢。

mtu

3
推荐指数
1
解决办法
789
查看次数