zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

[NetWork] IP基础原理

2023-02-18 16:34:50 时间

IP协议概述

IP(Internet Protocol)互联网协议,是网络层唯一标准 是网络层的核心协议,定义了网络层的封装方式,编址方法,主要负责功能: 网络层寻址(IP地址寻址) 路由路径选择(路由协议路径查找) 包重组

TCP/IP协议

这里面几个协议ICMPIGMPARPRARP待会我们会详细讲解

IP协议的主要作用

  • 标识网络节点和链路

IP为每个链路分配一个全局唯一的网络号[Network Number]来标识每个网络,为节点分配一个全局唯一的32位IP地址,用于标识每个节点 PS:就是网络地址、客户端地址

  • 寻址和转发

寻址寻的是网络IP地址,寻找到一个网络范围,确定范围在转发到相应目的主机。

  • 适应各种数据链路

可以根据链路的MTU(Maximum Transfer Unit 最大传输单元)对IP包进行分片和重组,实现从IP到数据链路层地址的映射(和ARP差不多)

路由器的主要功能

  • 连接网络和聚合网络

将原本从接口上分离的两个网络互联

  • 链路层协议适配

可以通过适配链路层的协议和速率,而实现两者之间通信。

  • 网络间数据包转发

路由器与路由器之间需要运行网关到网关协议 GGP(Gateway to Gateway Protocol)才能确定去往目的网络的正确路径。典型的GGP包括RIPOSPFBGP等路由协议(Routing Protocol) 且IP网络的包转发是逐跳进行的(hop-by-hop),因此每个路由器中都有个张路由表(routing table)里面包含了我们来确定自身数据包要去往目的网络的下一跳地址(Next hop)。

IP头部报文格式

IP报文头部格式

整报文长20-60个byte字节,前20字节常用

4bit + 4bit + 8bit + 16bit +16bit + 3bit + 13bit + 8bit +8bit + 16bit + 32bit(源IP) + 32bit(目IP) = 160bit = 20byte

后40字节Option与Padding不常用

我们逐层来分析每个模块的意思

  • Version

版本号 - 4bit 用于标识IP协议的版本号,目前IP协议版本号一共有两种IPv4 / IPv6目前IPv4地址已经耗尽,IPv6拥有更广的地址,甚至可以为沙漠中的每一个沙粒分配一个地址,国家正在大力推广IPv6与普及

  • IHL

头长度 - 4 bit 又叫Internet Header Length 指我们IP包头部长度,通常不固定 根据Option选项来计算

  • Type of Service

服务类型(TOS)- 8bit 用于QOS(Quality of Service)质量服务中,表示该数据包所期望的服务优先级。

  • Total Length

总长度 - 16bit 用于表示整个IP包的长度,包括数据部分

  • Identification

标识 - 16bit 用于唯一标识主机发送的每一IP包,通常没发送一个IP包其值就会加1

  • Flags

标志位 - 3bit 用来控制包分片功能 是否开启分片,开启分片后是否标记最后一个分片

  • Fragment Offset

片偏移 - 3bit 当我们开启分片功能后,需要为每个一个分片打上标记,来标识每个分片在数据包中所属的位置。 如果不打上标记最后数据组合起来就是混乱的,过不了头部校验直接丢弃。

  • Time to Live

生存时间 - 8bit 又叫TTL,用来标记数据包经过路由器的数目 数据包经过一个路由器,TTL值就会减1,当字段为0时,数据包被丢弃 可以有效防止路由环路

  • Protocol

协议 - 8bit 用于标识传输层的地址或协议号,数据需要怎样的上层服务,交给哪个协议处理(TCP/UDP/ICMP/IGMP/EGP/IGP) 我们记住这个几个常见协议号就行了 1 - ICMP 2 - IGMP 4 - IP 6 - TCP 8 - EGP 9 - IGP 17 - UDP 41 - IPv6 89 - OSPF 112 - VRRP

  • Header Checksum

头部校验和 - 16bit 用于校验数据的完整性和差错校验

  • Source Address

源IP地址 - 32bit

  • Destination Address

目的IP地址 - 32bit

  • Option

可选项 0 - 40bit Option字段很少用,基本上只用来控制、转护要求以及测试等目的。

  • Padding

填充 0 - 40bit 和Option选项一样,该项只用于填充数据。

MTU概念

Maximum Transmission Unit 最大传输单元,指以接口收发数据最大支持的单个数据包的长度 也就是我们包分片后的大小 以太网接口默认MTU是1500Byte字节 PPPoE默认是1492Byte字节

IP地址

用于标识网络层地址,点分十进制,32为长度, 由网络位+主机位组成 例如: 192.168.1.1

IP地址格式计算

