MAC
、IP
、端口
等中的意义,以及使用的位置,对于计算机通信来讲,所涉及的方方面面是非常复杂的,在网络中用到MAC、IP以及端口的功能时,它们通过分层的方式来解决了这样的问题,这种分层有两种分型,第一种就是OSI模型,由国际标准化组织所定义的网络分层模型。这个模型共分为了七层,分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
,物理层用来定义对物理设备的规范,数据链路层则定义基于报文的封装和响应方式,而网络层则是基于IP地址通信过程的实现,传输层则标识主机与主机之间的进程,通常由端口来标识,会话层则是建立会话完成通信,表示层则是来实现定义数据的标识格式,应用层则实现真正的数据资源交换。 而与该模型所对应的就是TCP/IP
模型,在这里表示为四层,第一层为物理层,既定义了物理设备之间的规范,又定义了在MAC地址中完成本地网络通信的,而互联网层也是与网络层一样,定义了基于IP地址进行通信,传输层也是一样,定义了主机之间的进程使用什么地址标识来进行通信,以及定义了在通信中使用可靠和不可靠的传输功能,应用层对应了OSI模型中的会话、表示和应用层,对它们进行一个统一标识。而TCP/IP
就是用来完成计算机之间通信的使用模型。
任何时候,在两台主机进行通信时,是基于同层协议在进行的,同一个主机的不同层次之间,上层调用下层接口,从而提供下层所使用的服务,而下层向上层提供服务,另外一个好处在于,其中一层发生了改变,对于上层的接口来说并不影响,各层来使用接口调用来实现,使得各层的改变牵一发而动全身。
每两台主机之间进行通信时,发送方要借助应用层来组织数据,可以理解为资源子网上的应用层生成一个数据,该数据如何定义及表示都已经定义好了,而后我们将用通信子网把该数据进行发送,首先进入到传输层,传输层为了能够将进程地址及端口得以实现,我们需要将该首部添加到该数据上,这就是传输层报文,而后在网络层中在封装一层,这个内容为主机地址(IP地址),具体那个主机来接收则已经确定,而在传输层首部和网络层首部的外面在加上一层物理层或数据链路层首部,所以一旦组成了这个格式我们就称之为帧,而在网络层就称之为数据报文(IP报文),在传输层也是叫传输层报文,但在数据链路层当中,这个报文要被拆分成n次,因为要转成多次本地通信,而在网络层当中的报文只有送达到目标主机才能够拆分该报文,而目标主机拆完之后就看见传输层报文的端口,最终看到数据发送给进程。在应用层当中还有应用层首部,主要针对于应用层协议。
主机为了真正完成互联网通信时,通过局域网通信需要跨过互联网,需要首先送达到本地局域网,我们称之为网关,而网关也是一个路由设备,这个设备是一个末端路由,能够将本地主机所需要发送其它任何位置的报文都可以由它转交出去,而后经过广域网送达到目标主机,从源端到目的端之间需要经过多个路由设备,源主机将层层报文进行封装,但是该报文需要传递该路由器,从该路由器的接口把数据送到另一个接口当中,再从该路由器中传送给主机,所以从A主机传递给R1的一号接口,需要加上一个以太网首部,在该首部中,加载的是A主机上的网卡地址,而目标MAC为R1接口上的MAC地址,R1收到后发现目标MAC为自己,则拆分该报文,看到了源IP和目标IP,发现不是自己的,于是重新封装,从R1的二号接口发送,由R2的二号接口接收,于是源MAC为R1的二号接口的网卡地址,目标MAC为R2接口的网卡地址,R2接收到之后,发现目标MAC为自己,继续拆封,发现目标IP不是自己,继续进行转发,自己发现由一号接口传送到B主机,因此又要封装MAC首部,源就是R2的一号接口的MAC,目标为B主机的MAC地址,发送给B主机之后,进行拆封看到目标IP为自己则继续拆封,看到传输层报文标识的端口或进程地址,最后发送给应用层上的某个进程。
所以我们知道MAC地址是被一次又一次的解封装,但其他层是不会那么频繁的,其实互联网通信就是由多段本地通信来实现,在主机中所有的非本地网络通信,即就是网络号不相同,就由路由器进行转发,作为主机来讲,通信时要么是本地或非本地,在主机和路由器之间我们称作为末端网络或叫做末梢网络,而这个末梢网络让主机统一指向一个总代理,当非本地通信时,将数据报文转发给路由器中,这个路由器我们称作为默认路由,也称作是默认网关,一旦主机通信并不是本地时,都有它进行转发,这个我们就称之为默认路由或默认网关。 主机里都有一个路由表,说明到达某个主机时要通过那个路由器来进行转发,特殊情况下有其它主机或网络时经过某个路由器才能够到达时则使用该路由,否则就由默认网关/路由进行转发,无论是到达主机还是网络都可以,我们就可以称之为主机和网络路由,而剩余的就叫做默认路由。
假如一个主机符合网络路由以及主机路由又符合默认路由时,使用范围最小的路由的优先级是最高的,很显然,主机范围是最小的,其次是网络,最后是默认路由。所以在末端主机也会有个路由,在最不济的情况下,得有默认网关,如果主机没有默认网关的话,则只能在本地局域网内通信,任何非本主机都不能够进行通信。
任何本地内通信,使用的是MAC来定义的,但是即使是在本地网络通信,我们首先使用的是IP,即源IP和目标IP在同一网络中,不需经过路由器,而本地通信需要封装MAC帧才可以,但如何知道本地MAC,则源主机需要想办法获取目标主机的MAC地址,通过广播来获取其目标主机的MAC地址,目标主机收到源主机的广播包之后,回应源主机的自己的MAC地址,而后源主机进行封装帧首部报文进行发送。路由器虽然能看到但是不会接收,而这个过程我们就称之为地址解析,而地址解析过程由ARP协议来实现的,通过广播来进行的协议。其结果在主机中缓存下来,为了避免缓存失效,给予一个TTL
值,称之为生存周期。而后在这缓存期间突然更换主机的话,则让主机上线时进行广播,这个就称之为ARP通告,之后主机的网卡地址就会更新缓存。而接口与接口之间的转发我们称之为下一跳,也称之为网关,而不是默认网关。
路由条目: 目标地址 下一跳(nexthop) 目标地址的类别: 主机:主机网络 网络:网络路由 0.0.0.0/0.0.0.0:默认路由
如果一个主机接入到互联网中去,需要配置IP和掩码,那么掩码主要是判断这个IP是内一个属于内网还是外网的,所以这两个是最基本的,要想远程通信的话还要需加网关,需要外网通信时由网关进行转发,实现跨网络通信。不过,虽然IP地址能通信,但是并不一定会这样做,我们都是通过在浏览器上输入网址,例如:www.google.com.hk
,而这个网址我们成为FQDN
(完全限定域名),也称之为主机名,当然也可以理解为这是一个域名。但使用该域名是不能够作为主机之间的通信,所以要将域名转换成IP才可以,而这个机制需要使用一个应用层的服务才可以,在主机通信时,输入网址www.google.com.hk
,该主机并不知道这个域名是什么,于是就通过层层路由找到了一个主机,这个主机是一个DNS服务器,这个服务器能够完成名称解析功能,所谓解析就是转换,这里指的是域名转IP,DNS里面有域名所对应IP的数据库,所以客户端主机第一步经过层层路由向服务器发出地址解析请求,而后DNS开始查询数据库所对应该网址的值,之后封装成响应报文继续通过层层路由发送给客户端,而后客户端知道www.google.com.hk
所对应的IP是什么了,于是才能真正把报文封装起来,传输层首部及网络层首部(源IP--目标IP
)以及帧首部,将报文发送给该主机。
还有一种方式,我们可以将域名和对应的IP写在hosts
文件中,让主机知道该域名所对应的IP地址,这个文件在主机中是一个小型的数据库,默认是空的,可以将一些常用的主机名(域名)所对应的IP记录到该文件中,该路径在/etc/
下,有个文件为hosts
,那么如果该域名没有在这个hosts文件时,那么第二步就是查询DNS服务器,DNS服务器一台是能够搞定的,它是一个非常庞大的网络,层级结构,将大范围划分成小范围。
那么现在,如果将Linux主机接入到网络中,则必须实现以下功能,主要是达到什么目标,实现什么样的功能:
将Linux接入到网络中: IP/NETMASK:本地通信; 路由(网关):跨网络通信; DNS服务器地址:基于主机名的通信; 主DNS服务器地址; 备用DNS服务器地址; 第三备份DNS服务器地址;
那么将主机的接入方式我们是需要进行配置的,也是一样有两种,静态指定和动态(分配)学习,这里先说的是静态指定,但是需要注意的是,不能使用同一个IP地址,否则发生冲突。还有一种是动态分配,自动分配给主机一个IP地址,该主机提供的就是DHCP服务,但是如果说没有被DHCP分配到IP地址时,国际名称地址机构则用169.254.XXX.XXX
让主机使用,则主机会自动赋予169.254.XXX.XXX
的IP地址。
但对于服务程序来说,基本都用的是静态指定,比如提供一个WEB服务,如果IP地址动态变化,客户端很有可能访问不到该服务,所以服务器的地址一般来讲都是静态指定的。静态指定可以有两种方式来指定,第一种就是命令,第二种就是修改配置文件。使用命令时,则立即生效,使用配置文件时,下次启动时内核读取该文件时则开始生效,但命令都是保存在内核中的内存中,一关机就没有了,在配置文件中虽然下次启动时有效,但是一旦配置以后可以永久有效。
而对于命令配置来说,有很多可以配置网络的命令,甚至分成几个大类,分别为:
第一个为ifcfg
家族,第二个为iproute2
家族,第三个家族中适用于CentOS 7
中的nm家族。需要注意的是很可能只适用于RedHat
系列。
ifcfg家族的命令也有一定的历史,非常的经典,不过,取而代之的是iproute2
家族,一个新晋而又健壮的家族。格式为ip 后面跟上子命令(OBJECT)
配置方式: 静态指定: 命令: ifcfg家族: ifconfig:配置IP, NETMASK route:路由 netstat:状态及系统数据查看 iproute2家族: ip OBJECT: addr:地址和掩码; link:接口 route:路由 ss:状态及统计数据查看 CentOS 7:nm(Network Manager)家族 nmcli:命令行工具 nmtui:text window 工具 动态分配:依赖于本地网络中有DHCP服务 DHCP: Dynamic Host Configure Procotol
那么以上就是如何配置IP/NERMASK
及GW
的机制,那么如何配置DNS及主机名的方式并没有真正的命令来进行解决,而是使用其配置文件进行其静态配置。那么区别就在于DNS适用于大范围,只要在该数据库中进行注册,那么所有的网络都能访问到,而hosts文件只能适用于本地通信。
注意: (1) DNS服务器指定 配置文件:/etc/resolv.conf (2) 本地主机名配置 hostname 配置文件:/etc/sysconfig/network CentOS 7:hostnamectl
对于网络的配置文件的路径及命名简单阐述一下:
配置文件: RedHat及相关发行版 /etc/sysconfig/network-scripts/ ifcfg-NETCARD_NAME
在CentOS 7
中,网卡名称与其它的发行版都不一样,对于网络命名使用了另一种命名机制。
网络接口命名方式共分为两种,第一种是传统命名方式,第二种是可预测命名方式。
网络接口命名方式: 传统命名: 以太网:ethX, [0, oo], 例如:eth0, eth1, ... PPP网络:pppX, [0, ...], 例如:ppp0, ppp1, ...
而可预测命名机制方案来讲,只能是到CentOS 7中才能够运用,这种命名机制使用不同的命名方案,借助于udev
或systemd
来实现不同的命名方案。
可预测命名方案(CentOS): 支持多种不同的命名机制: Fireware(固件), 括扑结构
有以下四种方式进行实现:
(1) 如果Fireware或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,如eno1, eno2, ... (2) 如果Fireware或BIOS为PIC-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1, ens2, ... (3) 如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0, ... (4) 如果用户显示定义,也可根据MAC地址命名,例如enx12313abcd1。 上述均不可用,则仍可使用传统方式命名;
命名格式的组成分别代表了所接入了那种网络类型。
命名格式的组成: en: ethernet wl: wlan ww: wwan
那么名称类型代表设备的命名及索引号:
名称类型: o<index>:集成设备的索引号; s<slot>:扩展槽的索引号; x<MAC>:基于MAC地址的命名; p<bus>s<slot>:基于总线及槽的拓扑结构进行命名;
那么我们来查看一下CentOS 7
的地址,格式如下:
# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.31.12 netmask 255.255.255.0 broadcast 192.168.31.255 inet6 fe80::4e73:4a71:c590:e381 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:d0:a9:4c txqueuelen 1000 (Ethernet) RX packets 100080 bytes 6023782 (5.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 467 bytes 32155 (31.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
对于CentOS 6
来讲,是以传统方式进行命名。
# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:6F:12:EE inet addr:192.168.31.14 Bcast:192.168.31.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe6f:12ee/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6043 errors:0 dropped:0 overruns:0 frame:0 TX packets:2635 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:405799 (396.2 KiB) TX bytes:632054 (617.2 KiB)
2018-4-15Linux系统管理(17) 网络工具及相关配置工具
原文地址:http://blog.51cto.com/tianxie/2104257