Skip to content

网络层

IPV4

INFO

IPV4地址为32位,通常写成4个十进制数,每个整数对应一个字节,称为 “点分十进制表示法”

IPV4分类

IPV4分类

  • A:0-127,用于政府机构
  • B:128-191,用于中型企业
  • C:192-223,自由分配
  • D:224-239,用于组播
  • E:240-247,用于实验待分配

IPV4数据包格式

IPV4数据包格式

普通的IP首部长20B

  • 服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略) ,4bit的TOS子字段和1bit未用位但必须置0;4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务

  • 总长度字段是指整个IP数据报的长度,以字节B为单位

  • 标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1

  • TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数,初始值由源主机设置(通常为32或64) ,经过一个处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机

  • 协议字段用来标识是哪个协议向IP传送数据

  • 首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。 ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码

  • 选项字段是任选项,是数据报中的一个可变长的可选信息。选项字段一直都是以32 bit作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终是32 bit的整数倍(这是首部长度字段所要求的)

IP分片

因为物理层一般限制最大报文长度(MTU),IP层在收到一份要发送的IP数据报时首先选路,然后查询该接口的MTU并于数据报长度比较,如果需要则进行分片,数据报的标识字段会复制到每一个分片,除了最后一个分片,每一个分片标识字段中的一个比特位要置1表示还有更多分片,分片可以发生在原始发送端主机上,也可以发生在中间路由器上,分片后的数据报只有到达目的地才能重新组装,已经分片过的数据报可能会继续分片,片偏移字段表示该片偏移原始数据报开始的位置,当分片完成后,每个片的总长度要改为该片的长度值。

TIP

标志字段中有个 “不分片” 位,若置1且数据报大于MTU则直接丢弃并发送ICMP差错报文给起始端

ICMP报文类型

IP寻址

A通过本机hosts或者dns将B的计算机名转换为IP地址,然后A用自己的IP与子网掩码计算是否和B处于同一网段

  • 同网段:A在ARP缓存中查找B的MAC,如果能找到就直接做数据链路层封装并且通过网卡将封装好的以太网帧发送到物理线路上去;如果ARP缓存中没有主机B的MAC地址,主机A 将启动ARP协议通过在本地网络上的ARP广播来查询主机B的MAC地址,获得主机B的MAC地址后写入ARP缓存表,进行数据链路层的封装,发送数据

  • 不同网段:A将自己的数据包发给缺省网关(过程与上面同网段一致),数据帧到达网关接口解封装,变成IP数据包,根据目的IP地址查找路由表,决定转发接口后做适应转发接口数据链路层协议帧的封装,并且发送到下一跳路由器,此过程继续直至到达目的网络与目的主机

使用127.0.0.1、本机IP、localhost、0.0.0.0访问本机服务有什么区别?
  • 127.0.0.1是本地回环地址,通过在操作系统中的虚拟网卡lo0转发到本机
  • 本机IP即是在局域网内分配的IP,如果Ping本机IP实际上也是通过虚拟网卡lo0回环到本机
  • localhost实际上是一个域名,在主机的host文件定义,默认指向回环地址127.0.0.1
  • 0.0.0.0表示本机的所有IPV4地址,本机服务监听0.0.0.0即可以用127.0.0.1和本机IP访问
如果 2 台 PC 的 IP 地址与子网掩码按位与所得的结果相同,它们是否一定能相互 Ping 通?

2 台 PC 的 IP 地址与子网掩码按位与所得的结果相同,它们不一定能相互ping通, 因为IP地址和子网掩码按位与所得的结果相同不能够说明两个主机所在子网一定相同,比如 11111111 11111111 11111111 00000000 子网掩码和IP地址 192.168.100.1 和子网掩码 11111111 11111111 11111100 00000000 和IP地址 192.168.97.1 他们的IP地址和子网掩码按位与所得的结果相同但是并不属于同一子网,故不能Ping通

ARP绑定

通过绑定的IP和MAC确保只有一个合法的IP和MAC组合,可以预防利用伪造MAC的ARP攻击。通过将MAC地址和IP地址绑定,可以防止IP地址篡改和自动变更。在企业管理中通过ARP绑定可以实现更加精确的访问控制,只有特定的MAC才能接入网络,或者实现上网策略和流量的精确控制

TIP

  • 查看arp缓存:arp -a
  • 设置静态arp绑定:arp -s IP地址 MAC地址
  • 取消arp绑定:arp -d IP地址

IGMP

