请教一下 PPTP 的数据包头长度的问题

2017-03-30 13:55:28 +08:00
 Sh888
Ping 最大长度 MTU MSS

直接 ping 8.8.8.8/baidu.com 1472 1500 1460

拨上 pptp 后 8.8.8.8 1372 1400 1360

baidu.com 1368 1396 1356


PPTP Server 是 Ubuntu 上的 PPTPD , Client 是 Windows 7

问题:

1 、 PPTP 数据包头的长度有 100 字节?具体结构是怎么样的?

2 、目前发现连上 PPTP 后访问 baidu ,需要额外 4 个字节(必须把 MSS 设置为 1356 )。不明白具体原因是什么。

有老司机能否解释一下?谢谢!
1891 次点击
所在节点    Linux
5 条回复
Sh888
2017-03-30 14:06:06 +08:00
我算了一下 GRE24 个字节, PPP8 个字节,那么 PPTP 开销貌似应该 32 个字节。不知道另外 100-32=68 字节是什么开销?
okudayukiko0
2017-03-30 16:59:34 +08:00
PPTP 不安全,建议 L2TP
okudayukiko0
2017-03-30 17:00:21 +08:00
IPsec 也行, L2TP 和 PPTP 基于 PPP 难配置
CRVV
2017-03-30 22:15:30 +08:00
1. 套一层 PPTP 是多了 GRE, PPP 和 IP 三层而不是两层
2. GRE 的头不是 24 字节, PPP 也不是 8 字节
3. 建立 PPTP 连接的时候,会协商一个 MTU ,不一定用满,所以用减法来计算头的长度是错的
4. 这种事情要直接抓包来看,或者去慢慢读 RFC 2637 和 1661
Sh888
2017-03-31 10:54:25 +08:00
找到原因了: windows7 拨号后 PPTP 默认 MTU 会设置为 1400 ( netsh interface ipv4 show subinterfaces );而 ubuntu 上 PPP 默认 MTU 为 1396 。操作系统这么设置是为了简单兼容不同的底层链路开销吧。
MSS 以 windows7 为准计算和以 ubuntu 为准计算差了 4 个字节,因此推测 google 和 youtube 在上层 tcp/udp 应该有更小的分片设置,而 baidu 则没有,把分片工作直接交给了 tcp/ip 层自行处理。所以会导致使用默认设置能够访问 google ,而不能访问 baidu 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/351458

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX