网络基本概念
开始之前
首先需要明白,所有的网络通信都是数据包的传递,可以把数据包理解为车辆,每个网络设备都是一个岔路口或者城市。服务器往往表现得像城市,交换机和路由器往往相当于岔路口。当你想去往一个地方时,必须得知道先往哪去再往哪走吧,你往往通过路标或地图知道这件事(都是告诉你每一步该怎么走),对于数据包来说,就需要查询路由表了。
路由
route -n可以查看
第一条为默认路由,其他的为指定路由。如果数据包不能匹配指定路由,就会按照默认路由通过enp0s3发到192.168.88.1这台设备。
路由遵循最长匹配原则,如果存在172.16.0.0/24和172.16.0.0/16的两个路由,数据包的目的地址为172.16.0.10则会匹配前者。
当网卡启动后,路由表会自动新增该接口的路由,如上,本地存在192.168.56.103和192.168.88.101两个ip,所有有了以上两条路由。
在通信中,我们可以逐跳去观察,每到一个设备,就先弄清自己的五元组(源地址,源端口,目的地址,目的端口,协议),然后查找路由,检查防火墙。依此判断是否可以正确到达目的地,然后再以同样的方式判响应断数据包能否回到源处。
网关
网关其实和默认路由很像,在传递数据包时,如果在本地找不到对应的路由时,就将数据包发往网关。你应该见到过默认网关,网关,默认路由,其实都差不多
网关总是对网络设备说:你不知道的就交给我吧!
在配置文件中通过gateway设置,该项总是意味着默认路由
此时你可以想象,如果设置多个gateway或者route -n中存在多个默认路由时,会是一种什么样的情形。我(数据包)究竟该相信谁?
ip地址
ip地址由ip和掩码共同决定,所以配置文件中必须配置IPADDR和NETMASK
172.16.16.16/24和172.16.16.16/16不是同一个ip。
如果要了解网络号,主机号,ip地址,子网掩码,广播地址,可以多想想如下例子
对于10.10.10.10/16来说可以这样操作
10.10.10.10转为二进制后为
00001010.00001010.00001010.00001010
掩码16(就是255.255.0.0),转换后为
11111111.11111111.00000000.00000000
两者进行与运算得出网络号
00001010.00001010.00000000.00000000
即10.10.0.0为网络号,后面的为主机号
主机号全为0是网络号,全为1则是广播地址,均不能作为有效的ip地址。同一网段意味着网络号相同,主机号不同的地址。他们之间的通信往往不容易出问题。
DNS
用来进行域名解析的,即将www.baidu.com等翻译成10.10.10.10形式的ip地址。如果你ping www.baidu.com,该ip会首先在本地进行解析,如果不能成功解析,就会被发到配置的DNS服务器上进行解析,然后使用解析后的ip地址进行访问
NAT
地址转换
数据包在传递时,会携带源地址和目的地址。NAT便是操作数据包中地址的一种方式,常用来进行隐藏内部地址,或在仅有一个公网地址时进行互联网访问。(公网地址就是运营商给你的地址,运营商做好了网络部署,该地址全球可通,如果不考虑防火墙等的话)
数据包涉及到五元组:源地址,源端口,目的地址,目的端口,协议
NAT和防火墙经常操作这些。因此我们可以利用NAT和防火墙依据自己的需求进行配置
在linux中,iptables工具包含NAT功能,
iptables -t nat -A POSTROUTING -p tcp -s 192.168.159.0/24 -j SNAT --to-source 192.168.159.254
如果数据包中的源地址匹配192.168.159.0/24,则会被更改为192.168.159.254
路由转发
即路由功能,一般linux是不会开启路由转发的。也就是说,如果接收到的数据包的目的地址不在本机,那么该数据包会被丢弃。而不像路由器会查找路由进行转发。
开启路由转发,修改就生效,不需要重启什么的
echo “1” > /proc/sys/net/ipv4/ip_forward
对于交换机来说,数据包会在相同的vlan下进行广播,也就是说数据包会被传递到同一vlan下的所有设备。该广播包在路由器或服务器端终止传递。如果设备处于同一网段同一交换机下,缺不通,那么不是防火墙的问题就是交换机设置了vlan.