IP: Internet Protocol
互联网中的网络层
主机,路由器中的网络层功能:
ip协议主要规定了 数据平面的转发功能
ICMP协议:
对于网络的信号,报错等的规定
路由器信令。
**ping应用程序的的本质: **
形成ICMP分组, 发给目标节点
目标节点反转回来形成ping的request的对应的respose
然后就可以知道目标ip是活跃的。
ip数据报格式
头部是可变长的,20字节的固定长度+ 选项部分
IP数据报的载荷部分(body): 也就是数据部分。
16bit identifier: id表示 ; flgs ;fragment offset; 中间这三个字段是分片用的
ttl(time to live):最大剩余段数,每经过一个路由器减一。
upper layer :将载荷部分交给上层的哪个协议(TCP/)
Internet CheckSum : 校验和 ,校验数据报的头部
Options 经过路由器的时候,交换节点会将option打在ip之中
分片和重组
** 网络链路有MTU (最大传输单元) -链路层帧所携带的最大数据长度 **
不同的链路类型
不同的MTU
** 大的IP数据报在网络上被分片 (“fragmented”) **
一个数据报超过了最大载荷量(1500bit) 所以就需要进行分片传输, 按照不同的id、偏移量等等
一个数据报被分割成若干个小 的数据报
相同的ID
不同的偏移量
最后一个分片标记为0
** “重组”只在最终的目标主机 进行 (最后到了目标主机,就会重组之前切分的部分)**
**IP头部的信息被用于标识,排序相关分片 **
分片的细节:
例子 : 4000 字节数据报 有20字节头部 、 3980字节数据
** MTU = 1500 bytes **
第一片:20字节头部+1480字 节数据 【 偏移量:0 】
第二片:20字节头部+1480字 节数据(1480字节应用数据) 【 偏移量:1480/8=185 】
第三片:20字节头部+1020字 节数据(应用数据) 【 偏移量:2960/8=370 】
路由器将每片都当成独立的分组进行转发, 最后所有的信息都到目标主机, ,到了目标主机之后就会进行重组(根据数据报的头部, 及其偏移量进行排序重组 ; fragflag=0就是最后一片)
IPv4地址
**IP地址: 32位标示(对设备进行标识),对主机或者路由器的接口 编址 **
接口: 主机/路由器和物理链路的连接处(223.1.3.27)
路由器通常拥有多个接口 (多个路由器之间进行转发)
主机也有可能有多个接口(多个网卡进行虚拟ip转发)
IP地址和每一个接口关联
** 一个IP地址和一个接口相关联 ,一个接口(接口)和多个IP相连**
子网
什么是子网(subnet) ?
一个子网内的节点(主 机或者路由器)它们的** IP地址的高位部分相同 **,这些节点构成的网络 的一部分叫做子网
**无需路由器介入,子网 内各主机可以在物理上 相互直接到达 **【在一个子网的内部,ip之间是一跳可达的。(具体的在链路层实现)】
包括三个子网网络
**IP地址: **
**子网部分(高位bits) **
**主机部分(地位bits) **
判断是否为子网的方法:
要判断一个子网, 将每一个接口从主机或者路由器上分开,构成了一个个网络的孤岛
**每一个孤岛(网络)都是一个都可以被称之为subnet(子网). **
子网掩码:11111111 11111111 11111111 00000000
Subnet mask: /24
图中有6个子网
子网孤岛: 几个主机构成的一个网络孤岛(相当于欧盟,对外就是一个整体),网络的传输跳过了路由器。
IP地址分类
Class A:126 networks ,16 million hosts
Class B:16382networks ,64 K hosts
Class C:2 million networks ,254 host
Class D:multicast
Class E:reserved for future
以A类为例解释:
地址的最高位为0;第一个字节的其他七个bit代表网络号 ; 后面三个字节的24个bit代表主机号
A类地址一共2的7次方 - 2= 126个网络(减少的2个是全0 和全1 的网络号不用)。每个网络有2的24次方 - 2 个主机。
同理 B类网络有 2的14次方 - 2 ; 主机有 2的16次方 -2
依次类比
C类IP地址有 200多万个网络, 一般我们获取到网络都是C类地址网络。(A、B类的都被分配完了)
D类部分是组波(具体有点不太明白,但是就是)
E类都是预留的
特殊IP地址:
一些约定:
子网部分: 全为 0—本网络
主机部分: 全为0—本主机
主机部分: 全为1–广播地址,这个网络的所有 主机
所以全0 和 全1不被分配
**特殊IP地址: **
内网(专用)IP地址
专用地址:地址空间的一部份供专用地址使用
永远不会被当做公用地址来分配, 不会与公用地址重复
只在局部网络中有意义,区分不同的设备
路由器不对目标地址是专用地址的分组进行转发
**专用地址范围 **
Class A 10.0.0.0-10.255.255.255 MASK 255.0.0.0
Class B 172.16.0.0-172.31.255.255 MASK 255.255.0.0
Class C 192.168.0.0-192.168.255.255 MASK 255.255.255.0
IP 编址: CIDR&& 子网掩码
** CIDR: Classless InterDomain Routing(无类域间路由) **
子网部分可以在任意的位置
**地址格式: a.b.c.d/x, 其中 x 是 地址中子网号的长度 **
可以自己分配机构的子网掩码
子网掩码(subnet mask)
** 32bits , 0 or 1 in each bit **
1: bit位置表示子网部分 (代表网络号部分)
0:bit位置表示主机部分(代表主机号部分)
原始的A、B、C类网络的子网掩码分别是
A类:255.0.0.0 :11111111 00000000 0000000 00000000
B类:255.255.0.0:11111111 11111111 0000000 00000000
C类:255.255.255.0:11111111 11111111 11111111 00000000
** CIDR下的子网掩码例子:11111111 11111111 11111100 00000000
** 另外的一种表示子网掩码的表达方式 : /#
例:/22:表示前面22个bit为子网部分
转发表和转发算法
图中的端口改为接口
**获得IP数据报的目标地址(IP DesAddress) **
**对于转发表中的每一个表项 **
如 (IP Des addr) & (mask)== destination 得到的是网号, 则按照表项对应的接口匹配并 转发该数据报
如果都没有找到,则使用默认表项转发数据报
如何获得一个IP地址
主机如何获得一个IP地址?
系统管理员将地址配置在一个文件中
Wintel: control-panel->network- >configuration->tcp/ip->properties
UNIX: /etc/rc.config
** DHCP: Dynamic Host Configuration Protocol: 从服务器中动态获得一个IP地址 **
“plug-and-play”—> 动态主机配置协议
**对于一个机构(ISP)怎么获取IP地址 ? **
首先某个机构会获取相对的一大块ip地址(前面若干位为网络号;后面的为主机号)
就假设前20位为网络号, 后面的12位为主机号
将后面的12位进行分割范围【前3位再表示网络号;后9位表示子网号】
这样就有23位为网络号。 9位子网号。 然后再对9位进行分割
分成2位为网络号,7为子网号
…..
按照这样进行无限的套娃, 最后得到的就是某个具体的IP地址。
总的来说就是你的老大从国家那里申请了一个完整的蛋糕, 你想要拥有这块蛋糕的一部分,他人也想要,那就只能从这个老大那里去切了。除非你也能从国家那里获取最初的那块完整的蛋糕
ISP’s block 11001000 00010111 00010000 00000000 200.23.16.0/20
Organization 0 11001000 00010111 00010000 00000000 200.23.16.0/23
Organization 1 11001000 00010111 00010010 00000000 200.23.18.0/23
Organization 2 11001000 00010111 00010100 00000000 200.23.20.0/23
… ….. …. ….
Organization 7 11001000 00010111 00011110 00000000 200.23.30.0/23
最初的ip地址(蛋糕)可以到ICANN机构去申请(这是在中国的)
DHCP: Dynamic Host Configuration Protocol(协议)
**允许主机在加入网络的时候,动态地从服务器那里获得IP地址: **
可以更新对主机在用IP地址的租用期-租期快到了
重新启动时,允许重新使用以前用过的IP地址
支持移动用户加入到该网络(短期在网)
** DHCP工作概况: **
主机广播“DHCP discover” 报文[可选]
DHCP 服务器用 “DHCP offer”提供报文响应[可选]
主机请求IP地址:发送 “DHCP request” 报文
DHCP服务器发送地址:“DHCP ack” 报文
**上述的详细解释: **