网络基础少不了,了解基本概念
MAC:Media Access Conctrol
网卡设备的固定且唯一的硬件地址,用于局域网通讯主机识别
IP:Internet Protocol
由网络号和主机号组成的通讯地址标识,用于界定源和目标主机
DNS:Domain Name System
1.DNS服务器是域名系统,用于解析主机名,实现基于主机名的通讯
2.全球的DNS服务器的域名数据都是相同的,备用DNS的作用是主DNS不可用时(挂掉)顶上,并非在主DNS上查找不到的域名就会使用备用DNS,linux上可配置三个DNS
路由器:router
规划主机通讯之间的最佳路径,保存于路由表中,主机的通讯路径可通过静态指定,也可以动态学习,路由器的动态学习基于路由的协议rip2(快作废)、ospf完成
进程地址:
进程的数字表示就是端口,端口用于区分不同的进程
端口port:16bit
0-1023作为保留端口,固定分配给一些服务,且只有管理员才能启用
其余的端口1024-65535动态分配
进程的地址是由IP+port组成,进程地址就是一个套接字(socket)
主机之间的网络通讯其实就是进程之间的通讯
TCP/IP协议栈:用与网络通讯的协议栈
TCP/IP分层机制:
物理层、网络层、传输层、应用层
OSI网络七层:
物理层、数据链路层、网络层、传输层、会话层、表达层、应用层
一般OSI分层作为学习使用,TCP/IP作为实际使用
网络分层的作用:
物理层:用于界定网络设备接口标准,电器特性等硬件标准
数据链路层:识别网络设备,数据校验,帧的开始和结束
网络层:IP通讯的最佳路径选择
传输层:三次握手,流量控制,丢包重传,传输协议TCP/UDP
会话层:客户端与服务端建立会话
表示层:数据传输的加密、压缩、编码等
应用层:计算机通讯之间的应用
Linux的网络配置:
计算机连入网络配置:
配置IP
配置子网掩码NETMASK
配置网关GATEWAY
配置DNS服务器
在配置好ip和netmask即可进行本地通讯,要想通过互联网通讯,就必须配置网关
(1)基于配置文件实现配置:
网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE(接口)
配置项目:
DEVICE= 设备名称
BOOTPROTO= 激活接口时使用的配置的协议属性,有dhcp,static,none
HWADDR= 网卡的硬件地址MAC
ONBOOT= 是否开机启动,yes或no
TYPE= 接口的类型,常见有Ethernet、Bridge
IPADDR= IP地址
NETMASK= 子网掩码
GATEWAY= 网关
DNS1= DNS服务器
DNS2= 备用DNS服务器
UUID= 设备的唯一标识
USERCTL= 是否允许普通用户控制此设备
PEERDNS= 如果BOOTPROTO=dhcp,是否允许shcp server分配的DNS服务器覆盖本地手动指定DNS服务器,默认为允许
NM_CONTROLLED= 是否启用NetworkManager服务控制接口,在centos6中,一般选择禁用,在centos7中可以选择启用
DNS服务器配置文件:/etc/resolv.conf
配置格式:
nameserver DNS服务器地址
如:nameserver 114.114.114.114
网络服务管理:
CentOS 6: service SERVICE { start | stop | restart | status }
CentOS 7:systemctl { start | stop | restart | status } SERVICE[.service]
修改配置文件后不能立即生效,需要重启服务
主机名配置:
# hostname HOSTNAME
配置文件:
/etc/sysconfig/network
(2)使用命令配置
iproute家族
ip命令:
ip [options] OBJECT { COMMAND | help }
OBJECT:{link|addr|route|netns}
OBJECT可简写,OBJECT子命令也可简写
接口属性修改:
ip link set [dev] DEVICE <device attributes设备属性>
{ up | down }:开启或关闭的设备
multicast { on | off }:开启或关闭多播功能
mtu NUM:指定传输数据帧的最大值,默认为1500
name NMAE:修改设备名称
netns PID:
ip link show:display device attributes显示设备属性
ip link help:查看简要帮助
示例:
显示设备属性
[[email protected]‘s linux ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff [[email protected]‘s linux ~]#
修改接口数据帧大小
[[email protected]‘s linux ~]# ip link set mtu 3000 dev eth0 [[email protected]‘s linux ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff
接口IP管理:
ip addr { show | add | delete | flush } [IFADDR] dev IFACE
ip addr show:显示接口的ip地址
ip addr add:给接口添加ip地址
label NAME:给指定的ip设置别名(ethx:y)
scope {global|link|host}:设置接口的作用域
global:全局可用
link:接口可用
host:本机可用
IP设置格式:172.168.0.0/16(之网码的位数)
ip addr del:删除接口的ip地址
ip addr flush:清空接口的所有ip地址
ip addr flush to [网络地址]:清除指定的地址
如要清掉192.168.16.1/16=flush 192.16.0.0/16
注意:单个接口添加多个IP地址使用命令实现,可指定别名,也可以编辑配置文件,文件命名要使用接口别名ethx:y
示例:
显示接口IP地址
[[email protected]‘s linux ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0 inet6 fe80::20c:29ff:fe7b:7963/64 scope link valid_lft forever preferred_lft forever
在指定接口添加IP
[[email protected]‘s linux ~]# ip addr add 192.168.0.10/24 dev eth0 [[email protected]‘s linux ~]# ip addr show 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0 inet 192.168.0.10/24 scope global eth0 inet6 fe80::20c:29ff:fe7b:7963/64 scope link valid_lft forever preferred_lft forever
给添加的IP地址指定标签
[[email protected]‘s linux ~]# ip addr add 192.168.10.100/32 label eth0:1 dev eth0 [[email protected]‘s linux ~]# ip addr show 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0 inet 192.168.0.10/24 scope global eth0 inet 192.168.10.100/32 scope global eth0:1 (别名添加) inet6 fe80::20c:29ff:fe7b:7963/64 scope link valid_lft forever preferred_lft forever
清除指定IP
[[email protected]‘s linux ~]# ip addr show 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0 inet 192.168.0.10/24 scope global eth0 inet 192.168.10.100/32 scope global eth0:1 inet6 fe80::20c:29ff:fe7b:7963/64 scope link valid_lft forever preferred_lft forever [[email protected]‘s linux ~]# ip addr flush to 192.168.0.0/24 eth0 (执行flush操作) [[email protected]‘s linux ~]# ip addr show valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0 inet 192.168.10.100/32 scope global eth0:1 inet6 fe80::20c:29ff:fe7b:7963/64 scope link valid_lft forever preferred_lft forever
路由表配置:
ip route:routing table management路由表管理
ip route add:添加路由
ip route delete:删除路由
ip route change:修改路由
ip route replace:修改或新增新路由(替换)
ip route flush:清除路由表
ip route add default via GW:添加默认路由
路由添加:
ip route add 目标网络 via GW网关 [dev IFACE] [src SOURCE_IP]
例:ip route add 192.168.0.0 via 172.18.0.1 dev eth0
解释:添加路由,即建立一个路由条目,记录访问目标网络下一跳(nexthop)的地址(网关),注意!是目标网络,不是目标ip地址,如IP:192.168.0.12/24,我们添加路由时目标网络应该是192.168.0.0/24,192.168.0.0/24代表了此网段的所有IP地址
注意:
添加路由时填写的网关必须是与本地接口中的某一IP相同网段的地址
示例:
添加路由
[[email protected]‘s linux ~]# ip route add 192.168.0.0/24 via 172.18.0.1 [[email protected]‘s linux ~]# ip route show 192.168.0.0/24 via 172.18.0.1 dev eth0 (添加的路由) 172.18.0.0/16 dev eth0 proto kernel scope link src 172.18.0.144 metric 1 default via 172.18.0.1 dev eth0 proto static (默认网关) [[email protected]‘s linux ~]#
删除路由
[[email protected]‘s linux ~]# ip route show 192.168.0.0/24 via 172.18.0.1 dev eth0 172.18.0.0/16 dev eth0 proto kernel scope link src 172.18.0.144 metric 1 default via 172.18.0.1 dev eth0 proto static [[email protected]‘s linux ~]# ip route delete 192.168.0.0/24 (删除) [[email protected]‘s linux ~]# ip route show 172.18.0.0/16 dev eth0 proto kernel scope link src 172.18.0.144 metric 1 default via 172.18.0.1 dev eth0 proto static [[email protected]‘s linux ~]#
网络名称空间管理:
ip netns:manage network namesapce管理网络名称空间
ip netns list:列出所有的netns
ip netns add NAME:创建netns
ip netns del NAME :删除指定netns
ip netns exec NAME COMMAND:在指定的netns中运行命令
注意:centos6中可能没有netns命令,centos7中可以使用
示例:
创建一个名称空间
[[email protected]‘s linux ~]# ip netns add new_network [[email protected]‘s linux ~]# ip netns list new_network newnet [[email protected]‘s linux ~]#
在指定名称空间运行命令
[[email protected]‘s linux ~]# ip netns exec new_network ip link show 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 [[email protected]‘s linux ~]#
ss命令:用于显示套接字(socket)状态
ss [option...] [FLITER]
option:
-t:查看tcl协议相关的连接
-u:查看udp协议相关的连接
-n:以数字形式查看
-l:查看处于监听状态的连接
-a:查看所有状态的连接
-p:显示连接的相关进程
-m:显示连接的内存使用情况
-e:显示扩展信息
-w:显示raw socket相关连接
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
如:ss -o state established ‘( dport = :22 or sport = :22 )‘
示例:
查看处于监听状态TCP连接
[[email protected]‘s linux ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::22 :::* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 128 ::1:631 :::* [[email protected]‘s linux ~]#
查看UDP连接
[[email protected]‘s linux ~]# ss -unl State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:631 *:* [[email protected]‘s linux ~]# UDP协议是不建立会话的
显示所有状态连接的启动程序
[[email protected]‘s linux ~]# ss -anp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::22 :::* users:(("sshd",2201,4)) LISTEN 0 128 *:22 *:* users:(("sshd",2201,3)) LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",1996,7)) LISTEN 0 128 ::1:631 :::* users:(("cupsd",1996,6)) ESTAB 0 52 172.18.0.144:22 172.18.17.1:14239 users:(("sshd",33586,3)) [[email protected]‘s linux ~]#
查看所有22号端口建立的连接
[[email protected]‘s linux ~]# ss -o state established ‘( dport = :22 or sport = :22 )‘ Recv-Q Send-Q Local Address:Port Peer Address:Port 0 52 172.18.0.144:ssh 172.18.17.1:9039 timer:(on,319ms,0) [[email protected]‘s linux ~]#