网际协议第四版(IPv4),IP地址由4个字节(32位)组成。人们为了方便,常用点四分组序列来表示一个IP地址,形如a.b.c.d,比如192.168.1.1。a和d的范围都是1~254,b和c的范围都是0~255。
1. 查看本机IP地址
ifconfig 或者 ip addr
centos 7 没有ifconfig 命令需要用 yum install net-tools安装,如果不知道安装哪个包可以用命令 yum provides ifconfig查看。 ip addr 功能更强大。
[root@docker112 ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.108 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe96:3d66 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:96:3d:66 txqueuelen 1000 (Ethernet)
RX packets 143 bytes 16862 (16.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 87 bytes 6707 (6.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno33554992: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.174.141 netmask 255.255.255.0 broadcast 192.168.174.255
inet6 fe80::20c:29ff:fe96:3d70 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:96:3d:70 txqueuelen 1000 (Ethernet)
RX packets 1066 bytes 73465 (71.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 144 bytes 21527 (21.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中eno16777736、eno33554992是网卡设备名。lo是一个虚拟网络接口,指向自己。一块网卡上也可以配置多个地址,Redhat/centos在/etc/sysconfig/network-scripts目录有一个与之对应的配置文件。如eno33554992有一个ifcfg-eno33554992文件
[root@docker112 network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@docker112 network-scripts]# ls -l ifcfg-eno33554992
-rw-r--r-- 1 root root 335 10月 17 03:57 ifcfg-eno33554992
[root@docker112 network-scripts]# more ifcfg-eno33554992
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno33554992
UUID=1ddcb28a-33b3-4eaf-bade-7f84af7ee837
DEVICE=eno33554992
ONBOOT=yes
IPADDR=192.168.174.141
NETMASK=255.255.255.0
[root@docker112 network-scripts]#
增加一个配置文件ifcfg-eno33554992:0,用ifdown和 ifup重启网卡,增加的ip就生效了
cp ifcfg-eno33554992 ifcfg-eno33554992:0
[root@docker112 network-scripts]# cat ifcfg-eno33554992:0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno33554992:0
UUID=1ddcb28a-33b3-4eaf-bade-7f84af7ee837
DEVICE=eno33554992:0
ONBOOT=yes
IPADDR=192.168.175.141
NETMASK=255.255.255.0
[root@docker112 network-scripts]#
ifdown ifcfg-eno33554992 && ifup ifcfg-eno33554992
用mii-tool工具可以查看网卡连接
[root@docker112 network-scripts]# mii-tool eno16777736
eno16777736: negotiated 1000baseT-FD flow-control, link ok
[root@docker112 network-scripts]#
2. 路由
直观地理解,一个子网就是一组相互连接的、有序排列的IP地址的主机。能够将数据从一个子网送到另一个子网的主机叫做路由器(也叫网关)。一个子网内的主机可以直接访问同一子网内的其它主机,但要访问其它子网的主机就需要通过路由器或网关。因此每台主机上都有路由表,用route -n 可以打印路由表。
[root@docker112 network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno16777736
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736
192.168.174.0 0.0.0.0 255.255.255.0 U 100 0 0 eno33554992
192.168.175.0 0.0.0.0 255.255.255.0 U 100 0 0 eno33554992
[root@docker112 network-scripts]#
Destination表示网络号,Genmask表示子网掩码。每一行的Flags都有一个U,表示都是活动的。第一行的Flags有一个G表示需要通过192.168.1.1才能到达。发包个191.168.1.1机器时,内核判断195.168.1.0/24与地址192.168.1.1共用了24个地址位,而0.0.0.0共用了0个地址位,所以优先选第二条。第一条路由0.0.00/24能匹配所有IP,称为默认路由,Geteway对应的地址称为默认网关。
用route add 增加路由,用route del删除路由。centos7可用 ip route来操作。
[root@docker112 network-scripts]# route add -net 192.168.11.0/24 gw 192.168.1.3
[root@docker112 network-scripts]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 100 0 0 eno16777736
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736
192.168.11.0 192.168.1.3 255.255.255.0 UG 0 0 0 eno16777736
192.168.174.0 0.0.0.0 255.255.255.0 U 100 0 0 eno33554992
192.168.175.0 0.0.0.0 255.255.255.0 U 100 0 0 eno33554992
[root@docker112 network-scripts]#
3. ping、traceroute、host和nslookup
ping 最常见的网络调试工具,它发送ICMP报文给一台主机,接收者会回送报文。
[root@docker112 network-scripts]# ping www.163.com
PING 163.xdwscache.ourglb0.com (58.222.19.61) 56(84) bytes of data.
64 bytes from 58.222.19.61: icmp_seq=1 ttl=56 time=8.78 ms
64 bytes from 58.222.19.61: icmp_seq=2 ttl=56 time=9.10 ms
64 bytes from 58.222.19.61: icmp_seq=3 ttl=56 time=9.16 ms
^C
发送的报文56byte,包括头部为84byte,返回的报文为发送的报文+8,如果漏掉序号,则表示网络出问题。
traceroute显示数据包到达目标主机的路径,但有一些路由会拒绝返回这些信息。
[root@docker112 network-scripts]# traceroute -n www.163.com
traceroute to www.163.com (58.222.19.61), 30 hops max, 60 byte packets
1 192.168.1.1 4.172 ms 4.223 ms 4.234 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *^C
[root@docker112 network-scripts]#
host和nslookup根据主机名返会主机的地址
[root@docker112 network-scripts]# host www.163.com
www.163.com is an alias for www.163.com.lxdns.com.
www.163.com.lxdns.com is an alias for 163.xdwscache.ourglb0.com.
163.xdwscache.ourglb0.com has address 222.186.132.123
163.xdwscache.ourglb0.com has address 58.222.19.61
163.xdwscache.ourglb0.com has address 222.184.34.54
[root@docker112 network-scripts]# nslookup www.163.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
www.163.com canonical name = www.163.com.lxdns.com.
www.163.com.lxdns.com canonical name = 163.xdwscache.ourglb0.com.
Name: 163.xdwscache.ourglb0.com
Address: 222.186.132.123
Name: 163.xdwscache.ourglb0.com
Address: 58.222.19.61
Name: 163.xdwscache.ourglb0.com
Address: 222.184.34.54
4. NetworkManager
NetworkManager是一个守护进程,自动配置网络。nmcli是管理NetworkManager的命令行工具。
[root@docker112 network-scripts]# service NetworkManager status
Redirecting to /bin/systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2016-10-17 03:57:36 CST; 3h 43min ago
Main PID: 696 (NetworkManager)
CGroup: /system.slice/NetworkManager.service
├─696 /usr/sbin/NetworkManager --no-daemon
└─721 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eno16777736.pid -lf /var/lib/NetworkManager/dhclient-ce5b2d02-...
[root@docker112 network-scripts]# tree /etc/NetworkManager
/etc/NetworkManager
├── conf.d
│ └── 10-ibft-plugin.conf
├── dispatcher.d
│ ├── 00-netreport
│ ├── 11-dhclient
│ ├── pre-down.d
│ └── pre-up.d
├── dnsmasq.d
├── NetworkManager.conf
├── system-connections
└── VPN
7 directories, 4 files
[root@docker112 network-scripts]#
5.域名查找相关的配置文件
/etc/hosts 主机名查找
/etc/resolv.conf 指定DNS服务器
[root@docker112 network-scripts]# more /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
[root@docker112 network-scripts]#
/etc/nsswitch.conf 优先级设定
6.端口
同一台主机上,不同的网络应用使用不同的端口。用netstat命令可以查看。
[root@docker112 network-scripts]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 971/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1050/master
tcp6 0 0 :::22 :::* LISTEN 971/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1050/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 721/dhclient
udp 0 0 0.0.0.0:2449 0.0.0.0:* 721/dhclient
udp6 0 0 :::42899 :::* 721/dhclient
[root@docker112 network-scripts]#
/etc/services文件中定义的网络服务的端口。