《计算机网络与通信 实验》笔记
零. 概述
0.1 网络分层OSI参考模型
OSI参考模型是国际标准化组织(ISO)制定的一个用于计算机网络体系结构的标准框架。
OSI分为7层,自上而下分别是:
- 7.应用层:应用软件
- 6.表示层:数据格式转换
- 5.会话层:决定采用哪种传输方式
- 4.传输层:提供端到端的通信,主机连接建立和断开,保证数据传输的可靠性
- 3.网络层:根据目标地址实现通信
- 2.数据链路层:根据物理地址实现数据的传输
- 1.物理层:传输介质
0.2 TCP/IP参考模型
TCP/IP参考模型是实际应用最广泛的网络协议体系结构,它只有4层,自上而下分别是:
- 4.应用层(包含了OSI的应用层、表示层、会话层)
- 数据
- 协议:HTTP、HTTPS、SSH、DNS、FTP、POP3、SMTP…
- 3.传输层
- TCP首部+数据
- TCP:面向连接的可靠传输协议,支持应用层所有协议
- UDP:无连接的不可靠传输协议,支持DNS、DHCP、SMB等
- 2.网络层
- IP首部+TCP首部+数据
- IP:负责数据包的传输
- ICMP:负责网络故障诊断
- ARP:负责地址解析
- 1.网络接口层(包含了OSI的数据链路层、物理层)
- 数据链路层
- MAC首部+LLC首部+IP首部+TCP首部+数据+FCS(帧校验序列)
- MAC子层协议:将数据包封装成帧,通过物理层传输
- 物理层
- 传输介质
- 数据链路层
0.3 网络层
网络层关注的问题:如何找到合适的网络路径,将数据包从源主机传输到目的主机。
0.3.1 数据包分组与封装
网络层主要协议:IP、ICMP、ARP
- 分组交换:以分组为单位的存储转发的传输方式,将长的报文分割成若干短分组进行多次传输。
- 路由转发:源与目的主机之间可能存在多条相通的路径,网络层选择一条“最佳”路径完成数据转发。
- 拥塞控制:合理分配数据包的转发路径,提高转发效率。当产生网络拥塞时,及时更换传输路径。
- 异种网络的互连:当源主机和目标主机的网络不属于同一种网络类型时,为了解决不同网络在寻址、分组大小、协议等方面的差异,要求在不同种类网络交界处的路由器能够对分组进行处理,使得分组能够在不同网络上传输。不同的网络类型对分组大小要求不一样,需要重新分组。
0.3.2 网络层与数据链路层的关系
- 通信双方:
- 数据链路层实现在同一局域网内利用MAC地址进行通信
- 网络层实现在不同局域网内利用IP地址进行通信
- 解决的问题:
- 数据链路层实现的是保证两端链路的连通性,可以说数据链路层不能分辨异构的网络
- 网络层要解决异构网络互联的问题,按照不同网络协议的格式完成数据的重新封装
0.3.3 IP地址、子网掩码(Subnet Mask)、网关(Gateway)
IP地址:主机在Internet上的一个全世界范围内唯一32位标识符,用点分十进制表示,如192.168.0.1。
子网掩码:用来划分网络和主机的32位二进制数,用来指明一个IP地址的哪些位标识网络地址,哪些位标识主机地址。
表示方法:
- CIDR表示法:/子网掩码位数,如/24表示前24位是1,其余8位是0
- 点分十进制:xxx.xxx.xxx.xxx,如255.255.255.0
- 转换例:255.255.254.0 -> 11111111.11111111.11111110.00000000 -> /23
网关:一个网络的出口。当一个主机要将数据发送给其他网络的主机时,通常首先将数据发往网关。
0.3.4 IP地址分类
IP地址分为A、B、C、D、E五类,每类地址的网络号和主机号的划分不同。
类别 | 前缀 | 网络号 | 主机号 | 第一字节范围 | 子网掩码 | 主机数 | 预留私有地址网段(RFC 1918) |
---|---|---|---|---|---|---|---|
A类 | 0 | 7位 | 24位 | 0~127 | /8 | 2^24-2=16777214 | 10.0.0.0~10.255.255.255 |
B类 | 10 | 14位 | 16位 | 128~191 | /16 | 2^16-2=65534 | 172.16.0.0~172.31.255.255 |
C类 | 110 | 21位 | 8位 | 192~223 | /24 | 2^8-2=254 | 192.168.0.0~192.168.255.255 |
D类 | 1110 | 多播地址28位 | - | 224~239 | - | - | - |
E类 | 1111 | 保留地址 | - | 240~255 | - | - | - |
0.3.5 子网划分
借位:从主机最高位开始借位变为新的子网位,剩余部分仍为主机位
例如192.168.1.0/24可划分为:
- 2个子网:192.168.1.0/25、192.168.1.128/25
- 4个子网:192.168.1.0/26、192.168.1.64/26、192.168.1.128/26、192.168.1.192/26
一. 传输介质
1.1 传输介质分类
1.1.1 有线传输介质
有线传输介质是指在两个通信设备之间实现的物理连接部分,它能将信号从一方传输到另一方。
有线传输介质主要有双绞线、同轴电缆和光纤。双绞线和同轴电缆传输电信号,光纤传输光信号。
1.1.2 无线传输介质
在自由空间传输的电磁波根据频谱可将其分为无线电波、微波、红外线、激光等,信息被加载在电磁波上进行传输。在局域网中,通常只使用无线电波和红外线作为传输介质。
1.1.3 直连线和交叉线的区别
直连线:两端的线序相同,用于连接不同设备。
- PC<->Hub/Switch
交叉线:两端的线序不同,用于连接相同设备。
1.2 双绞线制作
1.2.1 双绞线制作标准:EIA/TIA 568
- A:白绿/绿/白橙/蓝/白蓝/橙/白棕/棕
- B:白橙/橙/白绿/蓝/白蓝/绿/白棕/棕
1.2.2 双绞线制作步骤
- 剥线:用压线钳将双绞线一端的外皮剥去3cm,露出8根线。
- 理线:将4对导线分别绕开,8根导线按EIA/TIA 568B标准顺序排列,将线芯撸直并拢。
- 剪线:将芯线放到压线钳切刀处,8根线芯要在同一平面上并拢,而且尽量直,留下一定的线芯长度约1.5CM处剪齐。
- 插线:将双绞线插入RJ45水晶头中,插入过程均衡力度直到插到尽头。检查8根线芯是否已经全部充分、整齐地排列在水晶头里面。
- 压线:用压线钳用力压紧水晶头,抽出即可。
1.2.3 双绞线测试
直连线(两端都是568B标准):12345678
交叉线(一端是568A标准,一端是568B标准):36145278
100Mbps以太网线实际使用的线:白绿/绿/白橙/橙
二. DHCP
2.1 DHCP工作原理
DHCP(Dynamic Host Configuration Protocol)是一种动态主机配置协议,它是一种自动分配IP地址的协议。
DHCP工作原理
- DHCP Discover报文
- 客户端启动时,客户主机->DHCP服务器:谁能给我一个IP地址?
- 源地址:0.0.0.0
- 源端口:UDP 68
- 目的地址:255.255.255.255(广播)
- 目的端口:UDP 67
- DHCP Offer报文
- 服务器接收到广播数据包后,DHCP服务器->客户主机:我能给你分配IP地址192.168.1.2
- 源地址:服务器IP地址
- 源端口:UDP 67
- 目的地址:255.255.255.255(广播)
- 目的端口:UDP 68
- DHCP Request报文
- 客户端接收到DHCP服务器分配的IP地址后,客户主机->DHCP服务器:好的,我接受你分配的IP地址192.168.1.2,请求确认
- 源地址:0.0.0.0
- 源端口:UDP 68
- 目的地址:255.255.255.255(广播)
- 目的端口:UDP 67
- DHCP ACK报文
- 服务器接收到广播数据包后,DHCP服务器->客户主机:好的,我已经确认分配给你IP地址
- 源地址:服务器IP地址
- 源端口:UDP 67
- 目的地址:255.255.255.255(广播)
- 目的端口:UDP 68
DHCP端口号:UDP 67(服务器)和UDP 68(客户端)
2.2 DHCP配置
- 网络拓扑图
- 设置DHCP服务器和PC机的TCP/IP属性
- DHCP服务器:192.168.1.1/24
- PC1/PC2:自动获取IP地址
- 配置DHCP服务器
- 设置IP池为192.168.1.10-20
2.3 验证DHCP配置
- 使用ipconfig /all命令查看各机器的TCP/IP配置
- PC1: 192.168.0.10
- PC2: 192.168.0.11
- 使用ping命令测试连通性
- PC1<->PC2:连通
三. DNS及Web服务
3.1 DNS工作原理
DNS(Domain Name System,域名系统)是一个分布式数据库,用于域名和IP地址之间的映射。
- IPv4:32位二进制数,可写作点分十进制
- IPv6:128位二进制数,可写作冒号分隔的8组16进制数
DNS工作流程:
- PC机->首选DNS服务器:我要访问www.baidu.com
- 首选DNS服务器->根域名’.'DNS服务器:www.baidu.com对应的IP地址是多少?
- 根域名’.'DNS服务器->首选DNS服务器:www.baidu.com归’com’DNS服务器管
- 首选DNS服务器->'com’DNS服务器:www.baidu.com对应的IP地址是多少?
- 'com’DNS服务器->首选DNS服务器:www.baidu.com归’baidu.com’DNS服务器管
- 首选DNS服务器->'baidu.com’DNS服务器:www.baidu.com对应的IP地址是多少?
- 'baidu.com’DNS服务器->首选DNS服务器:www.baidu.com对应的IP地址是XXX.XXX.XXX.XXX
- 首选DNS服务器->PC机:www.baidu.com对应的IP地址是XXX.XXX.XXX.XXX
- PC机->Web服务器:我要访问XXX.XXX.XXX.XXX
- Web服务器->PC机:返回相关的数据
递归查询:递归查询是一种DNS服务器的查询模式。在该模式下,DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
迭代查询:DNS服务器会向客户机提供其他能够解析查询请求的DNS服务器地址。当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。
DNS端口号:UDP 53
3.2 HTTP工作原理
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于传输超文本的协议。
HTTP工作流程:
1. 客户端浏览器解析URL
2. 客户端浏览器生产HTTP请求信息
3. 服务器发送响应HTTP页面
4. 客户端浏览器解析响应页面
3.3 DNS配置
- 网络拓扑图(完成TCP/IP配置)
- 配置DNS服务器
- jike.com配置Host IP:192.168.0.20(对应Web服务器)
- ruanjian.com配置Host IP:192.168.0.70(没有对应的Web服务器)
3.4 验证DNS配置
- 使用ipconfig /all命令查看各机器的TCP/IP配置
- 在客户端PC上使用ping命令测试连通性
- jike.com:Reply from 192.168.0.20: bytes=32 time<1ms TTL=128(来自192.168.0.20的回复:字节=32 时间<1ms TTL=128)
- ruanjian.com:Request timed out(来自192.168.0.10的回复:无法访问目标主机)
- anquan.com:Unknown host <www.anquan.com(Ping请求找不到主机anquan.com。请检查该名称,然后重试)>
3.5 FTP服务配置
- 在控制面板中启用IIS(Internet Information Services,Internet信息服务)
- 打开IIS,网站名称改为jike,选择物理路径。在路径下新建index.html文件,用ANSI编码保存,并在默认文档中添加该文档。此时访问jingke.com/index.html应该能看到index.html的内容。
- 新建一个FTP站点,名称为jikeFTP,选择物理路径(在该位置新建几个文件夹测试),绑定IP地址为192.168.0.20,选择无SSL,允许所有用户访问。此时使用FTP客户端连接,应该能看到FTP站点的内容。
四. 交换机工作原理及基本配置
4.1 交换机
交换机(Switch)是一种网络设备,用于在计算机网络中连接多个设备,实现设备之间的通信。
最常见的以太网交换机工作于OSI网络参考模型的第二层(即数据链路层),是一种基于MAC地址识别、完成以太网数据帧转发的网络设备。
4.1.1 MAC地址
MAC地址(Media Access Control Address,介质访问控制地址)是一个用来识别网络设备的地址,又称物理地址。
由48位二进制数组成,通常以12位十六进制数表示,如00-0C-29-3D-2E-7C,也写作000C.293D.2E7C、00:0C:29:3D:2E:7C。
前24位是厂商识别码,后24位是设备识别码(供应商对网卡的唯一编号)。
- 单播地址:MAC地址的第一个字节的最低位为0,可作为目的地址和源地址。
- 组播地址:MAC地址的第一个字节的最低位为1,仅能作为目的地址。
- 广播地址:MAC地址全为1,即FF-FF-FF-FF-FF-FF,用于向同一网络中的所有设备发送数据。
4.1.2 MAC地址表
交换机内部用于存放物理地址与交换机端口映射关系的数据库,交换机依靠MAC地址表实现数据帧的转发。
- Static MAC Address:静态MAC地址,由管理员手动配置。
- Dynamic MAC Address:动态MAC地址,由交换机自动学习。
动态MAC地址学习过程
- 主机A->交换机:我要发送数据帧给主机B。 交换机:记录主机A的MAC地址和端口映射。
- 交换机->广播:主机A的数据帧发送给所有端口。
- 主机B->交换机:我收到数据帧了,回复。 交换机:记录主机B的MAC地址和端口映射。
4.1.3 数据帧
- 数据帧(Data Frame)是数据链路层的协议数据单元,包括:帧头、数据、帧尾。
- 在以太网链路上的数据单元称为以太网帧,现在最常见的以太网帧是Ethernet II,包括:目的MAC地址(6B)、源MAC地址(6B)、类型/长度(2B)、数据(46-1500B)、FCS帧校验序列(4B)。
帧转发/过滤:单播帧依靠MAC地址表进行转发/过滤,组播帧向指定端口转发,广播帧向所有端口转发
帧转发方式:
- 直通转发:交换机收到帧头(通常只检查14个字节)后立刻察看目的MAC地址并进行转发。
- 存储转发:接收完整的帧,执行完校验后,转发正确的帧而丢弃错误的帧。
- 无碎片直通转发:交换机读取前64个字节后开始转发。
4.2 交换机本地配置-MAC地址绑定
- 网络拓扑图(完成TCP/IP配置)
- 计算机串口或USB口与交换机的Console端口连接;打开计算机Win系统的“超级终端”或其他串口通信客户端软件;Serial Port按交换机要求设置,一般默认
- 常用命令/模式切换命令
- Switch> //(初始)用户模式
- Switch>enable //进入特权模式
- Switch#configure terminal //进入全局配置模式
- Switch(config)#interface fa0/1 //进入接口fa0/1配置模式
- Switch(config-if)#end //退出配置模式,返回特权模式
- Switch#show clock //查看交换机时间
- Switch#show version //查看交换机版本信息
- 修改交换机主机名
- Switch#configure terminal
- Switch(config)#hostname jike
- jike(config)#
- MAC地址表管理命令
- Switch#show mac-address-table //查看MAC地址表
- Switch#show mac-address-table aging-time //查看MAC地址表老化时间
- 交换机上添加MAC地址绑定
- Switch(config)#mac-address-table static aaaa.aaaa.aaaa vlan 1 interface fa0/1
- Switch(config)#mac-address-table static aaaa.aaaa.aaab vlan 1 interface fa0/2
- Switch(config)#mac-address-table static aaaa.aaaa.aaac vlan 1 interface fa0/3
- 交换机上删除MAC地址绑定
- Switch(config)#no mac-address-table static aaaa.aaaa.aaac vlan 1 interface fa0/3
4.3 验证交换机配置
以绑定了fa0/1、fa0/2的交换机为例,在以下端口连接情况下,使用ping命令测试连通性:
- PC1至1号端口,PC2至2号端口,PC3至3号端口
- PC1<->PC2:连通
- PC1<->PC3:连通
- PC2<->PC3:连通
- MAC地址表:fa0/1-PC1、fa0/2-PC2、fa0/3-PC3
- PC1至2号端口,PC2至1号端口,PC3至10号端口
- PC1<->PC2:不连通
- PC1<->PC3:不连通
- PC2<->PC3:不连通
- MAC地址表:fa0/1-PC2、fa0/2-PC1、fa0/10-PC3
- PC1至5号端口,PC2至2号端口,PC3至3号端口
- PC1<->PC2:不连通
- PC1<->PC3:不连通
- PC2<->PC3:连通
- MAC地址表:fa0/1-PC2、fa0/2-PC1、fa0/3-PC3
- 总结:静态MAC地址绑定后,主机与端口连线必须一一对应才能传输数据;如果是动态MAC地址,主机连任意一个端口均可正常收发数据。
五. 交换机VLAN
5.1 VLAN
交换网络是平面网络结构,必须依赖广播,广播域过大会导致网络拥塞。
VLAN(Virtual Local Area Network,虚拟局域网)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样。
VLAN的特点:
- 基于逻辑的分组,不受物理位置限制。
- 在同一VLAN内和真实局域网相同。
- 不同VLAN内用户要通信需要借助三层设备。
基于端口的VLAN:交换机端口可以划分到不同的VLAN中,不同VLAN之间的通信需要通过路由器。
5.1.1 IEEE 802.1Q标准
定义了基于端口的VLAN模型,规定如何标识带有 VLAN 成员信息的以太帧,定义VLAN标签格式。
在以太网帧中增加了一个4字节的802.1Q帧头,用于标识VLAN信息:目的MAC地址(6B)、源MAC地址(6B)、802.1Q帧头(4B)、类型/长度(2B)、数据(46-1500B)、FCS帧校验序列(4B)。
802.1Q帧头格式:TPID(2B)+PCP(3b)+DEI(1b)+VID(12b)
- TPID:标识802.1Q帧头,取值0x8100
- PCP:优先级,取值0-7,0最低,7最高
- DEI:丢弃标志,用于QoS
- VID:VLAN ID,取值1-4094
5.1.2 交换机端口类型
Access端口 | Trunk端口 | |
---|---|---|
Tag | UnTagged端口(接入端口) | Tag Aware端口(干道端口) |
VLAN | 只能属于一个VLAN | 可以允许多个VLAN通过 |
数据帧 | 发送的数据帧不带VLAN标签 | 发送的数据帧带有VLAN标签 |
用途 | 一般用于连接终端设备(PC机) | 一般用于交换机之间的连接 |
默认 | 交换机上的默认端口 | - |
5.2 交换机VLAN配置
- 网络拓扑图(完成TCP/IP配置)
- 创建VLAN
- Switch(config)#vlan 10
- Switch(config-vlan)#exit
- Switch(config)#vlan 20
- Switch(config-vlan)#exit
- 配置Access端口/划分VLAN
- Switch(config)#interface fa0/1-5
- Switch(config-if-range)#switchport mode access
- Switch(config-if-range)#switchport access vlan 10
- Switch(config-if-range)#exit
- Switch(config)#interface fa0/6-10
- Switch(config-if-range)#switchport mode access
- Switch(config-if-range)#switchport access vlan 20
- Switch(config-if-range)#exit
- 配置Trunk端口
- Switch(config)#interface fa0/24
- Switch(config-if)#switchport mode trunk
5.3 验证交换机VLAN配置
- 显示交换机VLAN配置
- Switch#show vlan brief
- 连通性测试
- PC1<->PC4:连通
- PC2<->PC3:连通
- 其余PC之间不连通
- 总结:同一VLAN内可以直接相互通信,不同VLAN内不能直接相互通信。
六. VLAN间通信
6.1 路由
VLAN是广播域(二层概念),而两个广播域之间通常由路由器连接,广播域之间来往的数据包都是由路由(三层概念)转发的。路由的主要功能由路由器和三层交换机提供。
VLAN间通信一般有以下3种实施方案:
- 路由器多端口方式
- 单臂路由方式
- 三层交换机方式
6.2 路由器多端口方式
与路由器连接不同子网通信的方法一样,为路由器端口设置一个IP地址作为对应VLAN的网关,有几个VLAN就需要在几个端口设置IP地址。
缺点:
一般中大型局域网,VLAN数量可以很多,而路由器端口数量较少,路由器会成为局域网性能瓶颈。
路由器采用软件对IP报文进行转发,占用CPU和内存资源,效率比较低,无法胜任通信数据量较大的局域网。
6.2.1 配置
- 网络拓扑图(完成TCP/IP配置)
- 二层交换机配置
- 创建VLAN10和VLAN20
- 配置Access端口/划分VLAN
- VLAN10: fa0/1,fa0/10
- VLAN20: fa0/2,fa0/20
- 查看VLAN配置: Switch#show vlan brief
- 路由器配置
- Router(config)#interface fa0/0
- Router(config-if)#no shutdown //激活接口
- Router(config-if)#ip address 192.168.1.1 255.255.255.0 //设置接口IP地址
- Router(config-if)#exit
- Router(config)#interface fa0/1
- Router(config-if)#no shutdown
- Router(config-if)#ip address 192.168.2.1 255.255.255.0
- Router(config-if)#exit
6.2.2 验证路由器配置
- 显示路由表
- Router#show ip route
- 显示IP接口信息
- Router#show ip interface brief
- 连通性测试
- PC1<->PC2:连通
6.3 单臂路由方式
在路由器的一个物理接口上配置多个子接口,作为不同VLAN的默认网关,实现原来相互隔离的不同VLAN之间的通信。
缺点:
路由器转发速度有限,无法满足VLAN间通信数据量大的需求,并且容易造成单点故障。
数据在物理链路上往返传输,会有转发延迟,很可能成为局域网性能瓶颈。
6.3.1 配置
- 网络拓扑图(完成TCP/IP配置)
- 二层交换机配置
- 创建VLAN10和VLAN20
- 配置Access端口/划分VLAN
- VLAN10: fa0/1
- VLAN20: fa0/2
- 配置Trunk端口
- Switch(config)#interface fa0/24
- Switch(config-if)#switchport mode trunk
- Switch(config-if)#exit
- 查看VLAN配置: Switch#show vlan brief
- 路由器配置
- Router(config)#interface fa0/0
- Router(config-if)#no shutdown //激活接口
- Router(config-if)#exit
- Router(config)#interface fa0/0.10 //创建虚拟子接口10
- Router(config-subif)#encapsulation dot1Q 10 //封装VLAN协议(802.1Q)
- Router(config-subif)#ip address 192.168.1.1 255.255.255.0 //设置子接口IP地址
- Router(config-subif)#exit
- Router(config)#interface fa0/0.20 //创建虚拟子接口20
- Router(config-subif)#encapsulation dot1Q 20
- Router(config-subif)#ip address 192.168.2.1 255.255.255.0
- Router(config-subif)#exit
6.3.2 验证路由器配置
- 显示路由表
- Router#show ip route
- 显示IP接口信息
- Router#show ip interface brief
- 显示Trunk端口
- Switch#show interfaces trunk
- 连通性测试
- PC1<->PC2:连通
6.4 三层交换机虚拟接口SVI
三层交换机实现VLAN间通信的方法是在已有的VLAN上创建虚接口,它同样可以配置IP地址,借助虚接口三层交换机能够实现路由转发功能。
优点:
VLAN间流量不必经过路由器,网络延时和抖动都很小,同时也极大程度的减轻上层接入路由器的负载。
三层交换机的VLAN间路由由交换机的三层转发引擎完成,其性能取决于交换机的背板转发速率,可以在多个端口上轻松实现线速转发,可以获得很好的性能。
6.4.1 配置
- 网络拓扑图(完成TCP/IP配置)
- 二层交换机配置
- 创建VLAN10和VLAN20
- 配置Access端口/划分VLAN
- VLAN10: fa0/1
- VLAN20: fa0/2
- 配置Trunk端口:fa0/24
- 查看VLAN配置: Switch#show vlan brief
- 查看Trunk端口: Switch#show interfaces trunk
- 三层交换机配置
- 创建VLAN10和VLAN20
- 配置SVI的ip地址
- Switch(config)#interface vlan 10
- Switch(config-if)#ip address 192.168.1.1 255.255.255.0
- Switch(config-if)#exit
- Switch(config)#interface vlan 20
- Switch(config-if)#ip address 192.168.2.1 255.255.255.0
- Switch(config-if)#exit
- 开启路由功能
- Switch(config)#ip routing
6.4.2 验证三层交换机配置
- 显示路由表
- Switch#show ip route
- 连通性测试:4台主机之间均可相互通信
七. 静态路由
7.1 路由器
路由器(Router):连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个IP数据包中的地址然后决定如何传送的专用智能性的网络设备。
- 直连网络(邻村):直接连接在某个路由器上的网络,称为该路由器的直连网络。每个路由器接口的IP作为所连直连网络的网关(村口)。
- 非直连网络:不直接连接在某个路由器上的网络(通常间隔多个路由器)。
7.1.1 路由表
路由器依靠路由表来选择转发路径。
路由表中包含有该路由器掌握的所有目的网络地址,以及通过此路由器到达这些网络中最佳路径,这个最佳路径指的是路由器的某个接口或下一条路由器的地址。
7.1.2 静态路由
静态路由:由系统管理员事先设置好固定的路由信息。
- 优点:简单、高效、可靠。优先级最高。
- 缺点:不能动态地适用网络状况的变化。
7.2 静态路由配置
- 网络拓扑图(完成TCP/IP配置)
- 路由器配置(Router1为例)
- Router1(config)#interface fa0/0
- Router1(config-if)#no shutdown //激活接口
- Router1(config-if)#ip address 192.168.1.1 255.255.255.0 //设置接口IP地址为所在网络的网关
- Router1(config-if)#exit
- Router1(config)#interface fa0/1
- Router1(config-if)#no shutdown
- Router1(config-if)#ip address 192.168.2.1 255.255.255.0
- Router1(config-if)#exit
- Router1(config)#ip route 192.168.3.0 255.255.255.0 192.168.2.2 //设置静态路由:ip route <目的网络> <子网掩码> <下一跳地址>
7.3 验证静态路由配置
- 显示路由表
- Router1#show ip route
- 连通性测试:3台主机之间均可相互通信
7.4 静态路由配置补充
- 通过192.168.0.1的端口,访问所有24位子网掩码的目的网络
- Router1(config)#ip route 0.0.0.0 255.255.255.0 192.168.0.1
- 通过192.168.0.1的端口,访问所有网络
- Router1(config)#ip route 0.0.0.0 0.0.0.0 192.168.0.1
八. 动态路由RIP
8.1 动态路由
动态路由:路由器根据网络系统的运行情况而自动调整的路由信息。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。
- 优点:动态路由可以自动学习网络的拓朴结构,并更新路由表。
- 缺点:路由广播更新信息将占据大量的网络带宽。
8.1.1 动态路由分类
- 按照使用的区域不同
- 内部网关协议IGP(Interior Gateway Protocol)域内协议。如RIP、EIGRP、OSPF、ISIS
- 外部网关协议EGP(Exterior Gateway Protocol)域间协议。如BGP
- 按照算法不同
- 距离矢量协议(Distance Vector)。如RIPV1、RIPV2、BGP
- 链路状态路由协议(Link State)。如OSPF、ISIS
- 按是否携带子网掩码
- 有类路由协议。如RIPV1
- 无类路由协议。如RIPV2、OSPF、ISIS、BGP
8.1.2 RIP协议
RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量值来衡量到达目的地址的距离。
在RIP网络中,缺省情况下,设备到与它直接相连网络的跳数为0,通过一个设备可达的网络的跳数为1,其余依此类推。也就是说,度量值等于从本网络到达目的网络间的设备数量。
为限制收敛时间,RIP规定度量值取0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。由于这个限制,使得RIP不可能在大型网络中得到应用。
RIP路由器工作流程:
- RIP路由器A,B初始的路由表中只有自己的直连路由。
- 每30秒,向相邻路由器发送自己的路由表。
- 收到相邻路由器的路由表后,更新自己的路由表:
- 新增:如果收到的路由表中有自己没有的路由,则添加到自己的路由表中。
- 更新:如果收到的路由表中有自己已有的路由,且新的跳数更小,则更新自己的路由表的跳数。
- RIP计时器:
- 更新计时器:每30秒左右发送一次路由表。
- 失效计时器:180秒(6倍更新时间)未更新,标记为不可达。
- 刷新计时器:无效路由240秒未更新,从路由表中删除。
路由毒化:当一个路由器发现一个网络不可达时,会向其他路由器发送一个度量值为16的路由,以传播路由失效的消息,这个过程称为路由毒化。
8.1.3 RIP协议版本
RIPv1
- 使用广播的方式发送路由更新
- 路由更新信息中不携带子网掩码,为有类路由协议,不支持 VLSM 和 CIDR
- 不支持认证
RIPv2
- 发送更新报文的方式为组播,组播地址为224.0.0.9
- 路由信息中加入了子网掩码,为无类路由协议,支持 VLSM,支持路由聚合与 CIDR
- 支持明文认证和 MD5 密文认证
VLSM:可变长子网掩码Variable Length Subnet Mask
CIDR:无类域间路由聚合Classless Inter-Domain Routing
8.2 RIPV1
8.2.1 配置
- 网络拓扑图(完成TCP/IP配置)
- 路由器配置(以Router1为例)
- Router1(config)#interface lo0 //创建Loopback接口,用于模拟网络
- Router1(config-if)#ip address 1.1.1.1 255.255.255.0
- Router1(config-if)#exit
- Router1(config)#interface fa0/0
- Router1(config-if)#no shutdown //激活接口
- Router1(config-if)#ip address 12.1.1.1 255.55.255.0
- Router1(config-if)#exit
- Router1(config)#router rip //进入RIP协议配置模式
- Router1(config-router)#version 1 //设置RIP版本为1
- Router1(config-router)#network 1.1.1.0 //设置RIP协议的网络地址
- Router1(config-router)#network 12.1.1.0
8.2.2 验证RIPV1配置
- 显示路由表
- Router1#show ip route
- 连通性测试:Router1和Router3的lo0接口之间可以相互通信
8.3 RIPV2
8.3.1 配置
- 网络拓扑图(完成TCP/IP配置)
- 路由器配置(以Router1为例)
- Router1(config)#interface lo0
- Router1(config-if)#ip address 10.1.1.1 255.255.255.0
- Router1(config-if)#exit
- Router1(config)#interface fa0/0
- Router1(config-if)#no shutdown
- Router1(config-if)#ip address 12.1.1.1 255.255.255.0
- Router1(config-if)#exit
- Router1(config)#router rip
- Router1(config-router)#version 2 //设置RIP版本为2
- Router1(config-router)#network 10.1.1.0
- Router1(config-router)#network 12.1.1.0
- Router1(config-router)#no auto-summary //关闭自动汇总
8.3.2 验证RIPV2配置
- 显示路由表
- Router1#show ip route
- 连通性测试:Router1和Router3的lo0接口之间可以相互通信
九. NAT
9.1 NAT
NAT(Network Address Translation,网络地址转换)是一种将私有地址(RFC 1918)转换为公有地址的技术,用于解决IP地址不足的问题。
9.1.1 NAT术语
- 内部本地IP地址:分配给内部网络中的主机的IP地址,通常这种地址来自RFC1918指定的私有地址空间。
- 内部全局IP地址:内部全局IP地址,对外代表一个或多个内部本地IP地址,通常这种地址来自全局惟一的地址空间,通常由ISP提供。
- 外部本地IP地址:在内部网络中看到的外部主机的IP地址,通常来自RFC 1918定义的私有地址空间。
- 外部全局IP地址:外部网络中的主机的IP地址,通常来自全局可路由的地址空间。
9.1.2 NAT分类
- 静态NAT:一对一映射,将一个内部IP地址映射到一个外部IP地址。
- 动态NAT:将内部IP地址动态转换为一组外部IP地址(IP地址池)中的一个。
- 超载NAT:动态NAT的一种实现形式,利用不同端口号将多个内部IP地址转换为一个外部IP地址,也称为PAT、NAPT或端口复用NAT。
9.2 NAT配置
9.2.1 网路拓扑图
完成PC机和服务器的TCP/IP配置
9.2.2 路由器基础配置
- Router1配置
- Router1(config)#interface fa0/0
- Router1(config-if)#no shutdown
- Router1(config-if)#ip address 10.1.1.1 255.255.255.0
- Router1(config-if)#ip nat inside //内网接口
- Router1(config-if)#exit
- Router1(config)#interface fa0/1
- Router1(config-if)#no shutdown
- Router1(config-if)#ip address 2.2.2.1 255.255.255.0
- Router1(config-if)#ip nat outside //外网接口
- Router1(config-if)#exit
- Router1(config)#ip route 0.0.0.0 0.0.0.0 2.2.2.2 //设置静态路由:内网主机可以通过Router1访问外网
- Router2配置
- fa0/0: 2.2.2.2/24
- fa0/1: 1.1.1.1/24
- 外网不允许访问内网,无需配置静态路由
9.2.3 静态NAT
在Router1上设置静态NAT,使外网PC可以使用外网地址2.2.2.10访问内部服务器Server0的Web服务(仅80端口)
配置静态NAT
- Router1(config)#ip nat inside source static tcp 10.1.1.20 80 2.2.2.10 80 //设置静态NAT:内网服务器的80端口映射到外网地址的80端口
验证静态NAT
- 外网PC使用外网地址2.2.2.10访问内部服务器Server0的Web服务
- 显示NAT转换表
- Router1#show ip nat translations
9.2.4 动态NAT
在Router1上设置动态NAT,使内网PC可以通过外网地址2.2.2.11-2.2.2.12访问外网服务器Server1的Web服务(仅80端口)
配置动态NAT
- Router1(config)#access-list 1 permit any //创建访问控制列表 1
- Router1(config)#ip nat pool pool1 2.2.2.11 2.2.2.12 netmask 255.255.255.0 //创建IP地址池:ip nat pool <名称> <起始地址> <结束地址> netmask <子网掩码>
- Router1(config)#ip nat inside source list 1 pool pool1 //设置动态NAT:ip nat inside source list <访问控制列表> pool <IP地址池>
验证动态NAT
- 内网PC使用外网地址1.1.1.10访问外网服务器Server1的Web服务
- 由于IP地址池中只有2个地址,第3个内网主机无法访问外网
- 显示NAT转换表
- Router1#show ip nat translations
9.3 NAPT
在Router1上设置动态NAPT。使内网PC可以通过外网地址2.2.2.15访问外网服务器
配置NAPT
- Router1(config)#ip nat pool pool2 2.2.2.15 2.2.2.15 netmask 255.255.255.0
- Router1(config)#ip nat inside source list 1 pool pool2 overload //overload: 超载,即NAPT
验证NAPT
- 内网PC使用外网地址1.1.1.10访问外网服务器Server1的Web服务
- 显示NAT转换表
- Router1#show ip nat translations
十. ARP协议分析
10.1 ARP协议
ARP(Address Resolution Protocol,地址解析协议)主要用于根据 IP 地址求出主机所对应的物理地址(MAC 地址)。
在网络通信中,主机和主机之间的通信需要根据 OSI 模型进行数据包的封装和解封装,这里面不仅需要封装源目的 IP 地址,也需要源目的 MAC 地址。
一般情况下,上层应用只知道 IP 地址,而并不关心 MAC 地址,所以就需要通过一个协议来获知目的 MAC 地址,完成数据的封装,这个协议就是 ARP 协议。
ARP协议工作原理
主机A已知目标主机B的IP地址,向主机B发送数据包时,需要知道目标主机B的MAC地址。
ARP协议工作原理如下:
- 主机A在自己的ARP缓存表中查找目标主机B的MAC地址,如果找到则直接发送数据包。
- 如果ARP缓存表中没有目标主机B的MAC地址,则主机A向本地网络广播ARP请求报文,请求目标主机B的MAC地址。
- 目标主机B收到ARP请求报文后,向主机A发送ARP响应报文,包含自己的MAC地址。
- 主机A收到ARP响应报文后,将目标主机B的MAC地址存入ARP缓存表,并发送数据包。
10.2 ARP协议分析
以管理员身份启动cmd:
- 查看ARP缓存表:arp -a
- 清空ARP缓存表:arp -d
- 删除指定ARP缓存:arp -d <IP地址>
- 打开Wireshark,在捕获选项中设置过滤器为“arp”。
- 开始抓取数据。
- 以管理员身份启动cmd,清空ARP缓存表并等待一段时间。
- 结束抓取数据。
- 选择一对ARP请求和响应报文,进行分析。
以ARP请求报文为例,具体数据包如下图:
数据链路层数据帧:
字段 | 长度(bit) | 说明 | ARP Request | ARP Reply |
---|---|---|---|---|
Destination | 48 | 目的MAC地址 | ff:ff:ff:ff:ff:ff(广播地址) | 08:xx:xx:xx:xx:ae(发送方MAC地址) |
Source | 48 | 源MAC地址 | 08:xx:xx:xx:xx:ae(发送方MAC地址) | d8:xx:xx:xx:xx:d5(目标MAC地址) |
Type | 16 | 类型 | 0x0806(ARP) | 0x0806(ARP) |
ARP数据帧:
字段 | 长度(bit) | 说明 | ARP Request | ARP Reply |
---|---|---|---|---|
Hardware Type | 16 | 硬件类型,标识链路层协议 | 0x0001(以太网) | 0x0001(以太网) |
Protocol Type | 16 | 协议类型,标识网络层协议 | 0x0800(IPv4) | 0x0800(IPv4) |
Hardware Size | 8 | 硬件地址大小,标识MAC地址长度 | 0x06(6B=48bit) | 0x06(6B=48bit) |
Protocol Size | 8 | 协议地址大小,标识IP地址长度 | 0x04(4B=32bit) | 0x04(4B=32bit) |
Opcode | 16 | 操作码,标识ARP请求或响应 | 0x0001(ARP Request) | 0x0002(ARP Reply) |
Sender MAC Address | 48 | 发送方MAC地址 | 08:xx:xx:xx:xx:ae | d8:xx:xx:xx:xx:d5(目标MAC地址) |
Sender IP Address | 32 | 发送方IP地址 | 10.234.172.214 | 10.234.0.1 |
Target MAC Address | 48 | 目标MAC地址 | 00:00:00:00:00:00(待填充) | 08:xx:xx:xx:xx:ae(发送方MAC地址) |
Target IP Address | 32 | 目标IP地址 | 10.234.0.1 | 10.234.172.214 |
十一. TCP协议分析
11.1 TCP协议
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的、基于数据报的传输层通信协议。
特性 | TCP | UDP |
---|---|---|
连接 | 面向连接 | 无连接 |
可靠性 | 可靠传输,使用流量控制和拥塞控制 | 不可靠传输,不使用拥塞控制 |
连接对象个数 | 一对一 | 一对一、一对多、多对多 |
传输方式 | 面向字节流 | 面向报文 |
首部开销 | 20字节~60字节 | 8字节 |
适用场景 | 需要可靠传输的场景,例如文件传输 | 传输速度、实时性要求高的场景 |
TCP协议工作流程:
- 建立连接:三次握手
- 发起方向接收方发送SYN报文,请求建立连接
- 接收方收到SYN报文后,回复SYN+ACK报文,表示同意建立连接
- 发起方收到SYN+ACK报文后,回复ACK报文,表示连接建立成功
- 三次握手完成,连接建立成功
- 数据传输:数据传输阶段
- 断开连接:四次挥手
- 发起方向接收方发送FIN报文,请求断开连接
- 接收方收到FIN报文后,回复ACK报文,表示收到断开请求
- 接收方向发起方发送FIN报文,请求断开连接
- 发起方收到FIN报文后,回复ACK报文,表示收到断开请求
- 四次挥手完成,连接断开成功
- 谁想建立或断开连接,谁就是发起方。发起方可以是客户端,也可以是服务器端,
11.2 TCP协议分析
以访问10.21.11.21为例,分析TCP协议的工作流程。
- 打开Wireshark,在捕获选项中设置过滤器为“http and ip.addr==10.21.11.21”。
- 开始抓取数据。
- 打开浏览器,在地址栏中输入“10.21.11.21”,回车访问,等待加载完成后关闭浏览器。
- 结束抓取数据。
- 选中一条访问10.21.11.21的HTTP记录,右键,追踪TPC流。
- 观察TPC流是否包含完整的TPC访问过程(三次握手,四次挥手)。
TCP数据包示例如下:
TCP报文格式
字段 | 长度(bit) | 说明 |
---|---|---|
Source Port | 16 | 源端口号 |
Destination Port | 16 | 目的端口号 |
Sequence Number | 32 | 本报文段发送的数据组的第一个字节的序号 |
ACK Number | 32 | 确认号,期望收到对方下一个报文段的第一个字节的序号,表明该序号之前的所有数据已经正确无误的收到 |
Header Length | 4 | 报文头长度,指示TCP头部的长度,即数据区在报文段中的起始偏移值(字节)。偏移值=4*Header Length |
Reserved | 6 | 保留字段,未使用 |
Flags | 6 | 标志位,按顺序为:URG、ACK、PSH、RST、SYN、FIN |
Window Size | 16 | 窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制 |
TCP Checksum | 16 | 校验和,用于检验TCP头部和数据的完整性 |
Urgent Pointer | 16 | 紧急指针,TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式 |
Options | 0-320 | 可选字段,用于扩展TCP头部。最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size)(在第一个TCP报文)。选项长度不一定是32位的整数倍,所以要加填充位 |
TCP三次握手
字段 | 第一次握手[SYN] | 第二次握手[SYN, ACK] | 第三次握手[ACK] |
---|---|---|---|
Source Port | 0xcf75(53109) | 0x0050(80) | 0xcf75(53109) |
Destination Port | 0x0050(80) | 0xcf75(53109) | 0x0050(80) |
Sequence Number | 0xc01d24d3(0) | 0xabbe9051(0) | 0xc01d24d4(1) |
ACK Number | 0x00000000(0) | 0xc01d24d4(1) | 0xabbe9052(1) |
Header Length | 0x8(32) | 0x8(32) | 0x5(20) |
Reserved | 0x00 | 0x00 | 0x00 |
Flags | 0x002(SYN) | 0x012(SYN, ACK) | 0x010(ACK) |
Window Size | 0xfaf0(64240) | 0x4000(16384) | 0x0201(513) |
TCP四次挥手
字段 | 第一次挥手[FIN, ACK] | 第二次挥手[ACK] | 第三次挥手[FIN, ACK] | 第四次挥手[ACK] |
---|---|---|---|---|
Source Port | 0x0050(80) | 0xcf75(53109) | 0x0050(80) | 0xcf75(53109) |
Destination Port | 0xcf75(53109) | 0x0050(80) | 0xcf75(53109) | 0x0050(80) |
Sequence Number | 0xabbe9194(323) | 0xc01d26e6(531) | 0xc01d26e6(531) | 0xabbe9195(324) |
ACK Number | 0xc01d26e6(531) | 0xabbe9195(324) | 0xabbe9195(324) | 0xc01d26e7(532) |
Header Length | 0x5(20) | 0x5(20) | 0x5(20) | 0x5(20) |
Reserved | 0x00 | 0x00 | 0x00 | 0x00 |
Flags | 0x011(FIN, ACK) | 0x010(ACK) | 0x011(FIN, ACK) | 0x010(ACK) |
Window Size | 0xfeed(65005) | 0x0200(513) | 0x0200(513) | 0xfeed(65005) |
附录. 实验涉及命令行汇总
1. PC机 终端
1 | ipconfig /all # 查看IP配置 |
2. 交换机Switch 命令行
1 | Switch>enable # 进入特权模式 |
3. 路由器Router 命令行
1 | Router>enable # 进入特权模式 |