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地址是一个组播地址,而本机的某个服务属于此组播
    接收流程