Highlighted
Zhang_Jiawen
4 Beryllium

Re: 网络基本功系列:细说网络那些事儿(10月29日更新)

网络基本功(十三):细说Linux网络配置(下)

转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese image001.gif

介绍

本文承接细说Linux网络配置(上)


更多信息

Linux网络硬件选项:

ethtool命令查询并设置网络接口关于媒体相关的参数。如:链路速度和双工。它代替了以前的mii-tool命令,但有些系统中两者并存。

只要简单加上接口名就可以查询它的状态。例如,eth0接口(PC主板的网卡接口)启动了自协商并且运行于全速率:

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

SUSEethtool的用法与Red Hat相似,但是选项名为ETHTOOL_OPTIONS,配置文件保存在/etc/sysconfig/network

Ubuntu系统中,可以在 /etc/network/interfaces的接口配置脚本中运行ethtool命令。

Linux TCP/IP选项:

Linux将每个可调内核变量放在/proc虚拟文件系统中。网络变量位于/proc/sys/net/ipv4以下是一些重要变量的列表:

image003.jpg

许多名字中含有ratemax的变量用作阻止服务器攻击。子目录conf包含按照各接口设置的变量,包括alldefault以及各接口子目录(包括loopback)。各子目录包含相同的一组文件。

image004.jpg

假设用户在conf/eth0子目录中更改了一个变量,则变更仅适用于该接口。如果在conf/all中更改了变量值,你也许认为更改适用于所有接口,但实际上并非如此。每一个变量对于接收通过all所作的更改有各自的规则。有些是与当前值做或运算,有些是做与运算,还有些是取最大或最小值。除了内核代码以外没有文档详细说明这一过程,因此最好避免这样做,比较好的做法是对各接口分别做修改。

如果用户在conf/default中修改了变量,新的值会传递到所有在这之后配置的接口。另一方面,最好保持默认值不变,以供取消更改时参考。

/proc/sys/net/ipv4/neigh目录同样包含了各接口子目录。子目录中的文件掌控相应接口的ARP table管理以及IPv6邻居发现。以下是变量列表,以gc(代表垃圾回收)开头的变量决定ARP table表项超时以及丢弃。

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

             

0 项奖励
kinolucky163
1 Nickel

Re: 网络基本功系列:细说网络那些事儿(10月29日更新)

Hi,能不能简单普及一下数据是如何在物理层传输的?比如1个字节的8位是如何转换成电子信号传输的?如果超过网线距离的限制,会怎么样,当中是发生了什么?数据丢包是如何产生的?想不明白如果一端发送了数据,另一端为什么会收不到,如果不跨路由器之类的?如果想了解的话,是不是需要看数字电子、模拟电子、电子通信方面的书?

0 项奖励
Zhang_Jiawen
4 Beryllium

Re: 网络基本功系列:细说网络那些事儿(10月29日更新)

丢包的常见原因,举个例子来说:双11快递包裹数量剧增,来不及传输,于是造成仓库积压,当仓库积满了无法再继续承载包裹,于是多余的包裹就只能丢弃了。

0 项奖励
Zhang_Jiawen
4 Beryllium

Re: 网络基本功系列:细说网络那些事儿(10月29日更新)

数据在底层的传输,从硬件角度来看就是从芯片的某一引脚输出高低电平经各总线到另一芯片(或至外部总线),再底层的我不在行了。其实看完全部这些书也不一定对实际工作有多大帮助,不过确实没有快速入门的方法,最好是从工作中积累。

0 项奖励
kinolucky163
1 Nickel

Re: 网络基本功系列:细说网络那些事儿(10月29日更新)

谢谢回复!对于丢包,发送端发送数据给接收端,发送端认为发送出去了,接收端没收到,有点好奇这种丢包会在哪几个环节发生。 发送端将数据组成帧(假设这个包只有一个帧),芯片负责将帧数据转换成高低电压, 按说接收端一定会感知到这些高低电压, 再转换成数据,不应该丢啊。是不是接收端一定会收到,只是没地方放,才会丢包?

0 项奖励
Zhang_Jiawen
4 Beryllium

Re: 网络基本功系列:细说网络那些事儿(11月3日更新)

如果在接收端直接量数据电平信号,是能量得出来的。只是芯片发现buffer不够,或校验发现数据出错等情况,会做出将数据丢弃的决定。只是这种决策不发生在物理层。

0 项奖励
kinolucky163
1 Nickel

Re: 网络基本功系列:细说网络那些事儿(10月29日更新)

谢谢,明白了!

0 项奖励
xixihaha
1 Copper

Re: 网络基本功系列:细说网络那些事儿(11月3日更新)

看完《网络基本功(五):细说路由(下)》有个疑问:

路由器有动态学习,即使不相连,也可以学习。那岂不是每个路由器都有整个互联网的路由信息??

0 项奖励
Zhang_Jiawen
4 Beryllium

Re: 网络基本功系列:细说网络那些事儿(11月3日更新)

动态路由协议其实是相邻路由器之间定期发送状态更新,但关键是从每一台路由器的局部网络信息中需要用算法推出整个网络的结构。

0 项奖励
Roger_Wu
5 Tungsten

Re: 网络基本功系列:细说网络那些事儿(11月3日更新)

理论上是啊,不过呢,路由表是可以聚合的,几十个甚至上百个C段地址在上层甚至骨干网路由器上合并成一个B段地址就行了。

0 项奖励