Loading... ## IP协议概述 IP(Internet Protocol)互联网协议,是网络层唯一标准 是网络层的核心协议,定义了网络层的封装方式,编址方法,主要负责功能: <code>网络层寻址(IP地址寻址)</code> <code>路由路径选择(路由协议路径查找)</code> <code>包重组</code>  这里面几个协议<code>ICMP</code><code>IGMP</code><code>ARP</code><code>RARP</code>待会我们会详细讲解 ## IP协议的主要作用 - **标识网络节点和链路** IP为每个链路分配一个全局唯一的网络号[Network Number]来标识每个网络,为节点分配一个全局唯一的32位IP地址,用于标识每个节点 PS:就是网络地址、客户端地址 - **寻址和转发** 寻址寻的是网络IP地址,寻找到一个网络范围,确定范围在转发到相应目的主机。 - **适应各种数据链路** 可以根据链路的MTU(Maximum Transfer Unit 最大传输单元)对IP包进行分片和重组,实现从IP到数据链路层地址的映射(和ARP差不多) ## 路由器的主要功能 - **连接网络和聚合网络** 将原本从接口上分离的两个网络互联 - **链路层协议适配** 可以通过适配链路层的协议和速率,而实现两者之间通信。 - **网络间数据包转发** 路由器与路由器之间需要运行网关到网关协议 GGP(Gateway to Gateway Protocol)才能确定去往目的网络的正确路径。典型的GGP包括<code>RIP</code><code>OSPF</code><code>BGP</code>等路由协议(Routing Protocol) 且IP网络的包转发是逐跳进行的(hop-by-hop),因此每个路由器中都有个张路由表(routing table)里面包含了我们来确定自身数据包要去往目的网络的下一跳地址(Next hop)。 ## 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** <code>版本号 - 4bit</code> 用于标识IP协议的版本号,目前IP协议版本号一共有两种<code>IPv4 / IPv6</code>目前IPv4地址已经耗尽,IPv6拥有更广的地址,甚至可以为沙漠中的每一个沙粒分配一个地址,国家正在大力推广IPv6与普及 - **IHL** <code>头长度 - 4 bit</code> 又叫Internet Header Length 指我们IP包头部长度,通常不固定 根据Option选项来计算 - **Type of Service** <code>服务类型(TOS)- 8bit</code> 用于QOS(Quality of Service)质量服务中,表示该数据包所期望的服务优先级。 - **Total Length** <code>总长度 - 16bit</code> 用于表示整个IP包的长度,包括数据部分 - **Identification** <code>标识 - 16bit</code> 用于唯一标识主机发送的每一IP包,通常没发送一个IP包其值就会加1 - **Flags** <code>标志位 - 3bit</code> 用来控制包分片功能 是否开启分片,开启分片后是否标记最后一个分片 - **Fragment Offset** <code>片偏移 - 3bit</code> 当我们开启分片功能后,需要为每个一个分片打上标记,来标识每个分片在数据包中所属的位置。 如果不打上标记最后数据组合起来就是混乱的,过不了头部校验直接丢弃。 - **Time to Live** <code>生存时间 - 8bit</code> 又叫TTL,用来标记数据包经过路由器的数目 数据包经过一个路由器,TTL值就会减1,当字段为0时,数据包被丢弃 可以有效防止路由环路 - **Protocol** <code>协议 - 8bit</code> 用于标识传输层的地址或协议号,数据需要怎样的上层服务,交给哪个协议处理(TCP/UDP/ICMP/IGMP/EGP/IGP) 我们记住这个几个常见协议号就行了 <code>1 - ICMP</code> <code>2 - IGMP</code> <code>4 - IP</code> <code>6 - TCP</code> <code>8 - EGP</code> <code>9 - IGP</code> <code>17 - UDP</code> <code>41 - IPv6</code> <code>89 - OSPF</code> <code>112 - VRRP</code> - **Header Checksum** <code>头部校验和 - 16bit</code> 用于校验数据的完整性和差错校验 - **Source Address** <code>源IP地址 - 32bit</code> - **Destination Address** <code>目的IP地址 - 32bit</code> - **Option** <code>可选项 0 - 40bit</code> Option字段很少用,基本上只用来控制、转护要求以及测试等目的。 - **Padding** <code>填充 0 - 40bit</code> 和Option选项一样,该项只用于填充数据。 ## MTU概念 Maximum Transmission Unit 最大传输单元,指以接口收发数据最大支持的单个数据包的长度 也就是我们包分片后的大小 以太网接口默认MTU是1500Byte字节 PPPoE默认是1492Byte字节 ## IP地址 用于标识网络层地址,点分十进制,32为长度, 由网络位+主机位组成 例如: <code>192.168.1.1</code>  IPv4地址理论上有2³²≈43亿个地址,不过现在已经耗尽。 关于IP地址我们需要知道以下两个重要概念: - **网络位** 用于区分不同的IP网络,说白了就是一个网络位对应一个网段 如果一个主机的网络位长度和数字完全一致,那么这个主机在在这个网段中 - **主机位** 用于标识IP网络中的设备地址,一个网络范围内部的主机号是唯一的。 ## IP地址的分类  一共分为五大类即<code>A、B、C、D、E</code> - **A类地址范围** 1.0.0.0 - 126.255.255.255 前8位为网络位,后24位为主机位 127留作保留,本地测试用  - **B类地址范围** 128.0.0.0 - 191.255.255.255 前16位为网络位,后16位为主机地址  - **C类地址范围** 192.0.0.0 - 224.255.255.255 前24位为网络地址,后8位为主机地址  - **D类地址范围** 224.0.0.0 - 239.255.255.255 只能用作组播地址,不能配置为主机地址  - **E类地址范围** 240.0.0.0 - 255.X.X.X 用于科研用地址,不对外公开  - **特殊的几个IP地址** <code>127.X.X.X 本地换回地址</code>,用来标识本地主机。 <code>主机位全0 为网络地址</code>,标识网段,例如192.168.1.0 <code>主机位全1 为本网段的广播地址</code>,广播和单播概念后面再讲,例如192.168.1.255 <code>255.255.255.255 为全网广播地址</code> <code>0.0.0.0</code>标识所有IP地址,通常用来做默认匹配 ## 公网/私网IP地址范围 IP除了5大类之分,还有公私网之分 公网就是我们可以在互联网上寻找到的地址,全球唯一,通常由运营商分配。 - **私网地址范围** <code>A类:</code>10.X.X.X <code>B类:</code>172.16.X.X - 172.31.X.X <code>C类:</code>192.168.X.X <code>自动私有地址</code>169.254.X.X <code>运营商专用私用地址</code>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在主机上的一些常用命令 <code>arp -a</code>查询ARP缓存表 <code>arp -d</code>清空ARP缓存表 ## RARP协议 逆向地址解析协议 根据本机自己的MAC地址,来查询本机自己的IP地址  ## ICMP协议 互联网控制消息协议,一个网络层协议 定义了错误报告提供了网络诊断功能,通常配合高层协议使用 比如说应用 <code>Ping命令</code> <code>Tracert命令</code> - **Ping** 关于这个命令,用来测试网络连通性,常见的几个命令: <code>ping -a [source address] [destination address]</code> 指定源IP和目的IP发送请求 <code>ping -c [number] [destination address]</code> 指定数量发送request报文给目的方 <code>ping -s [size] [destinaction address]</code> 指定发送的报文的大小 <code>ping -t [time] [destination address]</code> 指定报文的延时时间 除了以上几个命令,我们还需要了解回送的报文的意思  <code>Echo Request</code>回应请求,用来发送测试对方是否可达 <code>Echo Reply</code>回应响应,对Echo Request 回复响应 <code>Time Exceeded</code>超时,当TTL字段成0代表不可达 <code>Destination Unreachable</code>目的不可达,表示去往的母子主机不存在 ## IP包转发流程 首先判断目的IP是否和本机IP属于同一网段 同一网段,会直接查询目的IP的MAC地址,并进行封装转发 不在同一网段,会查询网关的IP地址的MAC地址,并进行封装转发  当路由器收到一个单播包,首先还是判断目的地址是否找自己 是,则接收该包并逐层解封获取数据 否,则判断是否属于本身接口上的网段,如果是,则将包转发给对应网段,否则匹配路由表项,将包转交给Next hop下一跳转发处理。  ## IP包接收流程 包的接收流程满足以下条件之一即可 - 目的IP地址等于自己的IP地址 - 目的IP地址是一个广播地址 - 目的IP地址是一个组播地址,而本机的某个服务属于此组播  最后修改:2022 年 12 月 19 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