IGMP是因特网组管理协议,工作在组播成员和最后一跳路由之间

  • 加入IGMP组流程:

    1. 路由器会周期性发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器) IGMP 常规查询报文 。

    2. 主机1 和 主机 3 收到这个查询,随后会启动「报告延迟计时器」,计时器的时间是随机的,通常是 0~10 秒,计时器超时后主机就会发送 IGMP 成员关系报告报文 (源 IP 地址为自己主机的 IP 地址,目的 IP 地址为组播地址)。如果在定时器超时之前,收到同一个组内的其他主机发送的成员关系报告报文,则自己不再发送,这样可以减少网络中多余的 IGMP 报文数量

    3. 路由器收到主机的成员关系报文后,就会在 IGMP 路由表中加入该组播组,后续网络中一旦该组播地址的数据到达路由器,它会把数据包转发出去

  • 离开IGMP组流程:

    1. 主机 1 要离开组 224.1.1.1,发送 IGMPv2 离组报文,报文的目的地址是 224.0.0.2(表示发向网段内的所有路由器)

    2. 路由器 收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个),以便确认该网络是否还有 224.1.1.1 组的其他成员

    3. 主机 3 仍然是组 224.1.1.1 的成员,因此它立即响应这个特定组查询。路由器知道该网络中仍然存在该组播组的成员,于是继续向该网络转发 224.1.1.1 的组播数据包

IPV6

多播&任播

  • 任播地址标识了一组网络接口的地址,并且只能作为目标地址使用,通常分配给路由器,数据包被发往任拨地址时会路由到该地址标识最近的一个接口,所以任拨地址具有冗余功能和负载分担功能

  • 多播地址是一对多通信的地址,且也只能作为目标地址,发送给多播组的数据包必须有一个单播源地址,多播地址前8比特都是1 (FF),然后是4比特标志( Flag)和4比特范围(Scope),接下来的112比特表示组ID

前缀

IPV6的前缀长度最长可以为128位,在RFC 7608中有说明,与IPv4一样,IPv6前置长度是根据无类域间路由(CIPR)架构在IPv6路由和转发过程中传递和使用的参数

TIP

IPV6使用无状态地址自动配置(SLAAC)进行地址分配一般使用64位前缀,但IPV6的前缀可以手动设置为0-128间的任意数字

NDP

IPV6使用邻居发现协议(NDP)在链路上解析目的IP地址对应的链路层地址并维护邻居的可达性状态(NUD)来解析MAC地址

当一个节点要解析IPV6对应的MAC时会发送NS报文,报文包含发送方的源MAC并利用多播地址传输,目标节点收到NS报文后回复NA报文作为响应,NA报文包含目标节点MAC和IP信息,与IPV4的ARP协议类似但是NDP是通过邻居请求和邻居公告消息来完成MAC地址的解析,使用的是组播,而IPV4使用的是广播

TIP

和IPV4不同可能是因为是IPV6的地址结构改变,空间的扩张需要新的协议设计来优化节点间的通信,提高网络性能和可管理性,网络安全威胁的增加也是原因之一,NDP运行基于ICMPv6,引入了时间戳和Nonce选项以抵御重放攻击,并通过密码生成地址(CGA)与RSA签名对数据源进行验证,从而有效防止邻居请求/邻居通告欺骗的问题,可以很大增强安全性

地址分配

有状态地址配置类似IPV4中的DHCP,它通过DHCPv6从DHCPv6服务器来获取IPV6地址,服务器维护每个已分配地址的使用状态租约时间,适合需要严格管理地址分配的网络环境

无状态地址配置SLAAC则是设备利用了ICMPv6协议中的邻居发现功能,设备通过接收路由器的RA消息获取前缀信息,并结合自身的MAC地址生成全局单播地址。这种方式不需要中央服务器,设备可以自行配置地址,相比有状态地址配置需要使用服务器集中控制管理,无状态的地址配置简化了网络管理,减少了服务器的负担

SLAAC

SLAAC是在没有DHCPv6服务器的情况下获取IPV6单播地址的方法,核心是ICMPv6

  1. 客户端将路由器请求(RS)组播

  2. 路由器收到RS后组播路由器通告(RA),RA 消息包括本地数据段的前缀和前缀长度。客户端使用此信息创建自己的 IPv6 全局单播地址,路由器会定期发送RA

  3. 客户端通过RA可以使用EUI-64进程根据48位的MAC生成64位IPV6后缀IID或者操作系统随机生成64位IID

  4. 重复地址检测(DAD):客户端验证该生成的IPV6 是否唯一,使用一个特殊构造的多播地址发送ICMPv6 邻居请求消息,此地址称为请求节点组播地址,它复制 PC1 的 IPv6 地址的最后 24 位

因为IPV6地址由客户端自己生成,意味着没有维护网络地址信息的服务器,所以没有SLAAC服务器知道那些IPV6地址正在使用

PD

PD是Prefix Delegation前缀委派,是一种用于前缀代理的技术,它允许服务提供商将网络前缀分配给客户路由器,让客户路由器可以在本地区域上创建子网

Released under the MIT License.