第五十一讲——linux网络相关 本文共有10527个字,关键词: linux最主要的功能就是网络,对于一个主机来讲,IP和子网掩码是最根本的,只要有IP就得有子网掩码,然后就是网关,没有网关就只能建立本地主机通信,无法与远程主机通信。 我们有时候需要通过主机名进行通信,这叫DNS,我们需要指定一个DNS服务器,帮助我们把一个名称转换成IP,或者将IP转换成名称,所以我们要配置很多的属性。 对于linux来讲,网络功能是内核的组成部分,所以在内核空间中会有一个TCP/IP的模块,因此我们在配置一个地址的时候是在内核上生效的,只不过我们是在用户空间中使用命令去配置而已,但是我们要知道,在linux中通过命令配置的各类参数关机之重启后就会失效,使用命令修改是修改内核中的数据,保存在内核所在的内存当中,关机重启后依旧是从硬盘读取,所以需要写入配置文件。 1. 使用命令设置,会立即生效,但是不能永久有效。 2. 写入配置文件,不会立即生效,但是在下一次开机后会永久生效。或者手动重读配置文件。 网络配置不仅仅是配置IP地址,子网掩码,网关,有时候我们还需要手动指定路由,其实linux就是一个路由,我们完全可以多装几块网卡并指定路由条目,包括主机路由,网络路由。 服务器要求时时在线,因此在很多的服务器上可以将两块网卡当做一块网卡来使用,在系统内部将他们绑定起来建立起一个逻辑网卡,而后我们发送报文时通过逻辑网卡向外发送数据,可以并行使用,提高传输效率。也可以将其中的一块网卡作为冗余,至工作一块,当工作的网卡出现故障的时候,另一块网卡会顶替工作,这种方式我们称为网卡的绑定。bonding,可以绑定多块网卡,以负载均衡的方式提高传输效率。 一台linux主机接入网络需要的信息如下: IP:逻辑地址 NETMASK:子网掩码 GATEWAY:网关 HOSTNAME:主机名 DNS:服务器地址,用于解析其他主机的主机名,linux上的DNS可以有3个,DNS1,DNS2,DNS3,至少两个。 路由信息: DHCP:自动获取(动态获取)主机配置协议,DynamicHost Configuration Protocol,这是一种让DHCP服务器为其主机提供地址或者其他网络配置信息的一种服务。 当设置DHCP服务时,如果当前网络上没有DHCP服务器,则将IP设为网段中的一个地址,这个网段内的地址只能用于本地通信,没有网关,是随机配置的。 再次强调一下,网络是属于linux内核的功能。所以我们给linux主机上的网卡配置地址的话,这个地址属于内核,并不属于网卡。当一台主机上安装了多个网卡时,当通过网卡A去ping网卡B的时,主机会响应,因为地址是属于内核的,不属于网卡,只要内核发现本机有这样的地址,无论是通过哪一块网卡都会响应。 对linux而言,每一个网络接口都有一个名称。 lo:本地回环网卡,本机既作为服务器,也作为客户端,自己跟自己联系的时候用到,这个时候数据报文不发向网络,就在内存内部完成客户端到服务端。 eth:以太网网卡通常使用eth##开头,后跟数字。 ppp:点对点通信ppp##。 对于系统来讲,它所识别的每一个硬件是靠硬件设备的驱动程序,也就是是主设备号、次设备号所关联的驱动程序来识别。所以我们任何时候访问一个设备的时候都是通过设备文件来访问的,但是这样引用一个网卡的话会有诸多不便,因此,这些设备有了名称的机制。即我们在引用网卡的时候直接使用名称来引用,不用再专门制定内核驱动或者设备文件。 ifconfig:linux上非常古老的用于实现网络配置的命令,可以直接显示当前主机上处于活动状态网卡的信息,其中: scope:IP地址的作用范围, globe:全局的,对其他主机能够找到(可见) link:地址仅对当前网卡有效。 RX Packets:接收到的报文个数 dropped:丢弃的个数 overruns:溢出的个数 frame:帧数 TX Packets:传出数据包的个数 collision:有多少次发生冲突 txqueuelen:传输队列的长度 RX bytes:收到的字节数 TX bytes:传出去的字节数 Interrupt:中断号 ifconfig –a 显示所有接口的配置信息,我们也可以只显示其中一块网卡的信息,ifconfig eth0(网卡名称) 我们爱可以使用ifconfig命令给指定网卡配置IP赫尔掩码,格式为ifconfig eth# IP/MASK,其中MASK支持两种格式,255.255.255.0,24,子网掩码是必须要写的。 ifconfig eth# up 启用网卡 ifconfig eth# down 禁用网卡 如果别人ping不通,可能是防火墙之类的原因,自己ping自己可以判定内核中的TCP/IP协议栈是否正常工作,我们要确保本地通信无误。 在RHEL系列linux上,对于网络地址的管理可以通过一个内置的服务脚本来实现,在/etc/init.d/目录下的network指定该目录下的文件并键入start|restart|stop|status,可以对指定的服务开启、重启、关闭以及状态的查询。 网关:route命令(路由),route有许多的子命令。 route不带任何参数的时候是查看本地路由表。 路由表中的信息表示: flags:U表示启用状态(处于启用状态) G表示是一个网关路由,即有下一路的路由条目。 default:默认路由。 add 添加一条路由,当我们add添加一条路由时,有两种 主机路由:-host 添加一条主机路由 网络路由:-net 添加一条网络路由,当-net指向0.0.0.0时,为添加默认路由 route add –net 10.0.0.0/8 gw 192.168.10.1 gw(网关),即通过192.168.10.1能够到达10.0.0.0/8网络 没有带网关的说明为本地网络,不需要通过任何网关就能够到达的,使用格式为: route add -net|-host DEST(目标) gw NEXTHOP(下一跳) 我们也可以指定默认路由 route add default gw NEXTHOP明确说明填的是默认路由 del 删除一条路由 route del -net|-host DEST 一般来说不用指定删除条目的gw route –n以数字的方式显示(将default等转换为数字的形式)。 使用route命令做出的修改在重启服务或者主机后失效,我们之前讲过的通过命令配置的都是临时生效。我们要向永久生效,需要将配置写入相应的配置文件当中。 网络配置文件:/etc/sysconfig/network 网络接口配置文件:/etc/sysconfig/network-scripts/ifcfg-interface-name(对应网卡的名称)。 网卡的配置信息: DEVICE=关联的设备,需要与文件名的后缀同名。 BOOTPROTO=引导协议,一般来说只有四个取值(static、none、dhcp、bootp[较为古老的协议,dhcp的前身])。 static:使用静态地址,即自己配置地址 none:使用静态地址。 dhcp:使用dhcp服务自动从dhcp服务器上获取地址。 IPADDR=IP地址 NETMASK=子网掩码 GATEWAY=网关(设定网关,即默认路由) ONBOOT=是否开机时自动启动此设备 HWADDR=硬件地址,要与硬件中的地址保持一致(可以省略) USERCTL=[yes|no]是否允许普通用户控制此接口 PEERDNS=[yes|no]是否在BOOTPROTO为dhcp时接收由dhcp服务器指定的DNS地址。 当我们的BOOTPROTO=dhcp时,dhcp服务会对/etc/resolv.conf文件进行修改,如果不想由dhcp服务器上获取DNS则在网卡配置中声明PEERDNS=no即可。 修改/etc/sysconfig/network-scripts/ifcfg-interface_name文件后,不会立即生效,重启网络或者主机生效。 路由信息的添加,与route命令的添加不太相同,我们需要编辑/etc/sysconfig/network-scripts/route-eth##文件,其添加格式有两种,且两种不能够混合使用: 第一种:DEST(可以为host主机,net网络) via NEXTHOP(下一跳,网关),即从下一跳到达目标(DEST) 第二种,三个一组: ADDRESS#= NETMASK#= GATEWAY#= DNS服务器的指定,只能编辑配置文件,在interface配置文件中也可以进行修改,修改DNS的配置文件为/etc/resolv.conf 指定本地解析,即我们没有DNS,但是我们又想使用主机名去访问一个主机,我们可以编辑/etc/host文件指定本地解析,其格式为: IP地址 主机地址 别名 主机IP 主机名称 主机别名(可以省略) 当我们本地解析的时候,会先去/etc/host文件中寻找,没有时采取DNS(简单的讲就是找DNS缓存),当DNS缓存中没有的时候再去DNS服务器上寻找。 配置主机名: 命令:hostname 主机名 ——立即生效 编辑/etc/sysconfg/network HOSTNAME=主机名 重启网络服务不会影响主机名,一般重启主机才会生效。 策略路由:一个路由中有多张路由表,例如我们希望电信的用户走电信,联通的用户走联通,那么就需要使用策略路由,这样一来就会有多个默认路由,且位于不同的路由表中。 有一个软件包叫iproute2,iproute2是一个很强大的软件包,它提供了一个ip命令,ip命令下有很多的子命令。能够实现IP地址的配置,还能够实现路由的配置,以及实现路由表的管理等等强大功能,重要的是,要使用策略路由也是使用它完成的。 ip link:网络接口属性(配置) addr:协议地址 route:路由 ip –s显示额外的统计信息。 link show 查看网络接口 ip –s link show 设定网卡的功能: ip link set DEVICE{up|down|arp{on|off}} set下的子命令: promisc{on|off}混杂模式,抓包时使用 multicast{on|off}启用,关闭多播功能。 name 改名,只是当前生效 mtu 改变mtu的大小(MTU指某一通信协议的某一层面上上能通过的最大数据包大小,以字节为单位) txqueuelen PACKETS 指定传输队列的长度。 一块网卡可以使用多个地址,即网络设别可以别名。 eth0 eth0:0,eth0:1,eth0:2使用ifconfig命令也可以实现 ifconfig eth#:# IP/NETMASK ifconfig配置后只是临时生效,永久有效需要写入配置文件/etc/sysconfig/network-scripts/ifconfig-eth#:#,即新建一个文件,并且配置文件中DEVICE与文件后缀要一致。 我们需要注意的是,别名(非主要地址)不能使用dhcp动态获取地址 ip支持策略路由,而且还提供了一个tc的工具,tc可以实现流量的控制。 说一说ip相关的一些命令: ip addr add 添加,我们在使用ip命令添加地址的时候也可以指定别名 ipaddr add IPADRESS dev [DEVICE]指定设备 lableeth#:#(别名) 别名可以使用ifconfig可以进行查看,其标识为secondary(辅助地址,不是第二个) del 删除,删除的格式如下 ip addr del IPADDRESS dev DEVICE show 显示,显示时我们还可以为show指定各种显示的参数 dev NAME指定网卡的名称 to PREFIX(以网络加掩码的形式显示) to 10/8 显示10网段的IP to 192.168.3/24 显示192.168.3网络的IP label 显示某个label的地址。 flush 清除,我们使用ip addr del 一次只能删除一个地址 ip addr flush 一次可以删除一堆地址,其使用方式有些类似show,用于处理一个接口上的多个地址。 ip route 路由操作 blackhole黑洞 unreachable 不允许访问(不可达) prohibit 不允许ping 添加路由: ip route add to 10.0.0.0/8 dev eth0(通过的网卡) via 172.168.16.0.1(下一跳,通过此网关GATEWAY) 讲一讲netstat命令: netstat是网络状态/网络统计数据的命令 -r:显示路由表 -n:显示数字地址 -t:已建立的tcp连接 -u:显示udp连接,udp是无状态的,显示不出来,虽然显示不出来已经建立的连接,但是可以显示其它的连接。 -l:显示监听状态的连接 netstat的字段 proto(协议) recv-Q(接收队列) Send-Q(发送队列) local address(本地地址) Foreign address(远程地址,*:*允许任何远程主机连接当前主机) state(状态) netstat -tunl(常用选项) -p 显示监听指定的套接字的进程以及进程名 套接字:IP地址:端口号 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-01-20 评论 1574 次浏览