# 网络基本功(十三):细说Linux网络配置(下)
**转载请在文首保留原文出处:EMC中文支持论坛**[https://community.emc.com/go/chinese](https://community.emc.com/go/chinese) [![image001.gif](https://community.emc.com/servlet/JiveServlet/downloadImage/2-846990-99107/image001.gif)](https://community.emc.com/servlet/JiveServlet/showImage/2-846990-99107/image001.gif)
## 介绍
本文承接[细说Linux网络配置(上)](https://community.emc.com/message/846116#846116) 。
## 更多信息
**Linux网络硬件选项:**
**ethtool**命令查询并设置网络接口关于媒体相关的参数。如:链路速度和双工。它代替了以前的**mii-tool**命令,但有些系统中两者并存。
只要简单加上接口名就可以查询它的状态。例如,eth0接口(PC主板的网卡接口)启动了自协商并且运行于全速率:
[![image002.jpg](https://community.emc.com/servlet/JiveServlet/downloadImage/2-846990-99138/image002.jpg)](https://community.emc.com/servlet/JiveServlet/showImage/2-846990-99138/image002.jpg)
将该接口锁定在100 Mb/s全双工,使用以下命令:
```
ethtool -s eth0 speed 100 duplex full
```
如果想知道自协商在系统中是否可靠,也可以使用**ethtool –r**命令,可使链路参数立刻重新协商。
另一个有用的选项是**-k**,显示哪些协议相关任务指定给网络接口,而不是由内核执行。大多数接口能够计算校验和(checksum),一些也可以辅助分段任务。可以通过**ethtool –K**命令结合多个子选项开启或禁用特定类型的offloading(-k显示当前值,-K对其进行设置)。
通过**ethtool**所做的变更是暂时的。如果希望永久性更改,需要确保**ethtool**作为系统网络配置的一部分来运行。最好是把它作为各个接口配置的一部分,如果你只是在启动时运行一些**ethtool**命令,那么在接口重启而系统未重启时配置就无法正确生效。
注:Red Hat系统中,可以在**/etc/sysconfig/network-scripts. ifup**下的配置文件中添加一行ETHTOOL_OPTS=,以将整行作为参数传递给**ethtool**。
SUSE中ethtool的用法与Red Hat相似,但是选项名为ETHTOOL_OPTIONS,配置文件保存在**/etc/sysconfig/network。**
Ubuntu系统中,可以在 **/etc/network/interfaces**的接口配置脚本中运行**ethtool**命令。
**Linux TCP/IP选项:**
Linux将每个可调内核变量放在**/proc**虚拟文件系统中。网络变量位于**/proc/sys/net/ipv4。**以下是一些重要变量的列表:
[![image003.jpg](https://community.emc.com/servlet/JiveServlet/downloadImage/2-846990-99139/image003.jpg)](https://community.emc.com/servlet/JiveServlet/showImage/2-846990-99139/image003.jpg)
许多名字中含有rate和max的变量用作阻止服务器攻击。子目录**conf**包含按照各接口设置的变量,包括**all**和**default**以及各接口子目录(包括loopback)。各子目录包含相同的一组文件。
[![image004.jpg](https://community.emc.com/servlet/JiveServlet/downloadImage/2-846990-99140/image004.jpg)](https://community.emc.com/servlet/JiveServlet/showImage/2-846990-99140/image004.jpg)
假设用户在**conf/eth0**子目录中更改了一个变量,则变更仅适用于该接口。如果在**conf/all**中更改了变量值,你也许认为更改适用于所有接口,但实际上并非如此。每一个变量对于接收通过**all**所作的更改有各自的规则。有些是与当前值做或运算,有些是做与运算,还有些是取最大或最小值。除了内核代码以外没有文档详细说明这一过程,因此最好避免这样做,比较好的做法是对各接口分别做修改。
如果用户在**conf/default**中修改了变量,新的值会传递到所有在这之后配置的接口。另一方面,最好保持默认值不变,以供取消更改时参考。
**/proc/sys/net/ipv4/neigh**目录同样包含了各接口子目录。子目录中的文件掌控相应接口的ARP table管理以及IPv6邻居发现。以下是变量列表,以gc(代表垃圾回收)开头的变量决定ARP table表项超时以及丢弃。
[![image005.jpg](https://community.emc.com/servlet/JiveServlet/downloadImage/2-846990-99141/image005.jpg)](https://community.emc.com/servlet/JiveServlet/showImage/2-846990-99141/image005.jpg)
要查看变量值,使用**cat**命令,要进行设置,使用**echo**重定向到合适的文件名。例如:
```
ubuntu$ cat icmp_echo_ignore_broadcasts0
```
显示当变量值为0时,则广播ping不能被忽略。要将它设置为1,在 **/proc/sys/net** 中,运行
```
ubuntu$ sudo sh -c "echo 1 > icmp_echo_ignore_broadcasts"
```
通常,你登录的网络与调整的网络是同一个,所以要小心行事。在更改生产设备配置前务必在台式机上测试。
要永久更改某参数(更准确的说,系统每次启动时都重置该值),在**/etc/sysctl.conf**中添加合适的变量,这些变量在启动时由**sysctl**命令读取。文件**sysctl.conf**的格式是_变量名__=值_,而不是手动在shell中修改的格式**echo value > variable**。变量名是相对于**/proc/sys**的路径,可以用点或斜杠。例如:
**/etc/sysctl.conf** 文件中,
```
net.ipv4.ip_forward=0
net/ipv4/ip_forward=0
```
都会将主机IP转发关闭。
同时,内核源版本中的 **ip-sysctl.txt**文件也有一些比较好的注释信息。
## 参考
Unix and Linux System Administration Handbook
- 介绍
- 网络基本功(一):细说网络传输
- 网络基本功(二):细说交换机
- 网络基本功(三):细说VLAN与Trunk
- 网络基本功(四):细说路由(上)
- 网络基本功(五):细说路由(下)
- 网络基本功(六):链路聚合
- 网络基本功(七):细说IP地址与子网
- 网络基本功(八):细说TCP滑动窗口
- 网络基本功(九):细说TCP重传
- 网络基本功(十):细说TCP确认机制
- 网络基本功(十一):TCP窗口调整与流控
- 网络基本功(十二):细说Linux网络配置(上)
- 网络基本功(十三):细说Linux网络配置(下)
- 网络基本功(十四):细说诊断工具ping
- 网络基本功(十五):细说网络性能监测与实例(上)
- 网络基本功(十六):细说网络性能监测与实例(下)
- 网络基本功(十七):细说tcpdump的妙用(上)
- 网络基本功(十八):细说tcpdump的妙用(下)
- 网络基本功(十九):细说NAT原理与配置
- 网络基本功(二十):细说ICMP和ARP
- 网络基本功(二十一):细说HTTP(上)
- 网络基本功(二十二):细说HTTP(下)
- 网络基本功(二十三):Wireshark抓包实例诊断TCP连接问题
- 网络基本功(二十四):Wireshark抓包实例分析TCP重传
- 网络基本功(二十五):Wireshark抓包实例分析TCP重复ACK与乱序
- 网络基本功(二十六):Wireshark抓包实例分析TCP窗口及reset
- 网络基本功(二十七):Wireshark抓包实例分析HTTP问题(上)
- 网络基本功(二十八):Wireshark抓包实例分析HTTP问题(下)
- 网络基本功(二十九):Wireshark抓包实例诊断数据库常见问题
- 网络基本功(三十):细说DNS(上)
- 网络基本功(三十一):细说DHCP