IP(Internet Protocol)互联网协议,是网络层唯一标准
是网络层的核心协议,定义了网络层的封装方式,编址方法,主要负责功能:
网络层寻址(IP地址寻址)
路由路径选择(路由协议路径查找)
包重组
这里面几个协议ICMPIGMPARPRARP
待会我们会详细讲解
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)。
整报文长20-60个byte字节,前20字节常用
4bit + 4bit + 8bit + 16bit +16bit + 3bit + 13bit + 8bit +8bit + 16bit + 32bit(源IP) + 32bit(目IP) = 160bit = 20byte
后40字节Option与Padding不常用
我们逐层来分析每个模块的意思
版本号 - 4bit
用于标识IP协议的版本号,目前IP协议版本号一共有两种IPv4 / IPv6
目前IPv4地址已经耗尽,IPv6拥有更广的地址,甚至可以为沙漠中的每一个沙粒分配一个地址,国家正在大力推广IPv6与普及
头长度 - 4 bit
又叫Internet Header Length
指我们IP包头部长度,通常不固定
根据Option选项来计算
服务类型(TOS)- 8bit
用于QOS(Quality of Service)质量服务中,表示该数据包所期望的服务优先级。
总长度 - 16bit
用于表示整个IP包的长度,包括数据部分
标识 - 16bit
用于唯一标识主机发送的每一IP包,通常没发送一个IP包其值就会加1
标志位 - 3bit
用来控制包分片功能
是否开启分片,开启分片后是否标记最后一个分片
片偏移 - 3bit
当我们开启分片功能后,需要为每个一个分片打上标记,来标识每个分片在数据包中所属的位置。
如果不打上标记最后数据组合起来就是混乱的,过不了头部校验直接丢弃。
生存时间 - 8bit
又叫TTL,用来标记数据包经过路由器的数目
数据包经过一个路由器,TTL值就会减1,当字段为0时,数据包被丢弃
可以有效防止路由环路
协议 - 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
头部校验和 - 16bit
用于校验数据的完整性和差错校验
源IP地址 - 32bit
目的IP地址 - 32bit
可选项 0 - 40bit
Option字段很少用,基本上只用来控制、转护要求以及测试等目的。
填充 0 - 40bit
和Option选项一样,该项只用于填充数据。
Maximum Transmission Unit 最大传输单元,指以接口收发数据最大支持的单个数据包的长度 也就是我们包分片后的大小 以太网接口默认MTU是1500Byte字节 PPPoE默认是1492Byte字节
用于标识网络层地址,点分十进制,32为长度,
由网络位+主机位组成
例如:
192.168.1.1
IPv4地址理论上有2³²≈43亿个地址,不过现在已经耗尽。
关于IP地址我们需要知道以下两个重要概念:
用于区分不同的IP网络,说白了就是一个网络位对应一个网段 如果一个主机的网络位长度和数字完全一致,那么这个主机在在这个网段中
用于标识IP网络中的设备地址,一个网络范围内部的主机号是唯一的。
一共分为五大类即A、B、C、D、E
1.0.0.0 - 126.255.255.255 前8位为网络位,后24位为主机位 127留作保留,本地测试用
128.0.0.0 - 191.255.255.255 前16位为网络位,后16位为主机地址
192.0.0.0 - 224.255.255.255 前24位为网络地址,后8位为主机地址
224.0.0.0 - 239.255.255.255 只能用作组播地址,不能配置为主机地址
240.0.0.0 - 255.X.X.X 用于科研用地址,不对外公开
127.X.X.X 本地换回地址
,用来标识本地主机。
主机位全0 为网络地址
,标识网段,例如192.168.1.0
主机位全1 为本网段的广播地址
,广播和单播概念后面再讲,例如192.168.1.255
255.255.255.255 为全网广播地址
0.0.0.0
标识所有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(Address Resolution Protocol) 地址解析协议,以太网并不能识别32位的IP地址,于是研发了这种协议,通过动态的将IP地址解析为MAC地址实现通信 主机通过ARP解析到目的MAC地址,会将其存在自己的ARP缓存表中,方便下次查询时直接使用。
1.主机A以广播形式发送ARP查询请求,询问到达主机B的IP地址对应的MAC地址 2.主机B以单播形式恢复主机A的本机的MAC地址 3.主机A和主机B各自都将对方的IP地址和MAC地址对应关系写入ARP缓存表
ARP缓存表又被分为动态ARP缓存表与静态ARP缓存表
通过ARP协议动态解析活动,超过老化时间(aging time)没有使用就自动删除。
通过手动配置添加对应信息至ARP表,静态ARP表不会被老化,且优先级高于动态ARP表
ARP在主机上的一些常用命令
arp -a
查询ARP缓存表
arp -d
清空ARP缓存表
逆向地址解析协议 根据本机自己的MAC地址,来查询本机自己的IP地址
互联网控制消息协议,一个网络层协议
定义了错误报告提供了网络诊断功能,通常配合高层协议使用
比如说应用
Ping命令
Tracert命令
关于这个命令,用来测试网络连通性,常见的几个命令:
ping -a [source address] [destination address]
指定源IP和目的IP发送请求
ping -c [number] [destination address]
指定数量发送request报文给目的方
ping -s [size] [destinaction address]
指定发送的报文的大小
ping -t [time] [destination address]
指定报文的延时时间
除了以上几个命令,我们还需要了解回送的报文的意思
Echo Request
回应请求,用来发送测试对方是否可达
Echo Reply
回应响应,对Echo Request 回复响应
Time Exceeded
超时,当TTL字段成0代表不可达
Destination Unreachable
目的不可达,表示去往的母子主机不存在
首先判断目的IP是否和本机IP属于同一网段 同一网段,会直接查询目的IP的MAC地址,并进行封装转发 不在同一网段,会查询网关的IP地址的MAC地址,并进行封装转发
当路由器收到一个单播包,首先还是判断目的地址是否找自己
是,则接收该包并逐层解封获取数据
否,则判断是否属于本身接口上的网段,如果是,则将包转发给对应网段,否则匹配路由表项,将包转交给Next hop下一跳转发处理。
包的接收流程满足以下条件之一即可