IP 地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符。IP 地址的结构使我们可以在互联网上很方便地进行寻址。IP 地址现在由互联网名字和数字分配机构 ICANN
(Internet Corporation for Assigned Names and Numbers)进行分配。
“分类的 IP 地址” 就是将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个字段是网络号(net-id),它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。第二个字段是主机号(host-id),它标志该主机(或路由器)。一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。所以,一个IP地址在整个互联网范围内是唯一的。
IP 地址并不仅仅指明一台主机,而是还指明了主机所连接到的网络。
为了提高可读性,我们常常把 32 位的IP地址中的每8位插入一个空格(但在机器中并没有这样的空格)。为了便于书写,可用其等效的十进制数字表示,并且在这些数字之间加上一个点。
A类地址的网络号字段占 1 个字节,只有 7 位可供使用(该字段的第一位已固定为 0 ),但可指派的网络号是 126 个(即27 – 2)。
减 2 的原因:
A类地址的主机号占3个字节,因此每一个A类网络中的最大主机数是 224–2 ,即16777214。
这里减 2 的原因是:
IP 地址空间共有232(即4294967296)个地址。整个A类地址空间共有231个地址,占整个IP地址空间的50%。
B 类地址的网络号字段有 2 个字节,但前面两位(10)已经固定了,只剩下 14 位可以进行分配。
但实际上 B 类网络地址 128.0.0.0 是不指派的,而可以指派的 B 类最小网络地址是 128.1.0.0 。因此B类地址可指派的网络数为214−1,即 16383。B 类地址的每一个网络上的最大主机数是 216–2,即65534 。这里需要减 2 是因为要扣除全 0 和全 1 的主机号。整个 B 类地址空间共约有230个地址,占整个IP地址空间的 25%。
C 类地址有 3 个字节的网络号字段,最前面的 3 位是(110),还有 21 位可以进行分配。C 类网络地址 192.0.0.0 也是不指派的,可以指派的 C 类最小网络地址 192.0.1.0,因此 C 类地址可指派的网络总数是221−1,即 2097151 。每一个 C 类地址的最大主机数是28–2,即 254 。整个 C 类地址空间共约有229个地址,占整个 IP 地址的 12.5%。
IP 地址的特点:
每一个 IP 地址都由网络号和主机号两部分组成。从这个意义上说,IP 地址是一种分等级的地址结构。分两个等级的好处是:
实际上 IP 地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号必须是不同的。这种主机称为多归属主机
(multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的 IP 地址。这好比一个建筑正好处在北京路和上海路的交叉口上,那么这个建筑就可以拥有两个门牌号码。例如,北京路 4 号和上海路 37 号。
了三个局域网( LAN1,LAN2 和 LAN3 )通过三个路由器( R1,R2 和 R3 )互连起来所构成的一个互联网(此互联网用虚线圆角方框表示)。其中局域网 LAN2 是由两个网段通过网桥 B 互连的。图中的小圆圈表示需要有一个 IP 地址。
物理地址
是数据链路层和物理层使用的地址,而 IP 地址是网络层和以上各层使用的地址,是一种逻辑地址
(称IP地址为逻辑地址是因为IP地址是用软件实现的)。
在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用 IP 地址的 IP 数据报一旦交给了数据链路层,就被封装成 MAC 帧了。MAC 帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在 MAC 帧的首部中。
我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的 IP 地址,需要找出其相应的硬件地址。地址解析协议 ARP
就是用来解决这样的问题的。
还有一个旧的协议叫做逆地址解析协议 RARP ,它的作用是使只知道自己硬件地址的主机能够通过 RARP 协议找出其 IP 地址。现在的 DHCP 协议已经包含了 RARP 协议的功能。
地址解析协议 ARP 解决这个问题的方法是在主机 ARP 高速缓存中存放一个从 IP 地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。
举个例子:
当主机 A 要向本局域网上的某台主机 B 发送 IP 数据报时:
ARP请求
分组;ARP响应
分组中写入自己的硬件地址。ARP高速缓存
中写入主机 B 的 IP 地址到硬件地址的映射。虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
为了减少网络上的通信量,主机 A 在发送其 ARP请求分组时,就把自己的 IP 地址到硬件地址的映射写入 ARP请求分组。当主机 B 收到 A 的 ARP请求 分组时,就把主机 A 的这一地址映射写入主机 B 自己的 ARP高速缓存中。以后主机 B 向 A 发送数据报时就很方便了。
使用 ARP 的四种典型情况:
IP 数据报的格式能够说明 IP 协议都具有什么功能。在 TCP/IP
的标准中,各种数据格式常常以 32 位(即4字节)为单位来描述。
一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
IP数据报首部的固定部分中的各字段如下,由于不可变部分很少用到,这里就不再阐述。
IPv4
)。相对位置
。片偏移以 8 个字节为偏移单位。这就是说,每个分片的长度一定是 8 字节( 64 位)的整数倍。
注意是相对位置
——指的是相对于起点的位置 !
举个例子:一数据报的总长度为 3820 字节,其数据部分为 3800 字节长(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。于是分为 3 个数据报片,其数据部分的长度分别为 1400 ,1400 和 1000 字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。
因为是以 8 个字节为偏移单位,所以用前面的字节数除八就可以得到片偏移的值:
现在假定数据报片 2 经过某个网络时还需要再进行分片,即划分为数据报片 2-1(携带数据 800 字节)和数据报片 2-2(携带数据 600 字节)。那么这两个数据报片的总长度、标识、MF、DF 和片偏移分别为:820,12345,1,0,175;620,12345,1,0,275。
TTL
(Time To Live),表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器 R1 转发到 R2 ,再转发到 R3 ,然后又转发到 R1 ),因而白白消耗网络资源。路由器在每次转发数据报之前就把 TTL 值减 1。 若 TTL 值减小到零,就丢弃这个数据报,不再转发。因此,现在 TTL 的单位不再是秒,而是跳数。TTL 的意义是指明数据报在互联网中至多可经过多少个路由器。显然,数据报能在互联网中经过的路由器的最大数值是 255 。若把 TTL 的初始值设置为 1 ,就表示这个数据报只能在本局域网中传送。
10.首部检验和:首部检验和——占16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
查找路由表
根据目的网络地址就能确定下一跳路由器,这样做的结果是:
特定主机路由
默认路由 (default route)
路由器分组转发算法
IP 数据报的首部中没有地方可以用来指明 “下一跳路由器的 IP 地址”
关于路由表