【网络层】IP报文解析和网段划分

网络层的作用

前面学习了应用层和传输层,应用层的作用是为用户和应用程序提供网络服务,传输层的作用是提供端口到端口的通信服务。而网络层呢,其作用就是为了在复杂的网络环境中确定一个合适的路径,也就是在网络世界中找到目标主机。下面逐步介绍如何通过一个IP地址找到一台目标主机。

IP协议

在这里插入图片描述

协议报头格式

在这里插入图片描述

  • 4位版本号:指定IP协议的版本,4表示的是IPv4
  • 4位首部长度:IP头部的长度,单位是4字节,4个比特位表示的最大数为15,所以IP报头的最大长度为15*4=60个字节,最小为5*4=20字节。加粗样式
  • 8位服务类型:3位优先权字段(已经弃用),4位TOS字段和1 位保留字段(必须置为 0)。4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个.
  • 16 位总长度:数据报整体占多少个字节
  • 16位标识唯一标识主机发送的报文,也就是说每一次发送的报文的标识符都唯一。如果IP报文在数据链路层被分片了,那么每一个片里的标识符都是相同的,标识它们属于同一个报文。
  • 3位标志字段:第一位保留。第二位置1表示禁止分片,此时如果报文长度超过MTU,IP模块就会丢弃报文。第三位置1表示有更多分片,如果分片,最后一个分片置为 0, 其他是 1. 类似于一个结束标记
  • 13位片偏移:表示数据包分片在原始数据包中的位置,以8字节为单位。是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置。接收方收到被分片的IP报文后,按照13位偏移量就可以将所有的分片排序,这样得到的整个报文就是正确的顺序。
  • 8位生存时间:数据到达目的地后的最大报文跳数,一般是64。每经过一个路由器,TTL值减1,直到到达目的地或变为0时丢弃数据包。 主要用于防止出现路由循环。
  • 8位协议:表示传输层使用的协议类型,例如,ICMP为1,TCP为6,UDP为17。
  • 16位校验和:使用 CRC 进行校验, 来鉴别头部是否损坏.
  • 32 位源地址和 32 位目标地址: 表示发送主机和接收主机.
  • 选项字段(不定长, 最多 40 字节)。

网段划分

IP地址分为两个部分:网络号和主机号

  • 网络号:保证相互连接的两个网段具有不同的标识
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
    在这里插入图片描述
  • 不同的子网其实就是把网络号相同的主机放到一起.
  • 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复
  • 网络号用来标识网络中的某一个子网,主机号则是用来标识该子网中的某一台主机。更简单的,网络号指的是的一段范围,主机号指的是这段范围内的某台主机。

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的 IP 地址都不相同

DHCP

DHCP技术通过服务器与客户端之间的交互,实现了IP地址和其他网络配置信息的动态分配。
工作原理:
DHCP的工作原理通常包含四个步骤:发现、提供、请求、确认。

  • 发现:当设备(手机或者电脑)加入网络时,它会广播一条DHCP发现消息,寻找可用的DHCP服务器。
  • 提供:DHCP服务器收到发现消息之后,会准备一个包含可用IP地址和其它网络配置如子网掩码等的DHCP提供消息,并将这个消息发送给请求的设备
  • 请求:设备可能收到多个提供消息,会从中选择一个,并发送一个DHCP请求消息给对应的DHCP服务器,确认接受该服务器提供的IP地址等信息。
  • 确认:DHCP服务器收到上面的请求后,再发送一个DHCP确认消息给你的手机,正式分配IP地址,设备收到后就可以正式连接网络了

简单来说就是,DHCP,能够自动的给子网内新增主机节点分配 IP 地址。一般的路由器都带有 DHCP 功能. 因此路由器也可以看做一个 DHCP 服务器.

过去曾经提出一种划分网络号和主机号的方案, 把所有 IP 地址分为五类, 如下图所示
在这里插入图片描述
随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请 B 类网络地址, 导致 B 类地址很快就分配完了, 而 A 类却浪费了大量地址;显然,这种分类方式不太灵活。

针对这种情况提出了新的划分方案, 称为CIDR

CIDR划分方案

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个 32 位的正整数. 通常用一串 “0” 来结尾;
  • 将 IP 地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关

