HCIA学习笔记Day2:网络层协议与传输层原理
一、IP报头
1、网络层的功能:寻址和路由
1)定义IP地址,连接不同的网络,选择最佳路径
2、IP数据报报头字段
1)IP报头有两部分组成:固定部分和可选项部分
2)IP报头的固定部分 为 20字节
| 字段 | 描述 |
|---|---|
| 版本 | 表示IP协议的版本是IPv4还是IPv6 |
| 首部长度 | 表示IP报头大小,固定长度20字节,可选项最多40字节 |
| 优先级与服务类型 | 表示是否有需要优先发送的报文 |
| 总长度 | 表示IP报头+数据的总大小;由于MTU(最大传输单元)的限制,长度超过1500字节的数据报都将被分片传输 |
| 标识符 | IP数据报的编号,标识主机发送的每一个数据报,同一个数据报的所有分片都具有相同的标识值 |
| 标志 | 表示数据是否进行了分片 |
| 段偏移量 | 表示该IP包在该组分片包中的位置 |
| TTL | 生存时间;每个数据报发出去时,会添加一个生存时间;数据包每经过一台路由器,TTL值会减1,当TTL为0时,数据包被丢弃;TTL可以防止数据包陷入路由死循环,预防路由环路,避免数据包在网络中无限循环浪费带宽资源 |
| 协议号 | 表示IP协议上层所使用的协议;常见协议号:1=ICMP, 6=TCP, 17=UDP |
| 首部校验和 | 用来做IP头部的正确性检测,但不包含数据部分 |
| 源IP地址 | 表示发送这个数据包的设备的IP地址 |
| 目标IP地址 | 表示接收这个数据包的设备的IP地址 |
3、数据包分析
使用科来网络分析工具抓取TCP报文并分析
4、TTL 字段验证实验
1)拓扑
基础配置: <Huawei>undo terminal monitor //关闭消息 <Huawei>system-view //进入系统视图 [Huawei]sys R1 //修改主机名 [R1]int g0/0/0 //进入接口g0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.254 24 //配置IP地址 [R1-GigabitEthernet0/0/0]int g0/0/1 //进入接口g0/0/1 [R1-GigabitEthernet0/0/1]ip address 192.168.2.254 24 //配置IP地址 实验1:验证IP报头TTL值 操作步骤: 1)配置(PC1/PC2/R1)的IP地址 2)在g0/0/0上开启数据抓包 3)使用PC1 ping 192.168.2.1--PC2的IP地址 4)在抓包软件上查找:源IP为192.168.1.1 目的IP:192.168.2.1的数据包 验证结果: TTL值: 128 5)关闭g0/0/0口上的抓包软件,然后在g0/0/1接口上重新开启抓包软件 6)重复执行:使用PC1 ping 192.168.2.1--PC2的IP地址 7)重复执行:在抓包软件上查找:源IP为192.168.1.1 目的IP:192.168.2.1的数据包 验证结果: TTL值: 127 验证结果:数据每经过一台路由器,TTL值就会减1 TTL的作用:预防路由环路
5、IP数据包封装过程
1)拓扑
| 在g0/0/0口上抓包 | 在g0/0/1口上抓包 | ||
|---|---|---|---|
| 目的IP | 192.168.2.1 | 目的IP | 192.168.2.1 |
| 源MAC | 57D5 | 源MAC | 3970 |
| 目的MAC | 396F | 目的MAC | 3C61 |
[Huawei]display interface g0/0/0 //查看接口详细信息(能查看路由器接口的MAC地址) Hardware address is 00e0-fc88-396F__ 硬件 地址 实验2:IP数据包封装流程 操作步骤: 1)配置(PC1/PC2/R1)的IP地址 2)在g0/0/0上开启数据抓包 3)使用PC1 ping 192.168.2.1--PC2的IP地址 4)在抓包软件上查找:源IP为192.168.1.1 目的IP:192.168.2.1的数据包 查看源MAC地址和目的MAC地址 5)关闭g0/0/0口上的抓包软件,然后在g0/0/1接口上重新开启抓包软件 6)重复执行:使用PC1 ping 192.168.2.1--PC2的IP地址 7)重复执行:在抓包软件上 查找:源IP为192.168.1.1 目的IP:192.168.2.1的数据包 查看源MAC地址和目的MAC地址 验证结果:在跨网段数据转发过程中,IP地址一直不变, MAC地址一直在变(每经过一个网关就变化)
6、抓包字段分析
二、IPv4地址和子网掩码
1、IPv4地址概述
-
IP地址:互联网协议地址
-
作用:在网络中唯一标识一台设备的一组数字
-
组成:网络位和主机位
-
长度:32个二进制位(bit)=4个字节
-
表示方法:点分十进制
2、IPv4地址的分类
1)A类范围:0~127
特点:第一个bit固定为0 前面8个bit最小值:00000000 =0 前面8个bit 最大值:01111111 =127
2)B类范围:128~191
特点:前两个bit固定为10 前面8个bit最小值:10000000 =128 前面8个bit 最大值:10111111 =191
3)C类范围:192~223
特点:前三个bit固定为110 前面8个bit最小值: 11000000 =192 前面8个bit 最大值:11011111 =223
4)D类(组播)范围:224~239
5)E类(科研或保留)范围:240~255
3、子网掩码
-
作用:用来指明一个IP地址中那些是网络位,哪些些是主机位
-
子网掩码不能单独存在,它必须结合IP地址一起使用。
-
长度:32个二进制位组成
1)对应IP地址网络部分用1表示,对应IP地址主机部分用0表示
| IP地址 | 192 | 168 | 1 | 1 |
|---|---|---|---|---|
| 子网掩码 | 255 | 255 | 255 | 0 |
| 子网掩码(二进制) | 11111111 | 11111111 | 11111111 | 00000000 |
2)默认的子网掩码
A类地址(默认):255.0.0.0 (1网络位3主机位)
B类地址(默认):255.255.0.0 (2网络位2主机位)
C类地址(默认):255.255.255.0 (3网络位1主机位)
4、私有IPv4地址
1)私有IPv4地址分类:
A类私有范围:10.0.0.0~10.255.255.255
B类私有范围:172.16.0.0~172.31.255.255
C类私有范围:192.168.0.0~192.168.255.255
D类范围: 239.0.0.0 ~ 239.255.255.255 (本地组地址-类似于组播地址中的”私有地址”)
5、特殊的IP地址
网络地址:主机位全为0的IP地址,如:192.168.1.0
广播地址:主机位全为1的IP地址,如:192.168.1.255
回环地址:127.0.0.0 ~ 127.255.255.255
被限制的广播地址:255.255.255.255(被限制在一个网段中)
0.0.0.0 :未分配的IP地址,在很多协议中通常用来表示本机
默认路由:0.0.0.0 0.0.0.0 (代表所有的ipv4地址)
6、可用地址
CIDR:无类别域间路由(Classless Inter-Domain Routing)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
CIDR使用“斜线记法”或者叫”CIDR记法”,即在IPV4地址后面加上斜线/,在斜线后面写网络前缀所占的比特数。
举例:192.168.1.0/24,掩码为24 ,就代表网络位是24个bit位,所以主机位:32-24=8位
一个掩码为n(x.x.x.x/n)的网段下有( 232-n)个IP地址,(232-n-2)个可用IP地址。
第一个IP地址: 192.168.1.0 是网络ID,代表一个网段不能分配给主机使用
最后一个IP地址,192.168.1.255 是广播地址,做广播用的,也不能分配给主机使用
三、子网划分
1、子网划分概述
1)子网划分是什么
- 子网划分是指将一个大的网段划分多个更小的网段
2)子网划分的作用
- 节约IPv4地址,减少IPv4地址浪费
3)如何进行子网划分
- 将主机位借给网络位(让主机位变短, 让网络位变长)
2、IP地址知识回顾:
IPv4地址的长度:32个bit位
IPv4的组成:网络位+主机位
子网掩码长度:32个bit位
C类的默认子网掩码:255.255.255.0
一个掩码默认为24的网段有多少个IP地址,有多少个可用IP地址如何计算:
举例:192.168.1.0/24
IP网段: 192.168.1.0
子网掩码:255.255.255.0
以二进制显示:192.168.1.0/24
| 网络位 | 主机位 | |||
|---|---|---|---|---|
| IP地址 | 192 | 168 | 1 | 1 |
| 子网掩码 | 255 | 255 | 255 | 0 |
| 子网掩码(二进制) | 11111111 | 11111111 | 11111111 | 00000000 |
这个网段有28=256个IP地址,其中可用IP地址254个
主机位越短,就代表,这个网段包含的IP地址数量越少,想要做子网划分,就从主机位借位,借给网络位,让网络位变长,让主机位变短
3、子网划分方法
举例:192.168.1.0/24 要做子网划分
| 项目 | 第一段 | 第二段 | 第三段 | 第四段 | 备注 |
|---|---|---|---|---|---|
| IP网段 | 192 | 168 | 1 | 0 | 192.168.1.0/24 |
| 二进制 | 11000000 | 10101000 | 00000001 | 00000000 | 网络位.主机位 |
| 子网掩码 | 255 | 255 | 255 | 0 | /24 |
| 二进制 | 11111111 | 11111111 | 11111111 | 00000000 | 网络位.主机位 |
从/24划分到/25,借用了1位主机位作为子网位,原来的8位主机位变为:1位子网位 + 7位主机位,可划分出2个子网:192.168.1.0/25 和 192.168.1.128/25,每个子网有128个IP地址,126个可用IP地址
第一个网段:192.168.1.0/25
| 项目 | 第一段 | 第二段 | 第三段 | 第四段 | 备注 |
|---|---|---|---|---|---|
| 二进制表示 | 11000000 | 10101000 | 00000001 | __0__0000000 | 网络位.子网位.主机位 |
| 子网掩码 | 255 | 255 | 255 | 128 | /25 |
| 二进制掩码 | 11111111 | 11111111 | 11111111 | __1__0000000 | 网络位.子网位.主机位 |
第二个网段:192.168.1.128/25
| 项目 | 第一段 | 第二段 | 第三段 | 第四段 | 备注 |
|---|---|---|---|---|---|
| 二进制表示 | 11000000 | 10101000 | 00000001 | __1__0000000 | 网络位.子网位.主机位 |
| 子网掩码 | 255 | 255 | 255 | 128 | /25 |
| 二进制掩码 | 11111111 | 11111111 | 11111111 | __1__0000000 | 网络位.子网位.主机位 |
如果一个网段要划分a个等长的子网网段:网络位要从主机位借n位,对应关系是:n = ⌈ log2 a ⌉,(即 log2 a 向上取整)
4、等长子网划分实验
1)需求:
-
目前公司只有1个C类网段:192.168.100.0/24
-
某公司有销售部、生成部、财务部、客服部四个部门,每个部门的主机数量不超过50台
2)解决方案:执行等长的子网划分
- 划分4个相同大小的子网网段
- 每个子网网段中的IP地址数量相同
3)子网划分分析:
公司有4个部门,需要划分4个网段,每个网段不低于50个IP地址
解析:
-
一个C类网段,默认网络位24位,主机位为8位,如果想一个C类网段要划分4个子网网段:网络位需要从主机位借2位,做子网网络位,即掩码变为/26
-
一个C类网段,默认网络位24位,主机位为8位,如果借2位,网络位为26位,那么主机位为6位,主机数量=26-2=62,可以满足公司需求
四、ICMP协议
1、ICMP协议概述
-
ICMP:
Internet控制报文协议(Internet Control Message Protocol) -
作用:测试网络连通性
-
位于TCP/IP的第三层(网络层)
2、ICMP报文类型
echo request 请求报文
echo reply 应答报文
3、ICMP 命令
-
ping命令 -
tracert命令
4、ICMP 消息提示
1)from 目标地址… //表示连接成功
2)Destination host unreachable //表示目标主机不可达
此提示常见原因:
-
同网段中没有这个IP地址
-
跨网段通信时,本主机没有填写网关地址
3)Request timed out 请求时间超时
此提示常见原因:数据包可以出去,但是回不来
-
数据包从主机中发出去了,但是中间传输的网络设备无法找到目标主机
-
数据包从主机中发出去了,传输的网络设备将数据包发送给目标主机了,但是目标主机没有回复,或者目标主机回复的消息,中间的传输设备没能正常转发给源主机
-
对方主机没有填写网关地址
4)Unknown host ... 未知主机名
此提示常见原因:IP地址是一个不合法的IP地址,或者是一个不存在的主机名
五、ARP协议
1、ARP协议概述
-
ARP:地址解析协议
(Address Resolution Protocol) -
作用:已知目标设备的IP地址,获取目标设备的
MAC地址 -
解析方式:发送
arp广播,得到mac地址后,缓存到arp缓存表中 -
工作在OSI模型的第二层(数据链路层)
2、ARP报文类型
-
ARP请求报文:源设备以广播的方式发送 ARP 请求报文
-
ARP回应报文:目的设备以单播的方式回应,直接返回给源设备
3、ARP抓包
1)拓扑
2)抓包截图
1)请求报文解析(request): PC1广播发的ARP请求报文
原始报文内容:谁是192.168.1.2,把你的MAC地址告诉192.168.1.1
| 字段名称 | 值 | 解析说明 |
|---|---|---|
| Hardware Type | ethernet | 表示硬件地址类型是以太网 |
| Protocol Type | IP | 表示协议地址类型是IP |
| Hardware Size | 6 | 表示硬件地址是6个字节 |
| Protocol Size | 4 | 表示协议地址是4个字节 |
| Opcode | request | 表示这个报文是请求报文 |
| Sender MAC Address | 54:89:98:0b:63:0c | 表示源MAC地址是54:89:98:0b:63:0c |
| Sender IP Address | 192.168.1.1 | 表示源IP地址是192.168.1.1 |
| Target MAC Address | ff:ff:ff:ff:ff:ff | 表示目标MAC地址是广播MAC地址(因为不知道192.168.1.2的MAC地址,所以封装广播MAC去进行广播寻找192.168.1.2的MAC地址) |
| Target IP Address | 192.168.1.2 | 表示目标IP地址是192.168.1.2 |
2)应答报文解析:(reply)—PC2回复给PC1的报文
原始报文内容:192.168.1.2的MAC地址是54:89:98:ef:68:d9
| 字段名称 | 值 | 解析说明 |
|---|---|---|
| Opcode | reply | 表示这个报文是应答报文 |
| Sender MAC Address | 54:89:98:ef:68:d9 | 表示源MAC地址是54:89:98:ef:68:d9 |
| Sender IP Address | 192.168.1.2 | 表示源IP地址是192.168.1.2 |
| Target MAC Address | 54:89:98:0b:63:0c | 表示目标MAC地址是54:89:98:0b:63:0c |
| Target IP Address | 192.168.1.1 | 表示目标IP地址是192.168.1.1 |
3、ARP 常用命令
PC>arp -a //查看arp缓存表 Internet Address Physical Address Type 192.168.1.2 54-89-98-EF-68-D9 dynamic (动态) PC>arp -d //清空arp缓存表
4、ARP缓存表
-
ARP缓存表中记录IP地址和MAC地址的对应关系
-
ARP 缓存表中有动态和静态两类条目
-
华为网络设备的ARP动态条目默认老化时间是
1200秒 -
windows系统的ARP动态条目默认老化时间是
120秒
5、ARP在跨网段通信的作用
在拓扑中,如果PC1需要ping PC2,大概会经历以下步骤:
第一步:路由判断与ARP解析
-
PC1通过子网掩码计算,判定目标IP 192.168.2.1与本地网络192.168.1.0/24不属于同一网段,即跨网段通信
-
PC1查询ARP缓存,若不存在网关MAC地址,则发送ARP请求广播帧:
二层头:源MAC 54-89-98-F1-2D-29,目的MAC FF-FF-FF-FF-FF-FF
第二步:PC1发送ICMP请求
- PC1构造ICMP Echo Request报文,报文通过交换机转发至路由器R1的G0/0/0接口
IP头:源IP 192.168.1.1,目的IP 192.168.2.1
以太网头:源MAC 54-89-98-F1-2D-29,目的MAC 00-e0-fc-d4-74-92(网关G0/0/0接口)
第三步:路由器路由查询与ARP解析
-
R1收到报文,解封装后查询路由表,确定192.168.2.0/24为直连路由,出口为G0/0/1接口
-
R1查询G0/0/1接口的ARP缓存,若不存在PC2的MAC地址,则从G0/0/1接口发送ARP请求:
二层头:源MAC 00-e0-fc-d4-74-93,目的MAC FF-FF-FF-FF-FF-FF
第四步:路由器转发ICMP请求
- R1对报文进行三层转发,重新封装二层帧头,报文从G0/0/1接口发出,送达PC2
IP头:保持不变(源192.168.1.1,目的192.168.2.1)
以太网头:源MAC 00-e0-fc-d4-74-93(R1 G0/0/1),目的MAC 54-89-98-B2-2F-14(PC2)
第五步:PC2回复ICMP响应
- PC2构造ICMP Echo Reply报文,判断目标IP 192.168.1.1为跨网段通信:
IP头:源IP 192.168.2.1,目的IP 192.168.1.1
以太网头:源MAC 54-89-98-B2-2F-14,目的MAC 00-e0-fc-d4-74-93(网关G0/0/1接口)
第六步:路由器转发ICMP响应
-
R1收到回复报文,路由查询确定192.168.1.0/24出口为G0/0/0接口
-
R1重新封装二层帧头,报文从G0/0/0接口发出,最终送达PC1
IP头:保持不变(源192.168.2.1,目的192.168.1.1)
以太网头:源MAC 00-e0-fc-d4-74-92(R1 G0/0/0),目的MAC 54-89-98-F1-2D-29(PC1)
注意:在跨网段通信中,源IP和目的IP在整个过程中是不变的,而源MAC和目的MAC每一段链路都会改变。
六、传输层
1、传输层概述
传输层作用:提供端到端的连接【端口号】
传输层包含两个协议:TCP和UDP
1)TCP协议
传输控制协议
优点:可靠的、面向连接的协议
不足:传输效率低
2)UDP协议
用户数据包协议
不足:不可靠的、无连接的服务
优点:传输效率高
2、TCP封装格式
3、TCP报头字段分析
| 字段名称 | 长度 | 功能描述 | 示例/备注 | |
|---|---|---|---|---|
| 源端口 | Source Port | 16位 | 标识发送方应用程序的端口号,用于报文的返回地址 | 2052 (随机端口)客户端随机选择 |
| 目的端口 | Destination Port | 16位 | 标识接收方计算机上的目标应用程序接口 | 80 (HTTP服务)服务器固定端口 |
| 序列号 | Sequence Number | 32位 | 标识本报文段第一个数据字节的序号 每个字节分配一个序号,保证TCP传输的有序性,发起方发送数据时对此进行标记。 | 起始序号=1,数据大小=158字节 下一报文段序号=159 |
| 确认号 | Acknowledgment Number | 32位 | 期望收到对方下一个报文段的第一个数据字节序号 确认该序号之前的所有数据已收到 这个序号和发起的序号有关,在接受到信号后,将ACK置为1,才可以产生ack,且当ACK为1时,ack确认序号才有效,ack=seq+1。 | 确认号=N,表示N-1及之前数据已确认 |
| 首部长度 | Header Length | 4位 | TCP首部长度,包括固定头部和选项字段 以4字节为单位 | 最小值=5(20字节) 最大值=15(60字节) 示例:24字节(含4字节选项) |
| 保留字段 | Reserved | 6位 | 为将来定义新用途保留,目前必须置0 | 通常设置为000000 |
| 控制位 | Flags | 6位 | 每个标志位表示一个控制功能 | |
| ├ 同步位 | SYN | 1位 | 同步标志,请求建立连接 | SYN=1:发起连接请求 |
| ├ 确认位 | ACK | 1位 | 确认标志,确认序号有效 | ACK=1:确认连接或数据 |
| ├ 终止位 | FIN | 1位 | 终止标志,请求断开连接, 释放一个连接。 | FIN=1:释放连接请求 |
| ├ 紧急位 | URG | 1位 | 紧急标志,紧急指针字段有效 | URG=1:数据优先传送 |
| ├ 推送位 | PSH | 1位 | 推送标志,接收方应立即读取数据 | PSH=1:立即提交应用程序 |
| └ 复位位 | RST | 1位 | 复位标志,连接出现严重错误需重建 | RST=1:异常终止连接 |
| 窗口大小 | Window Size | 16位 | 滑动窗口机制,表示接收方能接收的数据量 设备间协商确定发送数据量 | 8192字节流量控制关键字段 |
| 校验和 | Checksum | 16位 | 对整个TCP报文段(首部+数据)的差错校验 | 0xd28d保证数据完整性 |
| 紧急指针 | Urgent Pointer | 16位 | 当URG=1时有效,指出紧急数据的末尾位置 | 仅在URG置位时使用 |
| 选项字段 | Options | 可变 | 可选字段,用于扩展TCP功能 | 示例:4字节选项 最大40字节 |
注意:TCP字段中有确认号(Acknowledgment Number)和确认位(Acknowledgment),确认位属于FLAG,占1bit,而确认号占32bit,具体数值会由TCP通信中的seq变化而变化,下有详细介绍。
4、TCP三次握手详解
握手过程关键字段
-
SYN (Synchronize):同步标志位,用于发起连接请求
-
ACK (Acknowledgment):确认标志位,用于确认连接请求
-
seq (Sequence Number):序列号,标识报文段第一个数据字节的序号
-
ack (Acknowledgment Number):确认号,期望收到的下一个字节序号
第一次握手: 客户端向服务器发送连接请求报文
- 客户端 SYN=1,表示请求与服务器建立连接
- 客户端 ACK=0,初始状态未进行确认
- 客户端 seq=x(客户端初始序列号ISN,随机生成)
- 客户端 ack=0,初始状态确认号为0
第二次握手: 服务器向客户端回复确认报文
- 服务器 SYN=1,表示同意建立连接并同时向客户端发起连接请求
- 服务器 ACK=1,表示确认客户端的连接请求
- 服务器 seq=y(y为服务器初始序列号ISN,随机生成)
- 服务器 ack=x+1,表示已收到客户端的序列号x,期望下次从x+1开始
第三次握手: 客户端向服务器发送最终确认报文
- 客户端 SYN=0,连接已建立,无需再置SYN标志
- 客户端 ACK=1,表示确认服务器的连接请求
- 客户端 seq=x+1,按约定从x+1开始
- 客户端 ack=y+1,表示已收到服务器的序列号y,期望下次从y+1开始
5、三次握手抓包实验
1)拓扑
2)数据包
第一次握手:
第二次握手:
第三次握手:
6、TCP的四次挥手详解
挥手过程关键字段
- FIN (Finish):终止标志位,用于请求断开连接
- ACK (Acknowledgment):确认标志位,用于确认断开请求
- seq (Sequence Number):序列号,标识报文段序号
- ack (Acknowledgment Number):确认号,期望收到的下一个字节序号
第一次挥手: 主动关闭方发送连接终止请求
- 主动关闭方 FIN=1,表示请求断开连接
- 主动关闭方 ACK=1,正常确认位
- 主动关闭方 seq=u(u为当前序列号)
- 主动关闭方 ack=v(v为期望收到的确认号)
第二次挥手: 被动关闭方发送确认报文
- 被动关闭方 FIN=0,此时还未准备断开
- 被动关闭方 ACK=1,确认收到断开请求
- 被动关闭方 seq=v(按之前通信的序列号继续)
- 被动关闭方 ack=u+1,确认主动方的FIN,期望下次从u+1开始
第三次挥手: 被动关闭方发送连接终止请求
- 被动关闭方 FIN=1,表示被动方也准备断开连接
- 被动关闭方 ACK=1,确认位保持置位
- 被动关闭方 seq=w(可能在此期间发送了数据,序列号更新为w)
- 被动关闭方 ack=u+1,继续确认主动方的FIN
第四次挥手: 主动关闭方发送最终确认报文
- 主动关闭方 FIN=0,无需再发送FIN
- 主动关闭方 ACK=1,确认被动方的断开请求
- 主动关闭方 seq=u+1,按约定序列号
- 主动关闭方 ack=w+1,确认被动方的FIN,期望下次从w+1开始
为什么需要四次挥手:TCP连接是全双工的,每个方向需要单独关闭
7、四次挥手抓包实验
1)拓扑
2)数据包
第一次挥手
第二次挥手
第三次挥手
第四次挥手
8、UDP封装格式
1)源端口:源端口和IP地址的作用是标识报文的返回地址
2)目的端口:目标端口指明接收方计算机上的应用程序接口
3)UDP长度:代表整个UDP的数据报是多大
4)UDP校验和:是一个检查机制,在发送数据包之前检查一下数据包的完整性