TCP/IP
的协议栈,而这个协议栈是计算机真正使用的协议栈,以分层的概念将复杂问题进行切割,每层都有其相关的协议,都能够独立且相互调用可以协作完成。该协议栈共有四层,分别为物理层、互联网层、传输层及应用层进行组合。而对于底层来讲,作为运维的话我们无需掌握很多,不过我们也必须稍微进行一个了解,比如在互联网层中最为最重要的协议是IP
协议,而在传输层中最为重要的协议为TCP、UDP
,而在应用层所涉及的协议就非常的多,比如http、https、ftp、ldap...
,这就是为什么TCP/IP
被称之为一个协议栈的原因。我们也讲到了,两台主机通信时一定要遵守某种协议进行通信,彼此之间要使用某种协议规范来进行通信,像物理层(或叫数据链路层)它们的数据报文格式是以太网帧,而互联网层的数据报文为IP报文,或者叫做IP包,传输层的数据报文叫做传输层数据报文,但不会进行独立传输,我们只需记住在链路层是用以太网帧进行封装报文,而在互联网层是用IP报文来进行封装。
当传输一个或多个文件时,首先就会打散成一个一个的包,拆分报文进行传输,而后添加应用层、传输层首部、IP首部及以太网帧,一个大文件会被拆分成n个小片,一片一片的发送,任何一片发送错误,只需重新传输该片就可以了,因为以太网帧有最大传输单元(MTU
),最大存储为1500个字节,由于最大传输单元也要封装帧首部或其它首部等,所以留给IP报文也就不到约1400个字节。
而后又讲述了Linux的网络配置方案,第一种方案是以命令的方式来进行配置,立即送往内核,但不会永久有效。第二个方案就是修改配置文件,能够永久有效包括下一次启动时也能有效,但不会立即生效,所以需要让内核强制重读该配置文件才可以生效。
以上就是总结内容,那么在这一章中继续讲述Linux网络属性配置。
那么在上一章当中我们讲述了及介绍了网络配置命令的几大家族,现在我们开始讲解第一个,名称姑且叫做ifcfg
家族。这个命令家族是一个很古老的家族,各大发行版中都会有它的身影,不过也要面向逐渐淘汰的命运。因为该命令家族的功能很薄弱,虽然伴随着Linux度过了许多岁月,但是毕竟有了新的家族逐渐替代撼动这个家族,那么在这个ifcfg家族中有那么几种命令:
ifcfg家族:ifconfig, route, netstat
我们先来说第一个命令,ifconfig
命令,该命令可以查看某个接口的IP等信息,对于我们来讲,在没有跟上任何参数时,能够显示当前主机上所有活动接口上的状态,我们需要注意的是,只关注最后一行的errors
和dropped
,意思为传输的错误个数以及被丢弃的个数是否有异常情况的发生,CentOS 6和7版本的跨度是非常大的,-a
的选项是显示所有接口,包括非活动状态的接口,那么该命令的简单用法为:
ifconfig命令:接口及地址查看和管理 ifconfig [INTERFACE] # ifconfig -a:显示所有接口,包括inactive状态的接口;
ifconfig还可以实现地址配置功能,配置时有两种方式进行选择,如果网卡始于未激活的状态,我们可以用up
命令来进行激活,用于配置IP地址及掩码。需要注意的是,才用命令的方式用来配置IP地址及掩码,立即送入内核并开始立即生效,当已经有原来的地址时,则会被冲刷掉。
ifconfig interface [aftype] options | address ... # ifconfig IFACE IP/MASK [up|down] # ifconfig IFACE netmask NETMASK oprions: [-]promisc:混杂模式; 注意:立即送往内核中的TCP/IP协议栈,并生效;
示例:
# ifconfig ens36 192.168.163.128/24 up # ifconfig ens36 192.168.163.128 netmask 255.255.255.0
我们还可以使用改名了去添加或删除IPv6
的地址,不过我们只需了解即可。
管理IPv6地址: add addr/prefixlen del addr/prefixlen
接下来说的是route命令,该命令是路由查看及管理的命令,任何一个主机需要跨网络,而非本地通信时,如果不用那么麻烦的话,可以添加一个默认网关就可以了,使得该主机夸网络通信时由该网关进行转发,我们可以在主机上添加路由条目类型。
route命令:路由查看及管理 路由条目类型: 主机路由:目标地址为单个IP; 网络路由:目标地址为IP网络; 默认路由:目标为任意网络, 0.0.0.0/0.0.0.0
要想查看及管理路由的话,我们需要使用route
命令,最简单的查看使用route -n
,以数字格式进行查看,不然的话就会显示出主机名,并不建议这样直接查看主机名。
查看: # route -n -n:以数字方式查看路由信息,而不要反解析地址和端口号;
而管理也无非就是增、删、查、改,而查看我们已经说完了,我们现在先讲述一下如何添加路由。
那么添加路由的格式为使用route
命令添加一个网络或主机路由,target
则表示网络地址是什么,掩码可以省略,如果添加掩码用netmask
就可以了,而后使用gw
指明下一跳地址,而下一跳就是到达目的地需要经过那个下一跳的地址,此前也讲过A主机到达B主机时,要经过R1的路由的1号接口,说明一定要找自己最近的,意思为主机的IP一定要与路由的网关相同,因为我们所指的网关一定是在同一网段内的主机地址,这也就意味着A主机的主机地址一定要与R1的1号接口路由地址相同,不然无法通信也就没有办法进行下一跳的转发。而后,到达那个网络时,需要从哪个接口进行发送。
例如:我们添加一个路由条目到达为10.0.0.0/8的网络地址,要经过192.168.163.1这么一个下一跳的地址。
# route add -net 10.0.0.0/8 gw 192.168.163.1
假如我们的主机没有默认网关,需要添加时,则可以:
# route add default gw 192.168.163.1 # route add -net 0.0.0.0/0.0.0.0 gw 192.168.163.1
如果达到某个单个主机,使用-host
就可以了,其它的没有什么特别之处。
添加: route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If]
那么接下来如何删除路由,一般而言这里很少修改,只是删除在添加,而删除的方式比添加的方式还要简单,因为可以不用指下一跳是那个地址。
删除: route del [-net|-host] target [gw GW] [netmask Nm] [[dev] If]
删除刚才添加的两个网关:
# route del -net 10.0.0.0.0/8 gw 192.168.163.1 # route del default
netstat
命令是可以显示网络连接状态以及路由表及接口状态等一个功能非常强大的命令,在这里我们简单介绍一下。
netstat命令 显示路由表:netstat -rn -r:显示内核路由表; -n:以数字格式显示; 显示网络连接: netstat [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p] -t:TCP协议的相关连接,连接均有其状态;FSM(Finate State Machine)有限状态机; -u:UDP相关的连接; -w:raw socket相关的连接; -l:处于监控状态的连接; -a:所有状态; -n:以数字格式显示IP和Port; -e:扩展格式; -p:显示相关的进程及PID; 常用组合: -tan, -uan, -tnl, -unl, -tunlp
TCP和UDP的区别在于,一个是有连接的,一个无连接。
传输层协议: tcp:面向连接的协议;通信开始之前,要建立一个虚链路;通信完成之后还要拆除连接; udp:无连接的协议;直接发送数据报文;
我们还可以使用该命令显示接口及相关的统计数据。
显示接口的统计数据: netstat {--interfaces|-I|-i} [--all|-a] [--extend|-e] [--verbose|-v] [--program|-p] [--numeric|-n] 所有接口: netstat -i 指定接口: netstat -I<IFace>
对于CentOS来说,还有两个命令我们补充一下,两个是ifup/ifdown
命令,这两个命令用于启动和禁止网络接口的命令,但需要实现提供其网络配置文件。
ifup/ifdown命令: 注意:通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置;
那么接下来说的就是如何配置主机名,那么配置主机名的命令为hostname
,同时,查看也是使用该命令,但其配置格式为hostname HOSTNAME
,不过需要注意的是,这个主机名推送到内核也是立即生效的,要想永久有效我们可以将其写进配置文件当中,在CentOS 5和6
或之前的版本中,其配置文件为/etc/sysconfig/network
,不过在CentOS 7
中,其配置文件路径在/etc/hostname
中,而且可以使用hostnamectl命令直接设定主机名并写入配置文件中且立即永久生效。
配置主机名: hostname命令: 查看:hostname 配置:hostname HOSTNAME 当前系统有效,重启后无效; hostnamectl命令(CentOS 7): hostnamectl status:显示当前主机名信息; hostnamectl set-hostname:设定主机名,永久有效; 配置文件:/etc/sysconfig/network HOSTNAME= 注意:此方法的设置不会立即生效;但以后会一直有效;
配置DNS服务器的路径在/etc/resolv.conf
文件中,DNS就是将我们的域名解析为IP,或者将IP解析为域名也是可以的,这就是DNS服务器,在该文件中配置DNS一定要使用主机IP地址,而不能使用域名还解析,最多指向三个被当作DNS服务主机。
配置DNS服务器指向: 配置文件:/etc/resolv.conf nameserver DNS_SERVER_IP 如何测试(host/nslookup/dig): # dig -A FQDN FQDN --> IP # dig -t IP IP --> FQDN
在这个家族当中,主要涉及到两个命令,一个就是ip命令,另一个就是ss命令,ip命令包含了众多的子命令,可以说无论是配置IP还是网关,都是通过ip的子命令来完成的,是一个功能众多,且性能较好的一款工具,逐渐取代ifcfg家族,其版本号与内核的版本号相同,也是内核密切相关,因为该命令大部分是在内核直接生效的,因此与内核密切配合,如果内核有的功能无法实现,则该家族也是无法实现某些功能。
那么ip命令是一个显示/操作路由及设备,以及设置路由和隧道的一种工具,对于OBJECT来说用于管理的设备。例如地址或路由等,而该命令的单间使用格式为:
ip [OPTIONS] OBJECT {COMMAND | help } OBJECT := { link | address | route | netus } 注意:OBJECT可简写,个OBJECT的子命令也可简写;
在iproute2家族中,我们先来讲一下ip OBJECT
一类的管理命令,首先我们讲一下ip link
,它是用来完成网络设备配置的一中命令,它有许多的子命令来完成其接口的配置,一个是ip link set
另一个是ip link show
,一个为修改设备属性,另一个为显示设备属性。
在这里我们主要说的是ip link set
,跟之间讲过的ifconfig命令是很相似的,比如将某个网卡禁用,示例为:
# ip link set ens36 down
启用改成up就可以了,而后show一下就会有UP的状态。
# ip link set ens36 up # ip link show 3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 00:0c:29:d0:a9:56 brd ff:ff:ff:ff:ff:ff
那么该命令的格式如下,需要注意的时,dev关键字是可以省略的:
ip OBJECT: ip link: network device configureation ip link set - Change device attibutes ip link set { DEVICE | group GROUP } { up | down } [ multicast{ on | off} ]:启用和禁用多播功能; [ name NEWNAME ]:重命名接口; [ mtu MTU ]:设置MTU的大小,默认为1500; [ netns { PID | NETSNAME } ]:ns为namespace,用于将接口移动到指定的网络名称空间; ip link show 显示设备属性; ip link help 显示简要使用帮助;
ip netns是用于管理网络名称空间的,可将某个网卡放入到该名称空间中进行管理。
ip netns: ip - manege network namespace. ip netns list:列出所有的netns; ip netns add NAME:创建指定的netns; ip netns del NAME:删除指定的netns; ip netns exec NAME COMMAND:在指定的netns中运行命令;
示例步骤:
# ip netns add mynet # ip link set ens36 netns mynet # ip netns del mynet # ip link show
还有命令为ip address,顾名思义,就是管理网络接口上IP地址的,而管理也无非就是曾删查改等四个基本功能,我们先说第一个ip address add
,就是添加IP地址的。
ip address - protocol address management. ip address add - add new protocol address. ip addr add IPADDR dev IFACE [label NAME]:为额外的地址指明接口别名; [broadcast ADDRESS]:广播地址;会根据IP和NERMASK自动计算得到; [scope SCOPE_VALUE]: global:全局可用; link:接口可用; host:仅本机可用;
示例:(可添加多个地址)
# ip addr add 192.168.163.126/24 dev ens36 # ip addr add 10.0.0.5/8 dev ens36 # ip addr add 10.0.0.10/8 dev ens36 label ens36:1
删除ip地址的命令格式为:
ip address delete - delte protocol address. ip addr delete IFACE dev IFACE
示例:
# ip addr delete 10.0.0.10/8 dev ens36:1
查看ip地址的命令格式为:
ip address show - look at protocol addresses. ip addr show/list [IFACE]:仅显示指定接口的地址;
那么将ip地址进行冲刷或彻底清除(主/副ip地址),不支持简写的命令格式为:
ip address flush - flush protocol addresses. ip addr flush dev IFACE
下一个命令为ip route
,用于实现路由管理的命令,在这里我们简单总结一些所常用的操作,而多出的get是获取其中一条路由的指令操作。
ip-route - routing table management ip route add - add new route. ip route change - change route. ip route replace - change or add new one. ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP] ip route delete -delete route. ip route show - list routes. TYPE PREFIX ip route flush - flush routing tables. TYPE PREFIX ip route get - get a single route. ip route get TYPE PREFIX
示例:
# ip route add 192.168.163.0 via 192.168.163.1 src 192.168.163.129 # ip route add default via 192.168.163.1 # ip route delete 192.168.163.0/24 # ip route delete default # ip route get 192.168.163.0
而后接下来的命令为ss
命令,那么ss命令的使用方法基本和netstat
的使用方法是一致的,其功能的作用在这里也无需赘述,但是对比性能方面,ss命令更胜一筹,但是在平时这两个命令并没有什么特别之处,只有在特殊的环境下ss的性能更胜一筹,也就是取代netstat的原因。
ss [options] [FILETER] 选项: -t:TCP协议相关的连接; -u:UDP协议相关的连接; -w:raw socket相关的连接; -l:监听状态的连接; -a:所有状态的连接; -n:以数字格式显示; -p:相关的进行及其PID; -e:扩展格式信息; -m:内存用量; -o:计时器信息;
相比较而言,ss多出了一个FILETER
,称之为过滤器,就是只查看那种状态的连接,或者额外指明一些表达式,而且要做过多的了解之后才能进行一系列的操作,所以在这里进行一个简单介绍,需要注意的是,=
之间必须要有空格,否则就会语法错误。
FILTER := [ state STATE-FILETER ] [ EXPRESSION ] TCP常见状态: TCP FSM: LISTEN:监听; ESTABLISTEN:建立的连接; FIN_WAIT_1: FIN_WAIT_2: SYN_SENT: SYN_RECV: CLOSED: EXPRESSION: dport= sport= 示例:`( dport= :22 or sport= :22 )` # ss -tan '( dport = :22 or sport = :22 )' # ss -tan state ESTABLISHED
在之前我们讲到,无论主机是在本地通信还是跨网络通信,IP地址是一个比不可少的选择,那么将主机接入到互联网当中需要设置IP以及掩码和网关还要加上DNS服务器地址用来解析,那么我们可以使用两种方法来进行实现,第一种则是以命令的方式直接推送给内核立即生效,第二就是将我们所设置的信息写入到配置文件当中,虽然不会立即生效,但下次重启时可永久生效,也可以将所配置的网络属性信息写入到配置文件之后,让内核强制读取该配置文件则立即生效。
对于RHEL
系列的操作系统来说,该配置文件路径在:
配置文件: IP/NERMASK/GW/DNS等网卡属性配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE IFACE:接口名称; 路由的相关配置文件:/etc/sysconfig/network-scripts/route-IFACE 配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通过大量的参数定义接口的属性;可用vim等文本编辑直接修改,也可使用专用的命令进行修改;(CentOS 6: system-config-network(setup), CentOS 7:nmtui)
以上介绍了如果将网络属性进行配置的两种方式,第一个直接可用vim进行编辑,将网络定义的属性进行编辑和修改,第二个则是使用命令打开一个文本窗口,通过该文本界面可间接修改配置文件,添加配置参数时,其格式都是大写的,每个参数都有各自的意义,见名之意即可。
ifcfg-IFACE配置文件参数: DEVICE:此配置文件对应的设备名称; ONBOOT:在系统引导过程中,是否激活此接口; UUID:此设备的唯一标识; IPV6INIT:是否初始化IPv6; BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp, static, bootp, none; TYPE:接口类型,常见的有Ethernet, Bridge; DNS1:第一DNS服务器指向; DNS2:备用DNS服务器指向; DOMAIN:DNS搜索域; IPADDR:IP地址; NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度的方式指明子网掩码; GATEWAY:默认网关; USERCTL:是否允许普通用户控制此设备; PEERDNS:如果BOOTPROTO的值为"dhcp",是都允许dhcp server分配的DNS服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许; HWADDR:设备的MAC地址; NM_CONTROCOLLED:是否使用NetworkManager服务来控制接口;(建议CentOS 6更改为no)
NM_CONTROCOLLED
会在开机时自动启动一些网络服务,这个网络服务有一些功能脚本能够读取该配置文件的某些参数来配置该主机地址及掩码网关等。所以说对于网络服务共有两个,一个是network
,另一个为networkManager
,但对于CentOS 6
而言,其networkManager
并不完善,还是处于一个实验性阶段的服务,所以建议使用network
,禁用networkManager
,否则不支持某些高级功能。
我们在修改完配置文件的时候,想要立即生效的话,就要重启网络服务。
网络服务: network networkManager 管理网络服务: CentOS 6:service SERVICE { start | stop | restart | status } CentOS 7:systemctl { start | stop | restart | status } SERVICE.service 配置文件修改之后,如果要生效,需要重启网络服务; CentOS 6:# service network restart CentOS 7:# systemctl restart network.service
而对于要用到非默认网关路由配置文件路径在/etc/sysconfig/network-scripts
,以route-IFACE
进行命名。
用到非默认网关路由:/etc/sysconfig/network-scripts/route-IFACE 支持两种方式,但不可混用; (1) 每行一个路由条目; TARGET via GW (2) 每三行一个路由条目; ADDRESS#=TARGET NETMASK#=MASK GATEWAY#=NEXTHOP
2018-4-17Linux系统管理(18)(19)网络配置命令及网络配置文件
原文地址:http://blog.51cto.com/tianxie/2108272