Linux基础教程之网络基础知识详解
网络小白一个,针对网络的基础知识无从下手,因此本文引用了鸟哥私房菜中的众多概念性知识,在此谢过,本文主要从OSI七层协议,TCP协议和一些网络中专业词汇进行解析,并通过子网掩码的划分,网络接口的配置、路由配置等实例来加深对网络的理解。
一、OSI七层协议:
OSI七层协议的由来:
由于网络链接过程相当复杂,包括硬件数据封装与应用程序的相互链接等, 如果想要写一个网络链接的全部功能都集中在一起的程序,那么任何一个环节出错,整个程序都要改写,非常麻烦,因此我们将整个网络链接过程分成多个层次来处理,且每层数据传递是顺序传递的,这就是OSI七层协议。
七层协议的特点:
每个层次都有特定独立的功能
每个层次的代码可以独立编写
层与层之间的功能互不干扰
每一层次只认识对方同一层的数据
在七层协议中,每层都会有自己独特的头部数据(header):告知对方这里面的信息是什么,而真正的数据在后面
下面来详细介绍七层协议中每一层的含义:
Layer1 物理层:由于网络传输介质传输的是比特位(01),因此物理层必须定义所使用的传输设备的电压和信号等,同时还必须了解数据帧转换成比特流的编码方式,最后链接实际传输介质并发送/接收比特信号。
Layer2 数据链路层:硬件部分,主要处理MAC数据帧,传递给物理层转换成比特流;软件部分主要处理来自上层的数据表转换成MAC的格式。相关协议:PPP
Layer3 网络层:定义IP地址,定义计算机之间的链接建立,终止维护等,数据包的传输路径选择等。相关协议:IP、ICMP、ARP、RARP
Layer4 传输层:定义发送端与接收端的链接技术(TCP,UDP),同时包括该技术的数据包格式,数据包的发送,流程的控制等,以确保各个资料数据可以正确无误的到达目的端。相关协议:TCP、UDP
Layer5 会话层:确定网络服务建立链接的确认。
Layer6 表示层:定义网络服务(或程序)之间的数据格式的转换,使数据格式标准化,也包括数据的加密解密也是在这层上处理
Layer7 应用层:将数据发送给应用程序,并最终展示给用户。相关协议:HTTP、FTP、SMIP等
二、TCP/IP及其他协议
虽然OSI七层协议的架构非常严谨,但是由于太过严谨导致程序编写相当不容易,因此产生了TCP/IP协议。
TCP/IP的网络接口层的相关协议
广域网使用的设备
传统电话拨号链接:通过PPP协议
整合服务数字网络(ISDN)
非对称数字用户环路(ADSl):使用PPPoE协议
电缆调制解调器(Cable Modem)
局域网使用的设备—以太网
CAT5等级的网线大概可以支持100米的长度
以太网的网络接头:分为交叉和直连RJ-45,又因为每条芯线的对应不同,而分为568A和568B接头,这两款芯线内部的顺序为:
事实上,虽然目前的以太网线有8芯且两两成对,但实际使用只有1、2、3、6芯而已,其他的则时某些特殊用途的场合才会使用,但是由于主机与主机链接以及主机与集线器链接时,所使用的网线线序定义并不相同,因此有由于接头的行不同网线有可分为两种:
交叉线:一边为568A一边为568B的接头时称为交叉线,用在直接链接两台主机的网卡。
直连线:两边接头同为568A或568B时称为直连线,用在链接主机网卡与集线器之间的线缆。
以太网的传输协议:CSMA/CD
带冲突检测的载波侦听多路访问的数据传输的工作方式,其工作原理为:检测线路是否空闲,空闲则发包,并且边发边检测侦听,一旦冲突就立即停止发送,只要符合CSMA/CD机制的网络就称为以太网。
交换机可以有效的避免冲突,交换机可以自动选择路线,,每一个端口就是一个冲突域,且每个端口有收发两根线实现全双工功能,交换机可以链接多个不同的多个冲突域,路由器可以链接多个不同的广播域。
MAC的封装格式
数据链路层的工作是基于MAC地址工作的,CSMA/CD发送出去的数据帧就是MAC,该数据帧上面存储了两个非常重要的数据,就是目标与来源的网卡卡号,因此我们又称网卡卡号为MaC地址。下图中目的地址和来源地址就指的网卡卡号。
MTU
以太网中数据帧能够存储数据的最大单位,标准定义为1500bytes,这就时MUT的最大传输单元。(IP数据包最大可达到65535bytes),可以增大MTU来提高网络使用率,但是无法确认所有网络设备都支持更大的MTU,如果不支持则可能导致数据包丢失等问题。所以MTU设定9000bytes可以设置在内部网络的环境中部署,外网还是应该保持原有的1500标准。
集线器、交换器与相关机制
集线器(hub):Hub并不记忆该信息包是由哪个MAC地址发出,哪个MAC地址在Hub的哪个端口,且每个端口共享带宽,半双工工作机制,因为CSMA/CD的缘故,在很忙的网络环境中,集线器(Hub)这个网络共享设备就可能发生冲突的情况。工作与物理层。
交换机:在交换机内部有一个特别的内存,这个内存可以记录每个Switch port与其链接的PC的MAC地址,所以当来自Switch两端的PC要相互传输时,每个数据帧将通过交换机内存数据而传送到目标主机上,且每个端口有独立的带宽,全双工工作机制,工作于数据链路层,如果是三层交换机(具有路由功能),则工作于网络层。
TCP/IP的网络层相关数据包与数据
IP数据包的封装
了解IP数据包的封装,才能知道IP到底时如何产生的,IP数据包可达到65536bytes
Ver:声明这个IP数据包的版本
IHL:数据包的包头长度,4个字节一个单位
Service:服务类型
PPP:表示IP数据包的优先级,很少使用;
D:若为0表示一般延迟,若为1表示为低延迟;
T:若为0表示一般传输量,若为1表示高传输量;
R:若为0表示为一般可靠度,若为1表示高可靠度。
Packet Length:IP总长度,包括包头和数据部分,最大可达到65535bytes
Identification:识别码,上面介绍过帧的默认最大传输单元为1500bytes,而IP包最大可以到65536bytes,那么要想将IP包封装到数据帧中就必须将其分割成更小的IP包,那个这个识别码就是用于识别这此小的IP分段是否来自同一个IP包。
Flag:D:若为0表示可以分段,若为1表示不可分段;
M:若为0表示此IP为最后分段,若为1表示非最后分段。
Frag Offset:表示目前这个IP分段在原始的IP包中所处的位置,相当于这个IP分段的序号。通过包的总长度、识别码、特殊标志、分段偏移就可以将小的IP分段在接收端组合成完整的IP数据包。
Time to Live:范围0-255。当数据包通过一个路由器时就会减1,当TTL为0时数据包被丢弃,Linux中 可通过修改 /etc/sys/net/ipv4/ip_default_ttl来设置ttl的大小,默认64 windows 128
Protocol:记录来自传输层和网络层本身的协议信息。常见代码如下:
1:ICMP
4:IP
6:TCP
17:UDP
Header Checksum(报头校验码):用于检查IP报头是否存在错误。
Source Address(源IP地址):发送端的IP地址。
Destination Address(目标IP地址):接收端的IP地址。
Options(其它参数):包括安全处理机制、路由记录、时间戳等
ICMP协议:因特网信息控制协议
ping与traceroute就是利用ICMP来检验网络的状态的。—–探测网络状态的
禁用ping命令:root@cenots6.8 ~ # cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0 —–将该位置为1
启用ping广播地址root@cenots6.8 ~ # cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
1 ——–将该为置为0 可用于探测网络中有哪些主机启动,哪些主机处于关机状态
补脑:Dos 攻击 Ping –f 10.1.250.95 –s 65507泛洪 发送大量数据包给该ip,查看网卡利用率会很高,DDOS 成千上万台计算机给指定计算机发送大量数据包
ARP网络地址解析协议
RARP反向网络地址解析协议
当我们想要了解某个IP配置于哪张以太网卡上面,我们主机会对整个局域网发送出ARP数据包,对方接收到ARP数据包后就会返回他们的MAC给我们,知道对方的网卡地址后就可以传递数据了,当ARP协议取得目标IP与它的网卡卡号后,就会将其记录到ARPtable(内存中)中记录20分钟,Linux中对应命令 arp –n.
TCP/IP的传输层相关数据包与数据
面向链接的可靠的TCP协议
在网络的IP之上是传输层,在传输层数据被打包层TCP数据包。
源端口:端口是用来标记应用程序的,源端口是连接发起端使用的端口,通常为随机端口。
目的端口:常用的应用都会规定有固定的端口号,如http使用80端口,ssh使用22端口。
顺序号:当IP包过太时,需要对包进行分段。顺序号就是记录每个数据包的顺序,以方便接收端将包重新组合。
确认号:当接收端收到数据包后会向发送端发送确认号,告诉发送端数据包被正确传递。
TCP头长:用于调整整个TCP数据包的大小,说明整个数据包字段的起始位置。
控制标志码:
URG:为1代码为紧急数据包,接收端应紧急处理。
ACK:为1代表这人数据包为响应数据包。
PSH:为1代表要求对方立即传送缓冲区的其他对应数据包,而无须等待缓冲区满了才送。
RST:为1代表连接会被马上结束,强制结束连接。
SYN:为1代表发送端希望双方建立同步连接,表示主动连接对方。
FIN:为1代表传送结束。
窗口大小:用于控制数据包流量,表示缓冲区是否还可以接收数据,为0表示无法接收数据。
校验和:发送端首先会计算一个检验码,接收端收到数据包后会再次计算这个值,如果两个值相符合就接受数据包,否则就认为此数据包已损坏。
紧急指针:URG为1时才有作用,告知紧急数据所在的位置。
可选项:表示接收端可以接收的最大数据段容量。为1代表连接会被马上结束,强制结束连接。
TCP的三次握手
A:数据包发起。
发起端随机使用一个大于1024的端口发起请求,在TCP报头中标记SYN为1。
B:数据包接收并确认。
接收端收到数据包后,回自复一个带有SYN=1,ACK=1的数据包,告诉发送方已接收到数据包,并等发起端的回复。
C:回复确认数据包。
发起端收到确认数据包后再次发送一个确认数据包(ACK=1),告诉接收端可以建立连接。
D:建立连接。
接收端收到ACK=1的确认数据包后,就可以建立起连接了
无连接的UDP协议
UDP全程的全程是用户数数据报协议,UDP与TCP不一样,UDP不提供可靠的传输模式,因为它不是面向链接的机制,这是因为UDP传送过程中,接收端在接收到数据包之后,不会回复相应数据包给发送端,所以数据包并没有像TCP数据包有严谨的检查机制。(一直在发送信息,你有没收到我不知道,我也不等待你给我回应,我就是一直发)
三、IP的组成与分级
IP地址:它可以唯一表示IP网络中的每台设备,每台主机(计算机、网络设备、外围设备)必须有唯一的地址。
Net_ID与Host_ID
在同一网段内,Net_Id是不变的,而Host_ID是不可重复的,此外,Host_ID在二进制的表示法中,可以同时为0,也不可同时为1,例如:192.168.0.0/255.255.255.0就是属于网络地址,192.168.0.255/255.255.255.0 就属于广播地址
Host_ID同时为0表示网络地址(Network_IP)
Net_ID同时为1表示广播地址(BroadcastIP)
在局域网内通过IP广播传递数据
在相同物理网段的主机如果使用相同的网络IP范围,则这些主机都可以通过CSMA/CD的功能直接在局域网内用广播进行网络的链接,即直接通过MAC数据来进行数据传递
IP的分级
IP的种类与取得方式
在IPV4中两种IP类别:
Public IP:公共IP,经由InterNIC统一规划的IP,只有这种IP才可链接到Internet
Private IP:私有IP或保留IP,不能直接连上Internet的IP,主要用于局域网络内的主机链接规划
私有IP网段:
Class A:10.0.0.0/8~10.255.255.255/8
Class B:172.16.0.0/16~172.31.255.255/16 CIDR格式:172.16.0.0/12
Class C:192.168.0.0/24~192.168.255.255/24 CIDR格式:192.168.0.0/16
由于这三段Class的IP是预留使用的,所以并不能直接作为Internet上面的连接使用,否则会导致到处都有相同的IP。
Netmask、子网与CIDR
Netmask:子网掩码
将Net_ID处全部标记为1,Host_ID处全部标记为0就可计算出netmask的值。–与ip地址相与得到网络地址。
划分子网:一个大网络分成若干个子网
网络ID向主机ID借位n位n,子网数为2^n,
损失IP数=(2^n-1)*2
划分超网:合并多个小的子网成一个大的超网
主机ID向网络位ID借位,划分超网时,需要注意不网络的范围,如果合并范围包含其他公司的网络则不能划分。
应用举例:
1、某公司申请到一个C 类IP 地址,但要连接6 个的子公司,最大的一个子公司有26 台计算机,每个子公司在一个网段中,则子网掩码应设为?
分析:由于6个子公司,每个子公司要在一个单独的网段中,因此至少需要2^n>=6,因此能够得到n=3,最大主机数2^(8-3)-2=30个网络,满足大于等于26的需求
192.168.0.000 00001
192.168.0.000 11110
…….
192.168.0.101 00001
192.168.0.101 11110 第6个网络的地址
因此能够得到:
192.168.0.1/27 – 192.168.0.161/27 第一网络的地址及范围
…….
192.168.0.1/27 – 192.168.0.190/27 第六个网络的地址及范围
2、一家集团公司有12家子公司,每家子公司又有4个部门。上级给出一个172.16.0.0/16的网段,让给每家子公司以及子公司的部门分配网段。
分析:因为有12个子公司,因此至少要划分2^n>=12个子网,因此能够得到n=4,因此需要向主机位借4个,能够划分16个子网,但是只用12个,剩余4个闲置,因此划分后得到:
172.16.0.0/16划分16个子网
172.16.0000 0000.00000001 ——— 172.16.0.1/20
172.16.0000.1111.11111110 ——— 172.16.15.254/20 第一个网络的地址及范围
………
172.16.1011 0000.00000001 ——— 172.16.176.1/20
172.16.1011 1111.11111110 ——— 172.16.191.254/20 第十二个网络地址及范围
………
172.16.1111 0000.00000001 ——— 172.16.240.1/20
172.16.1111 1111.11111110 ——— 172.16.255.254/20 最后一个网络地址及范围
又因为每个公司又有4个部分,因为要在12个子网的基础上再次划分子网,所以还需要在向主机位借2位即可, 下面以第一个子公司划分为4个子网为例,因此又能够得到:
172.16.0000 00 00.00000001 ——— 172.16.0.1/22
172.16.0000 00 00.11111110 ——— 172.16.0.254/22 第一个网络地址及范围
………
172.16.0000 11 00.00000001 ——— 172.16.12.1/20
172.16.0000 11 00.11111110 ——— 172.16.12.254/20 第四个网络地址及范围
特殊地址:
0.0.0.0:不是一个真正意义上的IP地址。它表示一个集合:所有不清楚的主机和目的网络。
255.255.255.255:限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
127.0.0.1~127.255.255.254:本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“ 127.0.0.1”的 数据包。
224.0.0.0到239.255.255.255:组播地址, 224.0.0.1特指所有主机, 224.0.0.2特指所有路由器。
224.0.0.5:指OSPF 路由器,地址多用于一些特定的程序以及多媒体程序
169.254.x.x:如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址。
四、路由
路由的功能:跨网络通信时选择传输路径。
路由的分类:
主机路由:目标地址为单个IP
网络路由:目标地址为IP网络
默认路由:目标为任意主机 0.0.0.0/0.0.0.0.0
接口:自己路由器上面一个能够指向目标地址的端口
root@cenots6.8 ~ # dmesg | grep -i eth 查看网卡驱动模块信息
e1000 0000:02:01.0: eth0: (PCI:66MHz:32-bit) 00:0c:29:c4:17:61
e1000 0000:02:01.0: eth0: Intel(R) PRO/1000 Network Connection
root@cenots6.8 ~ # rmod e1000 或modprobe -r e1000
root@cenots6.8 ~ # lsmod |grep e1000 查看模块信息
root@cenots6.8 ~ # modprobe e1000 在把模块加载回来
网关:指向目标地址的下一个路由器的临近接口,这里需要注意的是主机与你的主机配置的gateway一定要在同一网段内。
DNS:将主机名解析为IP地址
配置文件:/etc/resolv.conf
本地dns数据库:/etc/hosts里面可以自行指定ip地址和主机名,且主机名可以有多个别名,然后ping主机名就可以看到对应的ip地址
将主机名解析为ip地址
dig -t A www.magedu.com((dig 测试时,是不会查看/etc/hosts的,而是通过DNS服务器查看的)
dig-t A FQDN 解析主机名为ip
FQDN–> IP
dig -x IP 解析ip为主机名 但是互联网上面大多数服务器都不支持反解
DNS服务器地址:
114.114.114.114(china)
8.8.8.8(谷歌)
网络配置文件:/etc/sysconfig/network-scripts/ifcfg-接口名称
DEVICE=接口名称 定义接口名称:/etc/udev/rules.d/70-persistent-net.rules 需要注意的是两个文件中接口名称必须一致,否则会报错
TYPE=Ethernet
UUID:设备唯一标识
ONBOOT:是否开机自动连接
NM_CONTORLLED=yes 是否接受NetworkManager控制 service NetworkManager status ,该服务在centos6 中不稳定,建议no
BOOTPROTO=static none dhcp 或者把这行干掉直接写IPADDR
IPADDR=ipv4地址
NETMASK=子网掩码
PREFIX=子网掩码的简单格式
GATEWAY=网关
DNS1=8.8.8.8(谷歌的网关)
DNS2=114.114.114.114(中国的网关) 网关可以加三个
DNS3=8.8.4.4(谷歌的)
HWADDR=网卡地址 如果要改mac地址需要用MACADDR名字
PEERDNS=yes 如果BOOTPROTO的值为“ dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至
ONPARENT=yes 物理网卡启动就启动别名
最省略写法:2行
DEVICE=eth1
BOOTPROTO=dhcp
静态配置IP地址:
DEVICE=eth1
IPADDR=10.1.1.1
PREFIX=16
GATEWAY=10.1.1.254
DNS1=8.8.8.8
注意:配置完成后要重新启动服务 service network restart
网络接口设备别名:为每个设备别名生成独立的接口配置文件,在启用之前首先要关闭NetworkManager服务,且必须使用静态IP。
service NetworkManager stop(临时关闭)/chkconfig NetworkManager off(下次开机时关闭)
网络接口配置bonding:
将多块网卡绑定同一个IP地址对外提供服务,可以实现高可用和负载均衡,直接给两块网卡绑定一个IP是不可能的,通过bonding虚拟一块网卡对外提供链接,但是需要两块网卡修改为同一个MAC地址。
bonding的工作模式:
Mode 0 (balance-rr) 轮询模式
轮转( Round-robin)策略:从头到尾顺序的在每一个slave
接口上面发送数据包。本模式提供负载均衡和容错的能力
——轮流的往网卡上面发数据包,两个网卡都走数据,第一个用户来了请求第一个快网卡,第二个用户来了请求第二块网卡,如果二块网卡坏了,来了第一个用户,第一个网卡,来了第二个就可能走第二块网卡,因此能够实现均匀负载,但容错能力较差。
Mode 1 (active-backup)
活动-备份(主备)策略:在绑定中,只有一个slave被激活。
当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
—–主备模式,两块网卡,默认第二块是不工作的,只有第一块网卡坏了才工作,性能不好,有容错性
Mode 3 (broadcast)
广播策略:在所有的slave接口上传送所有的报文。本模式提供容错能力。
配置方法:
root@cenots6.8 /etc/sysconfig/network-scripts # cat ifcfg-eth1 ifcfg-eth2
DEVICE=eth1
SLAVE=yes
MASTER=bond0
DEVICE=eth2
SLAVE=yes
MASTER=bond0
root@cenots6.8 /etc/sysconfig/network-scripts # cat ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.1.105
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
BONDING_OPTS="miimon=100 mode=1"
miimon:是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
cat /proc/net/bonding/bond0 可以查看绑定信息
如需卸载:先ifconfig bond0 down 然后rmmod bonding 卸载掉该模块
实验时,IP地址可以配置与自己windows中的IP在一个网段,在虚拟机图形界面右下角,网卡图标点击断开连接进行测试,在windows界面ping配置的IP地址即可。
路由功能实例:现有路由R1和R2,R1有两个接口分别是R1-0和R1-1,R1-0链接网络192.168.0.1/24,R1-1连接网络10.0.0.1/8 且与路由R2路由的R2-1接口相连,R2-1的接口地址为10.0.0.2/8,R2-0的接口连接网络172.16.0,1/16.
因此可以得到
R1的路由表为:
网络地址 接口 网关
172.16.0.0/16 R1-1 10.0.0.2 注意在添加路由表的时候不用添加相邻网段的,加不相邻的就可以,因此 配置路由表示 添加此网络即可
192.168.0.0/24 R1-0 192.168.0.1
10.0.0.0/8 R1-1 10.0.0.1
R2的路由表
网络地址 接口 网关
192.168.0.0/24 R2-1 10.0.0.1 注意在添加路由表的时候不用添加相邻网段的,加不相邻的就可以,因此 配置路由表示 添加此网络即可
10.0.0.0/8 R2-1 10.0.0.2
172.16.0.0/16 R2-0 172.16.0.1
模拟实例:分别用两个centos6虚拟机,模仿两个路由,每个虚拟机要用有两个虚拟网卡,模拟两个接口,具体设置如下:
R1的网卡中的配置文件:
ifcfg-eth0
DEVICE=eth0
IPADDR=192.168.0.1
PREFIX=24
ifcfg-eth1
DEVICE=eth1
IPADDR=10.0.0.1
PREFIX=8
配置完成后重启网络服务: service network restart 该步一定要放在route add 之前,否则route add添加的内容会被刷掉
route add -net 172.16.0.0/16 gw 10.0.0.2 dev eth1
配置完成后截图如下:
当做路由器使用必须要启用:echo 1 > /proc/sys/net/ipv4/ip_forward 启用路由转发功能
关闭防火墙:iptables -F
R2的网卡中的配置文件:
ifcfg-eth0
DEVICE=eth16777736
IPADDR=172.16.0.1
PREFIX=16
ifcfg-eth1
DEVICE=eth33554984
IPADDR=10.0.0.2
PREFIX=8
配置完成后重启网络服务: service network restart
route add -net 192.168.0.0/24 gw 10.0.0.1 dev eth33554984
配置完成后截图如下:
当做路由器使用必须要启用:echo 1 > /proc/sys/net/ipv4/ip_forward 启用路由转发功能
关闭防火墙:iptables -F
找两个主机分别配置 192.168.0.100/24 gw 192.168.1.1
172.16.0.100/16 gw 172.16.0.1
两个主机相互ping对方主机地址 根据ttl 经过路由的状态,查看工作是否正常。
也可以根据tracert 172.16.0.100 查看跳数
注意:echo 1 > /proc/sys/net/ipv4/ip_ipforward 由于是内核文件存不住盘,因此可以修改/etc/sysctl.conf 使其永久有效,sysctl -p 重新读改过的文件