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地址数量相同

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 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位标识本报文段第一个数据字节的序号
每个字节分配一个序号,保证TCP传输的有序性,发起方发送数据时对此进行标记。
起始序号=1,数据大小=158字节
下一报文段序号=159
确认号Acknowledgment Number32位期望收到对方下一个报文段的第一个数据字节序号
确认该序号之前的所有数据已收到
这个序号和发起的序号有关,在接受到信号后,将ACK置为1,才可以产生ack,且当ACK为1时,ack确认序号才有效,ack=seq+1。
确认号=N,表示N-1及之前数据已确认
首部长度Header Length4位TCP首部长度,包括固定头部和选项字段
以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位滑动窗口机制,表示接收方能接收的数据量
设备间协商确定发送数据量
8192字节
流量控制关键字段
校验和Checksum16位对整个TCP报文段(首部+数据)的差错校验0xd28d
保证数据完整性
紧急指针Urgent Pointer16位当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校验和:是一个检查机制,在发送数据包之前检查一下数据包的完整性