在这里插入图片描述
其中,IP地址中的主机地址全0表示的就是这个局域网本身,全1就表示广播地址,用于给同一个链路中相互连接的所有主机发送数据包。

此外, 127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1

  • 关于本地环回地址:
    主要用于本地网络接口的测试和诊断。其实就是自己发送数据给自己,中间并没有经过局域网和其他网络

在这里插入图片描述
CIDR 在一定程度上缓解了 IP 地址不够用的问题:提高了利用率, 减少了浪费(可以根据主机数量来增加主机号的位数)

IP地址的数量限制

IPv4下的IP地址只有32位,大概就是43亿左右。假设每台主机都要有一个唯一的IP地址,那么就意味着一共只有 43 亿台主机能接入网络?事实上,由于一些特殊的 IP 地址的存在, 数量远不足 43 亿; 另外 IP 地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个 IP 地址.
CIDR 虽然在一定程度上缓解了 IP 地址不够用的问题,但仍然不够用. 这时候有三种方式来解决:

  • 动态分配 IP 地址: 只给接入网络的设备分配 IP 地址. 因此同一个 MAC 地址的设备, 每次接入互联网中, 得到的 IP 地址不一定是相同的;
  • NAT 技术:通过允许多个内部设备共享一个或多个公共IP地址来访问互联网,从而节省了公网IP地址的使用。也就是说,不同的局域网中IP地址可以是一样的
  • IPv6: IPv6 并不是 IPv4 的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6 用 16 字节 128 位来表示一个 IP 地址; 但是目前 IPv6 还没有普及

私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet (公网)上, 理论上 使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址

  • 10.*,前 8 位是网络号,共 16,777,216 个地址
  • 172.16.到 172.31.,前 12 位是网络号,共 1,048,576 个地址
  • 192.168.*,前 16 位是网络号,共 65,536 个地址

包含在这个范围中的, 都成为私有 IP, 其余的则称为全局 IP(或公网 IP);

在这里插入图片描述
上图中的WAN口IP就是路由器所在网络的地址

  • 一个路由器可以配置两个 IP 地址, 一个是 WAN 口 IP, 一个是 LAN 口 IP(子网IP).
  • 路由器 LAN 口连接的主机, 都从属于当前这个路由器的子网中.
  • 不同的路由器, 子网 IP 可以是一样的(通常都是 192.168.1.1). 子网内的主机
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN 口 IP 就是一个公网 IP 了.
  • 家用路由器的WAN口地址通常是运营商的子网IP地址,运营商的WAN口地址通常就是公网。
  • 子网内的主机需要和外网进行通信时, 路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN 口 IP), 这样逐级替换, 最终数据包中的 IP 地址成为一个公网 IP. 这种技术称为 NAT(Network Address Translation,网络地址转换).
  • 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网 IP 的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

LAN和WAN

LAN口地址和WAN口地址在路由器中扮演着不同的角色,分别用于局域网(LAN)和广域网(WAN)的连接与通信。注意,局域网和广域网的概念是相对的,我们认为一个路由器的子网可以是称为一个局域网,路由器“外面”的网络可以称为广域网,但路由器又可能处于运营商路由器的子网构建的局域网中。
LAN口地址通常用于局域网内部的设备之间的通信,WAN口地址,即广域网接口地址,是路由器从互联网服务提供商(ISP)处获得的公网IP地址。这个地址用于路由器与外部网络(如互联网)之间的通信。

路由

路由其实就是利用目的IP在复杂的网络中找到目标主机,这个过程类似于问路
通常,路由的过程会经过多个路由器,我们把在以太网中指从源 MAC 地址到目的MAC 地址之间的帧传输称为"一跳"。

在这里插入图片描述
当IP数据包到达路由器时,路由器会先查看目的IP。路由器维护了一张路由表,表中有着与该路由器所处同一个网络中的其它路由器的IP地址以及子网掩码。如果目的IP与该表中的某个子网掩码与上之后恰好等于其对应的网络号,那么说明这个IP数据报下一跳就去该路由器的子网中继续找。如下图所示。
在这里插入图片描述

  • 在linux中,路由表可以使用route指令查看
    在这里插入图片描述
    如果目的 IP 命中了路由表, 就直接转发即可,路由表中的最后一行即default,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。
  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值