IPv4地址理论上有2³²≈43亿个地址,不过现在已经耗尽。

关于IP地址我们需要知道以下两个重要概念:

  • 网络位

用于区分不同的IP网络,说白了就是一个网络位对应一个网段 如果一个主机的网络位长度和数字完全一致,那么这个主机在在这个网段中

  • 主机位

用于标识IP网络中的设备地址,一个网络范围内部的主机号是唯一的。

IP地址的分类

IP地址分类

一共分为五大类即A、B、C、D、E

  • A类地址范围

1.0.0.0 - 126.255.255.255 前8位为网络位,后24位为主机位 127留作保留,本地测试用

A类地址

  • B类地址范围

128.0.0.0 - 191.255.255.255 前16位为网络位,后16位为主机地址

B类地址

  • C类地址范围

192.0.0.0 - 224.255.255.255 前24位为网络地址,后8位为主机地址

C类地址

  • D类地址范围

224.0.0.0 - 239.255.255.255 只能用作组播地址,不能配置为主机地址

D类地址

  • E类地址范围

240.0.0.0 - 255.X.X.X 用于科研用地址,不对外公开

E类地址

  • 特殊的几个IP地址

127.X.X.X 本地换回地址,用来标识本地主机。 主机位全0 为网络地址,标识网段,例如192.168.1.0 主机位全1 为本网段的广播地址,广播和单播概念后面再讲,例如192.168.1.255 255.255.255.255 为全网广播地址 0.0.0.0标识所有IP地址,通常用来做默认匹配

公网/私网IP地址范围

IP除了5大类之分,还有公私网之分 公网就是我们可以在互联网上寻找到的地址,全球唯一,通常由运营商分配。

  • 私网地址范围

A类:10.X.X.X B类:172.16.X.X - 172.31.X.X C类:192.168.X.X 自动私有地址169.254.X.X 运营商专用私用地址100.64.X.X - 100.127.X.X

ARP协议

ARP(Address Resolution Protocol) 地址解析协议,以太网并不能识别32位的IP地址,于是研发了这种协议,通过动态的将IP地址解析为MAC地址实现通信 主机通过ARP解析到目的MAC地址,会将其存在自己的ARP缓存表中,方便下次查询时直接使用。

  • ARP的工作流程

1.主机A以广播形式发送ARP查询请求,询问到达主机B的IP地址对应的MAC地址 2.主机B以单播形式恢复主机A的本机的MAC地址 3.主机A和主机B各自都将对方的IP地址和MAC地址对应关系写入ARP缓存表

工作流程

ARP缓存表又被分为动态ARP缓存表与静态ARP缓存表

  • 动态ARP缓存表

通过ARP协议动态解析活动,超过老化时间(aging time)没有使用就自动删除。

  • 静态ARP表

通过手动配置添加对应信息至ARP表,静态ARP表不会被老化,且优先级高于动态ARP表

ARP在主机上的一些常用命令 arp -a查询ARP缓存表 arp -d清空ARP缓存表

RARP协议

逆向地址解析协议 根据本机自己的MAC地址,来查询本机自己的IP地址

工作流程

ICMP协议

互联网控制消息协议,一个网络层协议 定义了错误报告提供了网络诊断功能,通常配合高层协议使用 比如说应用 Ping命令 Tracert命令

  • Ping

关于这个命令,用来测试网络连通性,常见的几个命令: ping -a [source address] [destination address] 指定源IP和目的IP发送请求 ping -c [number] [destination address] 指定数量发送request报文给目的方 ping -s [size] [destinaction address] 指定发送的报文的大小 ping -t [time] [destination address] 指定报文的延时时间 除了以上几个命令,我们还需要了解回送的报文的意思

ICMP消息表

Echo Request回应请求,用来发送测试对方是否可达

Echo Reply回应响应,对Echo Request 回复响应

Time Exceeded超时,当TTL字段成0代表不可达

Destination Unreachable目的不可达,表示去往的母子主机不存在

IP包转发流程

首先判断目的IP是否和本机IP属于同一网段 同一网段,会直接查询目的IP的MAC地址,并进行封装转发 不在同一网段,会查询网关的IP地址的MAC地址,并进行封装转发

主机单播包发送流程

当路由器收到一个单播包,首先还是判断目的地址是否找自己

是,则接收该包并逐层解封获取数据

否,则判断是否属于本身接口上的网段,如果是,则将包转发给对应网段,否则匹配路由表项,将包转交给Next hop下一跳转发处理。

路由器单播包发送流程

IP包接收流程

包的接收流程满足以下条件之一即可

  • 目的IP地址等于自己的IP地址
  • 目的IP地址是一个广播地址
  • 目的IP地址是一个组播地址,而本机的某个服务属于此组播