「Linux」作怪的网络
从Linux的安装,基本命令的使用,常规 Linux 的安全策略到 Linux 常见的目录结构,今天我们看看Linux的网络
"秀才不出门,便知天下事",你是秀才你试试。
没有网络,我们可能停留在看电视,跳皮筋的年代,我还真是会跳皮筋
为了让我们下载软件更加的顺畅,速度更快,最快速度白嫖资源,不得学习下配置网络
配置Linux网络
既然要配置网络,我们先看看网络的配置文件在哪里,以及相关的配置有哪些,分别代表是什么意思
打开网络配置文件
BOOTPROTO = static,表示启用了静态 IP 地址,默认为 none
NAME = eth0,与网卡配置文件对应的一个标签,如果为 eth0 则配置文件是 ifcfg-eth0
UUID = xxxx,网卡唯一设备标识,系统自动得生成
DEVICE = XXX,网卡设备名称,是物理设备标识
IPADDR0 = XXX,表示设置 IP 地址。这里注意后面的数字,在 Centos7 以后可以一个网卡配置多个IP地址
PREFIX0 = 24,设置子网掩码,这里设置子网掩码的方法和之前的版本也不一样,24代表是255.255.255.0
Getway = XXX,网关地址,什么是网关线面会详细阐述
知道配置文件每一行代表的含义以后,就可以根据自己的需求进行配置了,记得配置完成以后重启网络,如果是Centos7,那么命令将是下方的命令
service network restart
本地回环配置文件
第一行:Device:网络的设备名
第二到四行:lo 接口的 IP 地址,子网掩码,网络号
第七行:lo 接口的广播地址
第八行:开机启动 lo 接口
第九行:将 lo 接口设置为本地回环地址
DNS 配置文件 /etc/resolv.conf
这里的「namespace」 表示域名服务器,后面的 IP 地址就是 DNS 服务器,当用户在 Linux 中访问某个域名的时候,就需要靠这些 DNS 服务器来解析
设置主机和 IP 绑定配置文件 /etc/hosts
为什么会说说这个配置文件呢,因为当在部署集群的时候,我们需要在此配置,方便我们不用每次都是输入其他机器得IP进行访问,而是直接使用用户名即可。
类似于 Windows 下得 hosts 文件,我们看看 Linux 中的 /etc/hosts 的内容
从上面我们发现,hosts 文件中的每一行内容为一个主机,每一行由三个部分组成,其中每个部分按空格隔开。
多说一句,以后大家如果需要分析一些日志文件的时候,一定要清楚是按照什么分割的,免得浪费了时间却还没有处理好问题
第一部分:网络IP地址
第二部分:主机名域名
第三部分:主机名
路由
我和你的通信需要网络的传输,这个传输过程中可以说经历了九九八十一难,看到此,是不是点个赞让我安稳下心灵,停,不是现在拉下去点赞,晚点晚点
就是这样穿过无数的节点,无数的路由器才将信息传递到你的屏幕
那么为了保证将信息传递给你,在数据传输到达某一个网络节点后,这个网络节点需要根据一个「约定」将数据传送到另一个网络节点,然后再传输到下一个节点,依此类推到达目标主机。这里的每个网络节点就是「路由」,所谓的约定即路由规则
那么不使用路由就不行?
举个例子,我给你寄几箱猕猴桃,我的地点在北京,到了快递点,我需要写你的地址,比如是"成都市高新区马保国镇222单元",通常邮寄点不会直接帮你送到指定的地址,而是可能先到成都,然后成都这边揽收再送到马保国镇,这种就是采用分发得策略来提升效率。
这里的寄送系统就是一个大型的网络系统,每个寄存点主要负责快递的传送任务,只要快递到达寄存点,就得准确,迅速将信件投递到下一个寄存点处,这里的快递就是通过「路由机制」准确,快速的寄送到目的地的。
有哪几种路由呢
静态路由
静态路由是系统管理员通过 route 手工加入的静态路由规则
动态路由
动态路由是不同机器彼此经由程序相互交换路由规则而来的。如果网络发生了变化,路由软件会重新计算路由并发出新的路由更新信息
路由如何配置
在Linux中,通过 route 命令配置静态路由信息,
route [-n|ee]
常用的选项我将其总结如下
查看当前路由表信息
从上面我们可以知道通过 route -n 输出的为纯 IP 地址,而 route 输出的信息就会包含主机名信息,下面说说选项的含义
Destination:网络号,即network的意思
Gateway:连出去的网关地址
Flag
U:代表路由启动勒
H:代表目标路由是一部主机而非网络
R:代表使用动态路由的时候,回复路由信息标识
G:表示需要通过外部的主机来转递数据
M:表示路由已经修改了
网关是什么
不知道大家有没有经历过在宿舍买台交换机,然后几台机器组成局域网打游戏狂欢的日子
那个时候苦逼呀,只能打局域网的游戏,不能上网,时代在进步,科技在腾飞呐,学校就给每个宿舍分配一一个IP地址,这个 IP 地址是学校的网管部门负责,宿舍网的 IP 通常是192.168.1.x,校园网的IP地址假设是10.10.x.x,
如果此时你想在宿舍上网,那该怎么办?
第一种方案:舍友们众筹买一张网卡,然后插入到A同学的电脑上,一张网卡的线插在宿舍的交换机,另一张网卡插在校园网的网口,此时就可以上网,但是A同学电脑就贡献出去了,只能看你们打游戏,他自嗨,多可怜
第二种方案:买个路由器,这个路由器有内网网口和外网网口,外网网口插在校园网的网口上面(当然配置的时候根据网管部门所要求的),内网网口连接上宿舍的所有电脑,这样的话,路由器就得一直都开着
宿舍长可以上网了,其他人的电脑要上网还需要配置下各自的网卡,通常是DHCP默认配置,在配置的时候你就会发现有个叫做Gateway的东西,这就是网关,要了解网关不得不去了解MAC头和IP的头部
MAC和IP头部有啥?
网卡自出生那天起,就带上了这个地址,那么问题来了,为啥不使用MAC地址进行通信呢?因为靠MAC地址没法定位准确,它更像身份证,作为唯一标识。举个例子,我住在“成都市高新区B座5楼”,有个女娃儿可以问路人:“成都市高新区B座在哪里”,路人可以给他比较明确的地点,但是如果她问:“你知道小蓝(身份证)在哪儿吗”,很明显无从得知,说不定以为"你是个傻子吧"。
你可以找到IP地址(成都市高新区B座5楼),但是可能还是找不到我,这个时候假设你可能去服务台问(其实是靠吼,身份证为XXX的是哪位),这个时候我听到自然就会答应,不过你如果在北京喊,就听不见了,所以 MAC 地址实际上通信范围是也是比较小的,局限在一个子网里。它的头部结构都有哪些字段?
图中的类型大部分都是IP数据包,IP里面可能包含了TCP,HTTP等,这都是封装的事儿了。拥有了这个MAC地址,就会在链路上广播,MAC的网卡才发现这个包原来是给它的,网卡将包收进来,打开 IP 包,发现 IP 地址是自己的,再打开TCP包发现端口是自己,还是80,正好就是目前监听的端口,开启摸鱼聊天模式
IP头部都有哪些字段?
上述 IP 头部的详细信息就先不说了,这里主要述说源IP和目标IP地址,当我们要访问一个IP地址的时候,需要判断这个目标IP是否和当前的IP地址在同一个网段
怎么判断是否在同一个网段
此时涉及到网络的 CIDR 和子网掩码了。我们通常将 IP 地址比喻为门牌号码,既然是门牌号码,如果一样了就会冲突。假设大家都将地址设置为三单元110,那快递小哥就压根找不到地方,所以,我们使用电脑的时候,有时出现上不了网了,很可能是IP冲突了哟。
10.120.55.73,这就是一个IP地址。按照"."分割,其中每个部分占 8 个 bit ,所以 IP 地址为 32 位,这样的话 IP 地址一共就有约42.9亿个,很明显在现在看来不够用,但是当初设计者哪知道现在这么多计算机呀,于是出现了 IPV6,128 位,至于够不够用还得看看国家的生育政策了
不够用就算了,还将这些IP地址分为了5类
对于A,B,C这三类,分为了两部分,前面一部分为网络号,后面一部分为主机号,还是比较好理解。假设大家都是3单元110,小蓝是东华小区的110,而小李是万科小区的110
那么这几类,分别代表了多少的主机数量呢
从上图我们发现C类的地址254个,B类地址65534,这放在一个网络下面岂不是太浪费,有没有折中的方法呢
CIDR
CIDR 叫做无类型域间选路。将上面 32 位的地址分为两部分,分别为网络号和主机号。比如地址10.120.55.73/24,斜杠后面的24表示在32位中,前面的24为网络号,后面的8位为主机号
如何得到网络号
将子网掩码和IP地址进行 AND 运算就可得到网络号。此时子网掩码为255.255.255.0,255 转换为二进制为1,1 和任何的数进行AND运算都是原来的数值,所以前面三个数不变,为10.120.55。后面一个数为0,0和任何数进行AND运算为0,所以最后一个数为0,合计后就是10.120.55.0,这就是网络号
什么是私有地址和公有地址呢
我们平时自己的电脑或者办公室里,一般都是私有IP地址,因为这些IP地址由相关组织的内部管理,自己分配使用,所以我的私有IP地址可能和你的是一样的
这就好比我所在的小区是3栋,你的小区也是3栋。但是一旦走出了小区,就需要使用共有IP地址了。就像建设路1000号,这是相关部门划分的,不能两个小区都叫做建设路1000号
怎么获取公有IP地址呢
这就需要花钱了,毕竟是共有的,比较香且有限制。假设你要做一个网站,全国人民都可以访问,就需要买个 IP 地址了
在这五类地址中,还差一个D类组播地址。从名字可以看出,这类地址属于一个组的机器都能收到。就仿佛QQ群,发个消息大家都能看到,至于回复不回复另说
好了,说了这么多,回到网关部分
如果你想和你的室友通信,就和网关没有关系,因为你们在同一个网关,只需要通过 ARP 获得 MAC 地址,然后将源MAC 和目的 MAC 放入到 MAC 头中发出去即可
如果不是在同一个网段,你想和你的异地女友聊天,这个时候会先访问默认网关 Gateway,这个过程和发往同一个网段的其他机器又是一样的,将源地址和目的地址放入IP头,通过ARP获取网关MAC地址,将源 MAC和网关 MAC 放入 MAC头部发送出去,网关所在端口接受以后下一步操作就看网关了
网管呢可以当作是路由器,路由器是一个物理设备,假设有5个网口,五个网口相当于五条路,分别连接五个局域网,每条路的 IP 地址都和局域网的 IP 地址是同一个网段,每条路都是它握住的那个局域网的网关
简单来说:如果一个包想发到其他的局域网,都会选择一条路 ,然后根据路由算法,选择另一条路加上IP头和MAC投扔出去
到底选择哪一条路?
静态路由
静态路由比较简单,直接在路由器上配置规则,规则为:假设访问A网站,就从2号口出去,下一跳为 IP2;如果想访问B网站,则从3号口出去,下一跳为IP3,随后缓存在路由器中
那么IP头和MAC头,需要修改哪些内容呢
常见的网络连接方式
桥接的基本原理
桥接默认使用VMnet0,Bridge桥当作一台机器,这个机器有两块网卡分别处于两个局域网中,使用"桥"连接,这样局域网A 和 B 就无缝的连接起来,桥接的时候 VMWare 网卡和物理网卡处于同一个IP网段
Vmvare 桥是同样的原理,Vmvare 软件会虚拟一块网卡,当使用桥接的时候,Vmvare 会虚拟一块网卡和真正的物理网卡进行桥接,这样的话,发送到物理网卡的所有数据包就到了 Vmvare 虚拟机
而由 Vmvare 发出的数据包也会通过桥从物理网卡那端发出,所以,如果物理网卡可以上网,那么桥接的虚拟网卡也基本上没问题
联网的方式
桥接的方式是最简单的,主机怎么联网,那么虚拟机就怎么联网,将虚拟及当作局域网中的一台电脑就好了
注意:主机网卡可以访问 internet 的局域网的时候,虚拟机才会通过 Bridge 访问 internet
Nat
Nat的基本原理
NAT的全称是 Network address translate,NAT应用在 Internet 网关和路由器上。比如192.168.0.123这个地址需要访问Internet,数据包会先到路由器或网关,然后网关和路由器会有一个能访问 Internet 的 IP 地址,这样的网关和路由器在收到数据包后,对数据包的 IP 进行更改(NAT),这样就可以让私有网段的主机能够顺利访问Internet,这个技术解决了 IP 稀缺的问题,同样的私有 IP 可以网关NAT上网
那么对于Vmvare 是同样的道理,它会在虚拟机和主机之间伪造一块网卡,这个网卡和虚拟机的IP出于同一个地址段,网卡和主机的网络接口进行NAT,意味着虚拟发出的每一块数据包都会经过虚拟网卡,然后NAT,从主机的接口发送出去
注意:虚拟网卡和虚拟机处于同一个地址段,虚拟机和主机处于不同的地址段,主机相当于虚拟机的网关,所以虚拟机能够 ping 通主机的 Ip,但是主机 Ping 不同虚拟机 Ip、
联网方式
动态ip地址
这个方式简单,直接将虚拟机设置成使用DHCP方式上网,Linux开启DHCP服务即可。注意:在vmvare中,需要在编辑-----虚拟网络设置中,将DHCP开启,默认为关闭
静态IP设置
如果不想使用DHCP,也可以手动设置:IP设置与 vmnet1 同网段,网关设置成 vmnet8 的网关(在“虚拟网络设置”里的Net选项卡里能找到Gateway)通常是xxx.xxx.xxx.2。子网掩码设置与VMnet8相同(设置好IP地址后,子网掩码自动生成)
DNS设置与主机相同。
例如:主机IP是 10.70.54.31,设置虚拟机IP为 10.70.54.22。Netmask,Gateway,DNS都与主机相同即可实现 虚拟机 —主机 虚拟机<---->互联网 通信。
提示:使用NAT技术,主机能上网,虚拟机就可以访问 Internet,但是主机不能访问虚拟机
host--only的方式
这种方式:只需要主机和虚拟机通信,不让虚拟机访问Internet。同样是两种方式
动态IP地址
此处和上面一样,开启DHCP以后,虚拟机就可以自动的获取IP地址和DNS了
静态地址
将IP地址设置为和 VM 一个网段,网关设置为 VMnet1 的网关,
也可以手动设置,将虚拟机 IP 设置与 VMnet1 同网段,网关设置成 VMnet1 的网关相同,其余设置与 VMnet1 相同,DNS设置与主机相同。
举个例子
例如:VMnet1 IP:172.16.249.1 Gateway :172.16.249.2 。那么虚拟机
IP:172.16.249.100 Gateway: 172.16.249.2。这样、 虚拟机<—>主机 可以通信,但是、 虚拟机<—>互联网 无法通信
提示:Host-only技术只用于主机和虚拟机互访,于访问internet无关。
欢迎关注微信公众号:互联网全栈架构,收取更多有价值的信息。