网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输;实现两个不同网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等
;负责在不同的网络之间(基于数据包的IP地址)尽力转发数据包,不负责丢包重传和接收顺序
。
在IPv4中IP地址由32位二进制数表示,分为四个8位字节,以点分开,十进制表示
在IPv6中IP地址由128位二进制数表示,分为八个16位字节,以冒号分隔的十六进制表示。
IP地址由网络部分(NETWORK)和主机部分(HOST)两部分组成
A类:1~127 真正使用的范围:1~126
127开头的地址127.0.0.1,给本地环回地址使用了,主要用于测试tcp/ip协议 loopback --》任何一台电脑都有(windows、linux、mac os等)代表本地地址
B类: 128~191
C类: 192~223
D类: 224~239 属于组播地址
2层的组播: mac地址里的第8位为1的地址,交换机收到2层组播地址,会每个接口都转发
3层的组播:ip地址里的E类地址
E类:240~255保留的用于科学研究
在一个局域网中,lan口使用的是私有IP,wan口是公有IP;私有IP不能在Internet上使用
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
NAT (Network Address Translation) 即网络地址转换,是一种在IPv4网络中实现内部网络与外部网络之间通信的技术;通过将内部网络中的私有IP地址转换为公网IP地址,实现内部设备与外部网络的通信。
子网掩码的作用:就是用来确定一个ip地址的网络部分(网段)
子网掩码和ip地址进行与运算可以得到ip地址的网段号(网络部分)
A、B、C类的网络默认子网掩码:
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
gateway,又叫做网间连接器、协议转换器。网关(Gateway)就是一个网络连接到另一个网络的关口
只是一个概念,不是一个实质性的产品
不同网段的相互通信需要经过网关,相同网段不需要;本质上网关其实就是路由器的LAN口
既可以用于广域网互连,也可以用于局域网互连
网关地址即默认网关,如路由器、交换机等设备的IP地址;网关的ip地址,可以是有效ip地址段里的任意一个ip,但是我们一般会使用第1个ip或者最后一个ip地址,这是默认的规矩
路由器,三层交换机,防火墙都是一个网关设备
均匀划分
题目1:
计算172.64.125.178/26地址的子网地址和广播地址,子网掩码,整个子网有效的ip地址范围.
提示:先算出网段号 + 子网容纳的主机数 —》ip地址段 和广播地址 子网掩码
题目2:
计算172.64.125.178/18 地址的子网地址和广播地址,子网掩码,整个子网有效的ip地址范围.
不均匀划分
题目:
将192.168.120.0/24 划分出4个子网,一个子网需要容纳110台电脑,另外的一个子网容纳60,另外的2个子网容纳30台;写出每个子网的网段号 子网掩码,有效ip地址段,广播地址.
优先级与服务类型,提供3层Qos(服务质量 Quality of Service)
TTL: 生命周期 time to live ip包可以在网络上生存多久
ip包每经过一个路由器ttl值就要减1,防止数据包一直在网络上传输,消耗网络带宽
路由器收到ttl值为0的数据包的时候,就会丢弃这个数据包
协议字段,用来标识封装的上层数据是UDP还是TCP,UDP是17,TCP是6
从一个地方到另外一个地方,可能有很多条路,接下来我们需要选择最快最好的路,如何判断那条路好内,就需要很多的理由,根据合理的理由选择最好最快的路的设备–》路由器
路由器里有个表叫路由表,路由表里有目标网段,从路由器的那个接口送出去
路由表里的一条记录就是一个条目
如果在路由表里没有找到合适的路由条目,丢失数据,不进行转发
路由器中维护的路由条目的集合
路由器根据路由表做路径选择
Linux查看路由表
[root@lb2 ~]# ip route
windows里查看路由表
C:\Users\admin>route print
1.直连路由: 直接连接的路由 connected
1.1 给路由器的接口需要配置ip
1.2 接口链路需要up,接口需要激活
链路: up(起来了,连接上了,通了) shutdown(关闭)
非直连路由
2.静态路由: 需要人(管理员)手工添加的 static,是单向的
适合于比较小的网络
不直连的网络,都需要添加
Router(config)#ip route 192.168.10.0 255.255.255.0 192.168.20.1
目标网段 目标网段的子网掩码 下一跳地址
下一跳地址:是对方路由器的接口的ip地址,对方的ip地址和自己的路由器接口的ip地址是相同网段
3.默认路由: 属于特殊的静态路由,在路由表找不到合适的路由的时候,就走默认路由
也是需要人配置的,在电脑里添加默认网关,其实就是添加一条默认路由
4.动态路由: 是路由器互相之间学习路由条目,自动在路由表里生成,不需要人去添加
适合于比较大的网络
内部网关协议 IGP
rip 度量标准:跳数 小型网络,最大15跳
ospf 度量标准:带宽,速度,时延 大型网络
外部网关协议 EGP
路由的优先级:
直连路由--->静态路由--->动态路由--->默认路由
如果没有默认路由,找不到合适的路由条目,路由器会丢失数据,不转发
ip add 查看ip地址
直连路由 ip address(可简写add) add 192.168.227.144/24 dev ens33
静态路由 ip route add 192.168.227.144/24 via 192.168.88.2
删除静态路由 ip route del 192.168.200.0/24 via 192.168.88.2
删除默认路由 ip route del default via 192.168.88.88
选项
-s 数据包大小 size
-c 数量 count
-i 时间间隔 interval 默认1秒
-w 超时 deadline
发送四个包,中间间隔时间0.1秒
[root@localhost ~]# time 114.114.114.114 -c 5 -i 0.1
发送四个包,超时时间1秒
[root@localhost ~]# time 114.114.114.114 -c 5 -w 1
过程
1.A主机会拿B主机的ip地址和自己的子网掩码进行与运算得到网段号192.168.2.0
2.A主机会到自己的路由表里查询是否可以到达192.168.2.0 网段,发现有一条默认路由可以走,于是就选择走默认路由
0.0.0.0 0.0.0.0 192.168.1.1
192.168.1.0
3.查询默认默认的下一条地址(网关)的ip地址,然后就到arp缓存表里查询网关192.168.1.1的mac地址,如果有就直接使用,如果没有,就发arp广播
4.先封装ip包,源ip是192.168.1.2,目的ip是192.168.2.2
5.封装帧的时候,源mac地址使用自己的,目的mac使用网关的
6.非常巧妙的将数据送给了网关
请求超时
1.对方开启了防火墙,不允许icmp协议包通过
2.中间路由器丢弃了我们的ping包Destination Host Unreachable
1.一般是ip地址没有人使用网络不可达
1.没有填写默认网关未知的名称或服务
1.没有填写dns服务器地址
路由追踪->追踪从自己的ip到百度的ip中间经过了多少个路由器
centos7/8
[root@localhost ~]# tracepath www.baidu.com
centos6
[root@localhost ~]# traceroute www.baidu.com
windows命令
C:\Users\admin>tracert www.baidu.com
tcpdump 抓包工具->像警察一样蹲点守株待兔 dump导出
-i 指定监听网络接口 interface
理解为指定抓取那个网络接口(网卡)的数据包
类型的关键字
host: 主机
src: 源 source
dst: 目的地 destination
port: 端口
src: 源 source
dst: 目的地 destination
net: 网段
src: 源 source
dst: 目的地 destination
数据类型的关键字:
包括host、port、net
例如host 192.168.1.1表示这是一台主机,net 192.168.0.0表示这是一个网络地址,
port 22指明端口号是22,如果没有指明类型,则默认的类型是host
包括src、dst、dst or src、dst and src,这些关键字指明了传输的方向
比如:src 192.168.1.1说明数据包源地址是192.168.1.1,
dst net 192.168.0.0指明目的网络地址是192.168.0.0,
默认是监控主机对主机的src和dst,即默认监听本机和目标主机的所有数据。
运算类型的:or、and、not、!
or 或 :满足一个条件
and 与: 都要满足
not 取反(非)
! 取反(非)
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
用在主机和路由器之间传递控制消息->可以理解为用来探路的,用来侦查
DHCP协议 动态主机配置协议->应用层
作用:服务器给其他的电脑分配ip地址
无线路由器上就有dhcp服务,它可以给我们连接到无线路由器的电脑或者手机分配ip地址
步骤:
1.安装dhcp相关的软件包
[root@lb-1 ~]# yum install dhcp -y
2.修改配置文件,配置dhcp服务器
拷贝样例文件到/etc/dhcp目录
[root@lb-1 dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
修改配置文件
# have to hack syslog.conf to complete the redirection).
log-facility local7; #指定日志类型
# A slightly different configuration for an internal subnet.
subnet 192.168.98.0 netmask 255.255.255.0 { #指定分配ip地址的网段号和子网掩码
range 192.168.98.1 192.168.98.253; #指定地址池的范围,必须是上面的网段里的ip
option domain-name-servers 114.114.114.114; #指定dns服务器地址
option routers 192.168.98.254; #指定网关
default-lease-time 600; #最短租约时间600秒
max-lease-time 7200; #最长租约时间7200秒
}
dhcp服务器里的网关或者dns服务器配置错误,就会误导客户机上不了网
3.启动服务,调试
如何服务启动不起来,需要在接口上配置dhcp服务器里分配的网段的ip地址
然后再次启动dhcp服务
[root@lb-1 network-scripts]# service dhcpd start
Redirecting to /bin/systemctl start dhcpd.service
[root@lb-1 network-scripts]# ps aux|grep dhcpd 看进程
dhcpd 3890 0.0 0.2 105996 11964 ? Ss 11:37 0:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
root 3893 0.0 0.0 112832 2292 pts/3 S+ 11:37 0:00 grep --color=auto dhcpd
[root@lb-1 network-scripts]# netstat -anplut|grep dhcp 看端口
udp 0 0 0.0.0.0:67 0.0.0.0:* 3890/dhcpd
如何知道dhcp服务启动了呢?
1.看进程 dhcpd
2.看端口 67 udp
4.测试使用
再开一台linux服务器做客户机,网卡类型选择nat模式
需要在测试的客户机上使用dhcp动态获得ip地址
[root@web3 ~]# cd /etc/sysconfig/network-scripts/
[root@web3 network-scripts]# cat ifcfg-ens33
BOOTPROTO="dhcp" #指定动态获得ip地址 dhcp表示动态获得 none表示静态配置
NAME="ens33"
DEVICE="ens33" #网卡的名字
ONBOOT="yes" #开机激活网卡
[root@web3 network-scripts]#
[root@web3 network-scripts]# service network restart 刷新网卡服务,重新去获得ip地址
[root@web3 network-scripts]# ifdown ens33;ifup ens33 刷新网卡服务,重新去获得ip地址
正在确定 ens33 的 IP 信息... 完成。
- 如果修改了配置文件,需要刷新服务,生效
- 提醒:网关和dns服务器一定要配置正确,不然后导致客户机获得错误的网关和dns会不能上网
nmcli 管理网络的客户端命令 NetworkManger client
功能
1.激活和禁用网卡
2.查看/修改网络的IP地址,dns,网关
使用
nmcli 命令的使用依赖于NetworkManger服务需要开启
nmcli n 查看网络是否启用 networking
nmcli d 查看有哪些网络设备 device
nmcli c 查看哪些网络是连接在使用的 connection
桥接模式(bridge)表现在vmnet0网卡
直接连接到物理网络,其实就是虚拟机和真实机器在同一个局域网里,利用真实机器的网卡连接到真实的交换机上或者路由器上,虚拟机和真实机器在同一个网段,地位是平等的
物理网络:就是真实的网络
wlan: 代表无线网络 wireless LAN
network adapter :网络适配器(网卡)
表现在vmnet8网卡
用来和虚拟机的网卡模式是nat的机器通信,连接在同一个局域网里
用于共享主机的ip地址,所有的虚拟机使用真实机器的ip地址联网
SNAT
不同的vlan --》不同vlan对应不同的网段 --》做了隔离的
192.168..1 -->真实机器的vmnet8网卡使用
192.168..2 -->给vmware 模拟出来的路由器的LAN口使用,作为网关使用
仅主机模式(hostonly)通过vmnet1网卡
对应host only模式
虚拟机只能和真实机器通信,处于一个封闭的网络里 --》vlan里
dhcp服务器给仅主机模式的虚拟机分配ip地址的时候,没有告诉虚拟机网关的ip,没有配置网关,导致虚拟机不能进行跨网段通信,只能和真实机器通信。
Network Address Translation,网络地址转换->公网私网地址转换
1.nat功能,它将什么地址转换为什么地址?
公网私网地址转换
公网ip–》nat—》私网ip
私网ip–》nat–》公网ip
2.为什么需要nat功能?
因为ipv4地址不足,不能做到每个设备都有一个公网ip
3.NAT转换表(NAT映射表)
记录了公网和私网之间转换的条目,是在路由器的内存里
linux系统里的概念
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源IP地址–>局域网里的用户出去上网 —》用户角度
家庭上网、公司上网–》电信只给一个公网ip
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
DNAT策略的原理
目标地址转换,Destination Network Address Translation
修改数据包的目标IP地址–>互联网上的人访问局域网里的电脑 --》公司角度
公司内部的业务服务器发布到公网上,让别人访问
DNAT策略的典型应用环境
在Internet中发布位于企业局域网内的服务器
步骤
1.准备一台局域网里的主机做客户机,配置好ip、子网掩码,网关,dns服务器地址
2.准备一台Linux主机做网关服务器;配置两个网络适配器,其中lan口使用ens33,可以是hostonly或者nat或者桥接,配置ip、子网掩码,另一个wan口使用桥接模式,配置好ip、子网掩码,网关,dns服务器地址
具体操作
[root@lb-1 ~]# cd /etc/sysconfig/network-scripts/
[root@lb-1 network-scripts]# vim ifcfg-ens33
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR1=192.168.99.1
PREFIX=24
DNS1=114.114.114.114
GATEWAY=192.168.99.254
#刷新网络服务
[root@lb-1 network-scripts]# service network restart
#查看dns服务器地址
[root@lb-1 network-scripts]# cat /etc/resolv.conf
nameserver 114.114.114.114
#在客户机测试能否和网关通信
[root@lb-1 ~]# ping 192.168.99.254
linux网关服务器的配置
2.1 配置LAN口的ip地址和子网掩码,不配置网关和dns服务器地址
[root@scrouter ~]# cd /etc/sysconfig/network-scripts/
[root@scrouter network-scripts]# vim ifcfg-ens33
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.99.254
PREFIX=24
[root@scrouter network-scripts]# service network restart 刷新服务
2.2 配置WAN口的ip地址、子网掩码、网关和dns服务器地址
[root@scrouter network-scripts]# vim ifcfg-ens34
BOOTPROTO="none"
NAME="ens34"
DEVICE="ens34"
ONBOOT="yes"
IPADDR=192.168.1.88
PREFIX=24
GATEWAY=192.168.1.1
DNS1=114.114.114.114
#刷新网络服务
[root@scrouter network-scripts]# service network restart
#查看路由表
[root@scrouter network-scripts]# ip route
在linux网关服务器上
3.1 开启网关主机的路由转发功能
临时开启路由功能
echo 1 >/proc/sys/net/ipv4/ip_forward
root@scrouter ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
永久开启路由功能
#修改内核参数文件/etc/sysctl.conf
[root@scrouter ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#更新配置,开启路由功能
[root@scrouter ~]# sysctl -p
net.ipv4.ip_forward = 1
3.2 添加使用SNAT策略的防火墙规则
[root@scrouter ~]#iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens34 -j SNAT --to-source 192.168.1.88
步骤
在web服务器上进行的配置
局域网的Web服务器正确设置IP地址/子网掩码,默认网关地址
在linux网关服务器上进行的配置
2.1 开启网关的路由转发功能
2.2 添加使用DNAT策略的防火墙规则
[root@scrouter ~]#iptables -t nat -A PREROUTING -d 192.168.1.88 -i ens36 -p tcp --dport 80 -j DNAT --to-destination 192.168.99.21
-p tcp --dport 80 协议是tcp的,目的端口是80的 destination port
具体操作
1.对web服务器和linux网关服务器进行网络配置,同SNAT
2.使用脚本开启linux网关服务器的路由功能和DNAT功能
[root@scrouter ~]# cat snat_dnat.sh
#!/bin/bash
#清除filter和nat表里的防火墙规则
iptables -t filter -F
iptables -t nat -F
#开启路由功能
echo 1 >/proc/sys/net/ipv4/ip_forward
#添加SNAT策略
iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens36 -j SNAT --to-source 192.168.1.88
#添加DNAT策略
iptables -t nat -A PREROUTING -d 192.168.1.88 -i ens36 -j DNAT --to-destination 192.168.99.21
3.在web服务器上操作,检查nginx服务是否运行,是否有防火墙开启
如果没有安装nginx,需要自己安装
[root@web1 ~]# ps aux|grep nginx
root 1124 0.0 0.0 46240 964 ? Ss 10:14 0:00 nginx: master process /usr/local/scnginx88/sbin/nginx
tiankai 1125 0.0 0.0 46704 3556 ? S 10:14 0:00 nginx: worker process
root 1533 0.0 0.0 112832 2392 pts/0 S+ 10:35 0:00 grep --color=auto nginx
[root@web1 ~]# netstat -anplut|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1124/nginx: master
[root@web1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
uname -r 查看内核版本
netfilter 位于Linux内核中的包过滤防火墙功能体系
netfilter是内核kernel的一个模块,对来自网卡的数据进行过滤->内核态
iptables 位于/sbin/iptables,是用来管理防火墙的命令工具
iptables是一个应用软件,和netfilter打交道,给netfilter传参,同时获取内核里的数据,展示给外面的用户看 ->用户态
firewalld也是一个应用软件,和netfilter打交道,给netfilter传参(底层是调用iptables),同时获取内核里的数据,展示给外面的用户看
规则链–》集中存放规则的地方,防火墙规则/策略的集合
默认的5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
规则表->规则链的集合
具有某一类相似用途的防火墙规则,按照不同处理时机区分到不同的规则链以后,被归置到不同的“表”中
默认的4个规则表
raw表:确定是否对该数据包进行状态跟踪
记录某种类型的数据包,是新的数据,还是旧的数据 mangle表:为数据包设置标记
修改数据包,可以在数据包里插入内容 nat表:修改数据包中的源、目标IP地址或端口
snat
dnat
filter表:确定是否放行该数据包(过滤)–》进入皇宫的数据进行过滤 --》默认的表
规则示例:
[root@scrouter ~]#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens33 -j SNAT --to-source 218.29.30.31
-t nat 表示在nat表里进行操作 table
-A POSTROUTING 表示在POSTROUTING 位置追加一条规则 append
-s 192.168.1.0/24 指定源ip地址是来自那个网段 source
-o ens33 指定数据从那个接口出去 out interface
-j SNAT 采取SNAT动作,修改ip包里的源ip地址
--to-source 218.29.30.31 指定修改ip包里的ip地址为 218.29.30.31是WAN口的ip地址
问题:用户反馈访问不了服务器,访问不了界面,上不了网
1.服务端
tcpdump抓包分析数据是否到达,查看nginx服务是否启动,检查防火墙是否阻拦,检查服务器网络是否正常,web页面是否正常开启
2.链路
检查电脑的物理链路是否正常联通
3.客户端
查看IP、网关,路由、DNS是否配置正常
ping网关,如果能够ping通说明能够正常到达服务器;ping路由器,查看是否ping通;测试ping公网IP的通畅情况,测试DNS的通畅,ping对应IP;检查网络管理员的路由器