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 口上抓包
目的 IP192.168.2.1目的 IP192.168.2.1
源 MAC57D5源 MAC3970
目的 MAC396F目的 MAC3C61
[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 地址19216811
子网掩码2552552550
子网掩码(二进制)11111111111111111111111100000000

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 地址19216811
子网掩码2552552550
子网掩码(二进制)11111111111111111111111100000000

这个网段有 28=256 个 IP 地址,其中可用 IP 地址 254 个

主机位越短,就代表,这个网段包含的 IP 地址数量越少,想要做子网划分,就从主机位借位,借给网络位,让网络位变长,让主机位变短

# 3、子网划分方法

举例:192.168.1.0/24 要做子网划分

项目第一段第二段第三段第四段备注
IP 网段19216810192.168.1.0/24
二进制11000000101010000000000100000000网络位. 主机位
子网掩码2552552550/24
二进制11111111111111111111111100000000网络位. 主机位

从 / 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

项目第一段第二段第三段第四段备注
二进制表示110000001010100000000001__0__0000000网络位. 子网位. 主机位
子网掩码255255255128/25
二进制掩码111111111111111111111111__1__0000000网络位. 子网位. 主机位

第二个网段192.168.1.128/25

项目第一段第二段第三段第四段备注
二进制表示110000001010100000000001__1__0000000网络位. 子网位. 主机位
子网掩码255255255128/25
二进制掩码111111111111111111111111__1__0000000网络位. 子网位. 主机位

如果一个网段要划分 a 个等长的子网网段:网络位要从主机位借 n 位,对应关系是:n = ⌈ log2 a ⌉,(即 log2 a 向上取整)

# 4、等长子网划分实验

1)需求:

  • 目前公司只有 1 个 C 类网段:192.168.100.0/24

  • 某公司有销售部、生成部、财务部、客服部四个部门,每个部门的主机数量不超过 50 台

2)解决方案:执行等长的子网划分

  • 划分 4 个相同大小的子网网段
  • 每个子网网段中的 IP 地址数量相同
  1. 子网划分分析:

公司有 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 Typeethernet表示硬件地址类型是以太网
Protocol TypeIP表示协议地址类型是 IP
Hardware Size6表示硬件地址是 6 个字节
Protocol Size4表示协议地址是 4 个字节
Opcoderequest表示这个报文是请求报文
Sender MAC Address54:89:98:0b:63:0c表示源 MAC 地址是 54:89:98:0b:63:0c
Sender IP Address192.168.1.1表示源 IP 地址是 192.168.1.1
Target MAC Addressff:ff:ff:ff:ff:ff表示目标 MAC 地址是广播 MAC 地址(因为不知道 192.168.1.2 的 MAC 地址,所以封装广播 MAC 去进行广播寻找 192.168.1.2 的 MAC 地址)
Target IP Address192.168.1.2表示目标 IP 地址是 192.168.1.2

2) 应答报文解析:(reply)—PC2 回复给 PC1 的报文

原始报文内容:192.168.1.2 的 MAC 地址是 54:89:98:ef:68:d9

字段名称解析说明
Opcodereply表示这个报文是应答报文
Sender MAC Address54:89:98:ef:68:d9表示源 MAC 地址是 54:89:98:ef:68:d9
Sender IP Address192.168.1.2表示源 IP 地址是 192.168.1.2
Target MAC Address54:89:98:0b:63:0c表示目标 MAC 地址是 54:89:98:0b:63:0c
Target IP Address192.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 Port16 位标识发送方应用程序的端口号,用于报文的返回地址2052 (随机端口)
客户端随机选择
目的端口Destination Port16 位标识接收方计算机上的目标应用程序接口80 (HTTP 服务)
服务器固定端口
序列号Sequence Number32 位标识本报文段第一个数据字节的序号 <br> 每个字节分配一个序号,保证 TCP 传输的有序性,发起方发送数据时对此进行标记。起始序号 = 1,数据大小 = 158 字节 <br> 下一报文段序号 = 159
确认号Acknowledgment Number32 位期望收到对方下一个报文段的第一个数据字节序号 <br> 确认该序号之前的所有数据已收到 < br/> 这个序号和发起的序号有关,在接受到信号后,将 ACK 置为 1,才可以产生 ack,且当 ACK 为 1 时,ack 确认序号才有效,ack=seq+1。确认号 = N,表示 N-1 及之前数据已确认
首部长度Header Length4 位TCP 首部长度,包括固定头部和选项字段 <br> 以 4 字节为单位最小值 = 5 (20 字节)
最大值 = 15 (60 字节)
示例:24 字节 (含 4 字节选项)
保留字段Reserved6 位为将来定义新用途保留,目前必须置 0通常设置为 000000
控制位Flags6 位每个标志位表示一个控制功能
├ 同步位SYN1 位同步标志,请求建立连接SYN=1:发起连接请求
├ 确认位ACK1 位确认标志,确认序号有效ACK=1:确认连接或数据
├ 终止位FIN1 位终止标志,请求断开连接, 释放一个连接。FIN=1:释放连接请求
├ 紧急位URG1 位紧急标志,紧急指针字段有效URG=1:数据优先传送
├ 推送位PSH1 位推送标志,接收方应立即读取数据PSH=1:立即提交应用程序
└ 复位位RST1 位复位标志,连接出现严重错误需重建RST=1:异常终止连接
窗口大小Window Size16 位滑动窗口机制,表示接收方能接收的数据量 <br> 设备间协商确定发送数据量8192 字节 <br> 流量控制关键字段
校验和Checksum16 位对整个 TCP 报文段 (首部 + 数据) 的差错校验0xd28d
保证数据完整性
紧急指针Urgent Pointer16 位当 URG=1 时有效,指出紧急数据的末尾位置仅在 URG 置位时使用
选项字段Options可变可选字段,用于扩展 TCP 功能示例:4 字节选项 <br> 最大 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 校验和:是一个检查机制,在发送数据包之前检查一下数据包的完整性