Arch Linux 启用 MTU 探测
最近在家里经常遇到 ssh 超时的问题,一开始也没太当回事,感觉是网络不稳定导致的,但是后来慢慢的发现这种超时问题只会出现在跟 ssh 相关的程序中,例如 git、ssh。这成功的引起了我的注意,于是我开始尝试着去排查。
首先我测试了一下 ping 远程服务器,发现结果还是比较正常的,所以在 icmp 协议上,连接应该是没有问题的。然后安装 tcping
软件包,测试 tcp 连接,结果显示也是正常的,那么看起来就是 ssh 协议的问题了。于是接着尝试让 ssh 输出调试信息:
$ ssh -v -o ConnectTimeout=10 test-server
输出结果如下:
# .....
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
# 一直等待,直到超时
可以看到,ssh 连接的建立一直阻塞在了 expecting
这个阶段,用这行命令的输出在网络上查找,发现了是 MTU 过大引起的问题: mtu missmatch。
这片文章给出的解决方案是将系统的 MTU 的设置成一个较小的值(例如,576)。使用 ip
命令简单的执行了一下,发现确实可以解决 ssh 超时的问题:
查看当前的 MTU 设置
$ ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DORMANT group default qlen 1000
link/ether ac:bc:32:d4:cd:af brd ff:ff:ff:ff:ff:ff
接着修改无线网卡的 MTU 设置:
$ sudo ip link set dev wlp4s0 mtu 576
但是我的潜意识告诉我这么干并不优雅,于是我在 Arch Wiki 上面找到了这个内容。这里面提到一个内核参数 —— tcp_mtu_probing
,启用这项内核功能可以让操作系统根据网络状况自动的调节 MTU 大小,从而在性能与稳定性之间找到一个微妙的平衡,具体的介绍可以看 Cloudflare 这篇介绍
只要先在 /etc/sysctl.d/99-sysctl.conf
加上下面的内容:
net.ipv4.tcp_mtu_probing = 1
然后使用 sysctl
加载配置就好了:
$ sudo sysctl --system
Arch Linux 启用 MTU 探测的更多相关文章
- 在VMWare上安装Arch Linux
1.为什么选择Arch Linux Arch Linux 是通用 x86-64 GNU/Linux 发行版.Arch采用滚动升级模式,尽全力提供最新的稳定版软件.初始安装的Arch只是一个基本系统,随 ...
- arch linux 安装指南
(如果不想折腾arch linux,推荐直接使用 manjaro: https://manjaro.org/ ) 1.安装准备 Arch Linux 能在任何内存空间不小于 512MB 的 x86_ ...
- Arch Linux 安装、配置、美化和优化
国庆假期玩了下Arch Linux,发现这货跟Ubuntu之流相差甚远,甚难调教,而且安裝过程全命令行,会有各种问题,各种知识... --- 安装引导器--- -------------------- ...
- 如何在 Arch Linux 的终端里设定 WiFi 网络
如果你使用的是其他 Linux 发行版 而不是 Arch CLI,那么可能会不习惯在终端里设置 WiFi.尽管整个过程有点简单,不过我还是要讲一下.在这篇文章里,我将带领新手们通过一步步的设置向导,把 ...
- Arch Linux 安装记录
Arch Linux 安装记录 基本上参考wiki上的新手指南,使用arch 2014.6.1 iso安装 设置网络 有线网络 Arch Linux 默认开启DHCP. 静态ip 首先关闭DHCP:s ...
- Arch linux安装
安装archlinux可参考: http://blog.sina.com.cn/s/blog_69e5d8400101bqlj.html http://www.cnblogs.com/mad/p/32 ...
- Arch Linux 硬盘引导-联网安装
Arch Linux 硬盘引导-联网安装 ============https://www.archlinux.org/https://wiki.archlinux.org/https://wiki.a ...
- arch Linux(一)
制作启动盘 将U盘插入待装主机,设置U盘启动,重启进入系统安装界面 设置root密码 root@archiso~ # passwd 启动允许远程连接 root@archiso~ # systemctl ...
- Arch Linux 独特的包管理器相关名词解释及用法对照
https://wiki.archlinux.org/index.php/PacmanPacman包管理器是Arch Linux的主要特色之一.它结合了简单的二进制包格式和易于使用的构建系统.pacm ...
随机推荐
- Beta冲刺(4/7)——2019.5.25
所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(4/7)--2019.5.25 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...
- 2018南京区域赛K题 Kangaroo Puzzle——随机&&乱搞
题意 在 n * m 的平面上有若干个袋鼠和墙(1为袋鼠,0为墙),每次可以把所有袋鼠整体往一个方向移动一步(不能走出边界和不能走到墙),为在不超过50000步的情况下能否把全部袋鼠聚集在同一个位置. ...
- SC CSP-J2019初赛成绩已出!
链接: https://pan.baidu.com/s/1UK2pL7UW0n0vYpnzMbJm9A 提取码: uwav 复制这段内容后打开百度网盘手机App,操作更方便哦 Me?87! I am ...
- linux学习11 Linux基础命令及命令历史
一.Linux系统上的文件类型 1.- :常规文件:在其它程序中用f表示.比如我们用ls -l命令查看的第一个内容 [root@localhost ~]# ls -l total -rw------- ...
- moco搭建json api网站用于接口测试
java -jar moco-runner-1.0.0-standalone.jar http -p 12306 -c config/conf.json 配置文件 [ { "request& ...
- [Java] Spring boot2 整合 Thymeleaf 后 去除模板缓存
Spring boot2 整合 Thymeleaf 后 去除模板缓存 网上好多文章只是简单粗暴的说,在 application.properties 做如下配置即可: #Thymeleaf cach ...
- 洛谷 P2872 【[USACO07DEC]道路建设Building Roads】
P2872 传送门 首先 题目概括:题目让着求使所有牧场都联通.需要修建多长的路. 显然这是一道最小生成树板子题(推荐初学者做). 那我就说一下kruskal吧. Kruskal算法是一种用来查找最小 ...
- bat 添加环境变量
修改环境变量 :输入 “set 变量名=变量内容”即可,比如将path设置为“d:\hacker.exe”,只要输入set path="d:\nmake.exe".注意,此修改环境 ...
- 【BigData】Java基础_数组
什么是数组?数据是可以装一组数据的变量 1.定义数组 float[] arr1 = new float[10]; // 可以装10个float数据 int[] arr2 = new int[10]; ...
- webpack4.0中文文档踩坑记录
一直没有正儿八经去看过webpack4.0的文档,前段时间工作比较轻松,于是就有了此文...面都这样一个问题:请问在您的开发生涯中,令你最痛苦最无奈的是什么?小生的回答只有一个:“阅读那些令人发指的文 ...