IP基本认识
IP在TCP/IP参考模型中处于第三层,也就是网络层
网络层的主要作用是:实现主机与主机之间的通信,也就是点对点通信
网络层与数据链路层有什么关系呢?
IP(网络层)和MAC(数据链路层)之间的区别和关系
根据上图我们知道IP的作用的主机之间通信中的,而MAC的作用则是实现【直连】的两个设备之间的通信,而IP则负责在【没有直连】的两个网路之间进行通信传输。
计算机网络中需要「数据链路层」和「网络层」这个分层才能实现向最终目标地址的通信。
源IP地址和目标IP地址在传输过程中是不会变化的,只有源 MAC 地址和目标 MAC 一直在变化。
IP地址的基础知识
IP地址的定义
在TCP/IP网络通信时,为了保证能正常通信,每个设备都需要配置正确的IP地址,否则无法实现正常的通信。
IP地址(IPv4地址)由32位正整数来表示,IP地址在计算机是以二进制的方式处理的。
而人类为了方便记忆才用了点分十进制的标记方式,也就是将32位IP地址以每8位为组,共分4组,每组以【.】隔开,再将每组转换成十进制
那么,IP地址最大值也就是2^32 = 4294967296
也就是说,最大允许43亿台计算机连接到网络
实际上,IP地址并不是根据主机台数来配置的,而是以网卡数来配置的。像服务器、路由器等设备都有2个以上的网卡,也就是会有两个以上的IP地址。
NAT技术也是可以更换IP地址的技术,通过这个技术,可以使联网的数量超过了43亿台。
IP地址也是由【网络标识】和【主机标识】这两个部分组成
- 如果只用Mac地址,那么在寻址方面不好操作,你想从一个网络寻址到另一个网络非常麻烦。路由器不可能存储地球上每一个MAC地址。所以需要IP地址。和MAC不同的是,IP地址是和地域相关的。对于位于同一个子网上的设备,我们给他们分配的IP地址前缀都是一样的。这个前缀就像邮政编码一样。这样,路由器通过IP地址的前缀就能知道这个设备在哪个子网上了。现在,路由器只需要记住每个子网的位置即可,大大减少了路由器所需要的内存。
- 如果只用IP地址,由于IP地址是逻辑上的标识,任何人都可以修改的,因为不能作为标识;而MAC地址属于硬件中的ID,是写死在硬件层面的,不太好修改。其次 , IP地址是动态分配的,在设备还没有 IP 地址的时候(或者分配 IP 地址的过程中),我们还需要用 MAC 地址来区分不同的设备,这样才能为它分配到对应的IP地址。
地址的分类
互联网诞生之初,IP地址显得很充裕,于是计算机科学家们设计了分类地址
IP地址分类成了5种类型,分别是A类、B 类、C 类、D 类、E 类。
上图黄色是分类号,用于区分IP地址类别
什么事A、B、C类地址?
其中对于A、B、C类主要分为两个部分,分别是网络号和主机号。
最大主机数和主机号的位数有关,比如C类地址的主机号占8位,那么C类地址的最大主机个数就是: 2^8 - 2 = 254
为什么要减2
因为在IP地址中,有两个IP是特殊的,分别是主机号全为1和全为0地址。
- 主机号全为1指定某个网络下的所有主机,用于广播
- 主机号全为0指定某个网络
因此在分配过程中,应该去掉这两种情况。
广播地址用于在同一个链路中相互连接的主机之间发送数据包
当主机号全为1时,就表示该网络的广播地址。例如把172.20.0.0/16 用二进制表示如下: 10101100.00010100.00000000.00000000
其是B类IP,将这个地址的主机部分全部改为1,则形成广播地址 10101100.00010100.11111111.11111111
再将这个地址用十进制表示,则为172.20.255.255
广播地址可以分为本地广播和直接广播两种
- 在本网络内广播的叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上
- 在不同网络之间的广播叫做直接广播
上面介绍了A、B、C类主要包含两个部分,网络号和主机号
那么对于D类和E类呢
D类和E类地址是没有主机好的,所以不可用于主机IP,D类常常被用于多播,E类是预留的分类,暂时未使用
IP多播用于将包发送给特定组内的所有主机
由于广播无法穿透路由,若想给其他网段发送同样的包,就可以使用可以穿透路由的多播(组播)。
对于这五种分类
这种分类地址的优点就是简单明了、选路简单
缺点
- 同一网络下没有地址层次
- A、B、C类有个尴尬处境,就是不能很好的与现实网络匹配。
-
- C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。
-
- 而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。
这两个缺点,都可以在 CIDR 无分类地址解决。
无分类地址 CIDR
正是因为IP分类存在许多缺点,所以后面提出了无分类地址的方案,即CIDR
这种方式不再有分类地址的概念,32比特的IP地址被划分为两部分,前面是网络号,后面是主机号。
怎么划分网络号和主机号呢?
表达形式a.b.c.d/x ,其中/x 表示前X位属于网络号,x的范围是0~32 ,这就使得IP地址更加具有灵活性。
比如10.100.122.2/24,这种地址表示形式就是CIDR,/24表示前24位是网络号,剩余8位是主机号。
还有另一种划分网络号与主机号的形式,那就是子网掩码,掩码意思就是覆盖掉主机号,剩余的就是网络号。
将子网掩码和 IP 地址按位计算AND,就可得到网络号
为什么要分离网络号和主机号?
因为两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同。如果网络地址相同,表明接受方在本网络上,那么可以把数据包直接发送到目标主机
路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。
怎么进行子网划分? 在上面我们知道通过子网掩码划分出网络号和主机号,那实际上子网掩码还有一个作用,那就是划分子网。
子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址
举个🌰
假设对C类地址进行子网划分,网络地址192.168.1.0
使用子网掩码255.255.255.192对其进行子网划分
C类地址中前24位是网络号,最后8位是主机号,根据子网掩码可知从8位主机号中借用两位作为子网号
由于子网网络地址被划分成两位,那么子网地址就有4个,分别是00、01、10、11
公有IP地址与私有IP地址
在A、B、C分类地址的本质上,实际上是分为公有IP地址和私有IP地址
平时我们办公室、家里、学校用的 IP 地址,一般都是私有 IP 地址。因为这些地址允许组织内部的 IT 人员自己管理、自己分配,而且可以重复。因此,你学校的某个私有 IP 地址和我学校的可以是一样的。
就像每个小区都有自己的楼编号和门牌号,你小区家可以叫 1 栋 101 号,我小区家也可以叫 1 栋 101,没有任何问题。但一旦出了小区,就需要带上中山路 666 号(公网 IP 地址),是国家统一分配的,不能两个小区都叫中山路 666。
所以,公有 IP 地址是有个组织统一分配的,假设你要开一个博客网站,那么你就需要去申请购买一个公有 IP,这样全世界的人才能访问。并且公有 IP 地址基本上要在整个互联网范围内保持唯一。
IP地址与路由控制
IP地址的网络地址这一部分是用于进行路由控制。
路由控制表中记录者网络地址与下一步应该发送至路由器的地址,在主机和路由器上都会有各自的路由器控制表。
在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。
环回地址是不会流向网络的。
环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。
IPv6基本认识
IPv6可以保证地球上的每粒沙子都能被分配到一个IP地址
IPv6的地址是128位的,这可分配的地址数量很大
但IPv6除了有更多的地址之外,还有更好的安全性和扩展性,说简单点就是IPv6相比IPv4能带来更好的网络体验
但是因为IPv4和IPv6不能相互兼容,所以需要我们电脑、手机之类的设备支持,还需要网络运营商对现有的设备进行升级,所以这可能是 IPv6 普及率比较慢的一个原因。
IPv6的亮点
- IPv6可自动配置,即使没有DHCP服务器也可以实现自动分配IP地址,即插即用
- IPv6包头包首部长度采用固定的值40字节,去掉了包头检验和,简化了首部结构,减轻了路由器符合,大大提高了传输的性能
- IPv6有应对伪造IP地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性
IPv6地址的标识方法
IPv4地址长度共32位,是以每8位为一组,并用点分十进制的表示方式
IPv6地址长度共128位,每16位作为一组,每组用冒号隔开,采用习惯采用十六进制表示
如果出现连续的0时还可以将这些0省略,并用两个冒号隔开。但是一个IP地址中只允许出现一次两个连续的冒号
IPv6地址的结构
类似于IPv4,也是通过IP地址的前几位标识IP地址的种类
IPv6单播地址类型
- 在同一链路单播通信,不经过路由器,可以使用链路本地单播地址,IPv4没有次类型
- 在内网里单播通信,可以使用唯一本地地址,相当于IPv4的私有IP
- 在互联网通信,可以使用全局单播地址,相当于IPv4的公有IP
IPv4首部和IPv6首部
IPv4首部
- 版本: 占4bit,值ip协议的版本号,目前的ip协议版本号为4(即IPV4)
- 首部长度:占4bit,可表示的最大数值是15个单位
- 区分服务,只有在使用区分服务时,这个字段才起作用。在一般情况下都不使用这个字段。
- 总长度:指首部和数据之和的长度,单位为字节。
- 标识:一个计数器,用来产生数据报的标识
- 标志:占三位,目前只有前两位有意义。最低位MF,MF= 1 表示还有分片,MF= 0 表示最后一个分片。中间位DF表示是否允许分片,DF = 0时才允许分片。
- 偏移量,较长分组在分片后,某片在原分组中的相对位置(以8个字节为偏移单位)详见后面
- 生存时间:记为TTL表示数据报在网络中至多可以经过多少个路由器
- 协议:数据报中的数据部分携带那种协议
- 首部校验和,只检验数据报的首部,不包括数据部分。
- IP源和目的地址:各占4字节。
- 可选部分:可以用来支持排错,测量以及安全等措施。内容比较丰富。
IPv6首部
- 版本:占4位,它指明了协议的版本
- 通信量类: 占8位,为了区分不同的IPv6数据报的类别或优先级
- 流标号:占20位,IPv6支持资源预分配,并且允许路由器把每一个数据报与一个给定的资源分配相联系
- 有效核载长度:占16位,它指明IPv6数据报除基本首部以外的字节数,最大值是64KB
- 下一个首部:占8位,它相当于IPv4的协议字段和可选字段
- 当IPv6没有扩展首部,相当于IPv4的协议字段,它指出了数据应交付IP层上面哪一个高层协议
- 出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型
- 跳数限制:占8位,防止数据报在网络中无限期存在
- 源地址:占128位,是数据报的发送端的IP地址
- 目的地址:占128位,是数据报的接受端的IP地址
- 扩展首部
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效核载
- 目的站选项
IPv6相比于IPv4的头部变化
- 将首部长度变为固定的40字节,称为基本首部
- 将不必要的功能取消,首部的字段数减少为8个
- 取消了首部校验和
- 在基本首部的后面允许有0个或多个扩展首部
- 所有的扩展首部和数据合起来叫做数据报的有效荷载。
从IPv4到IPv6过渡
双协议栈
- 双协议栈:是指在完全过渡到IPv6之前,使一部分主机装有双协议栈,一个IPv4和IPv6
- 在相互转换的过程中,IPv6首部中的某些字段无法恢复
隧道技术
- IPv6数据报要进入Ipv4网络时,把IPv6数据报封装成IPv4数据报
- 要使用隧道技术,需要把IPv4首部的协议字段设置为41
IP协议相关技术
DNS
我们在上网时,通常使用的方式域名,而不是IP地址,因为域名方便人类记忆
实现这一技术的就是DNS域名解析,DNS可以将域名网址自动转换为具体的IP地址。
域名层级关系
DNS 中的域名都是用句点来分隔的,比如 www.server.com,这里的句点代表了不同层次之间的界限。
在域名中,越靠右的位置表示其层级越高
根域是在最顶层,他的下一层就是com顶级域,再向下就是server.com 根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。
因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。
域名解析的工作流程
- 客户端首先发出一个DNS请求到本地的DNS服务器。本地DNS服务器收到请求后,会在本地缓存中查到,如果有,直接返回其IP地址。如果没有,本地DNS会将请求传递到根域服务器
- 根域服务器拿到请求后,发现后置是.com的。会返回对应的顶级域名服务器地址。然后本地DNS收到后,又会向这个顶级域名服务器发起请求
- 顶级域名服务器收到请求后,会把对应的权威DNS服务器的地址返回。本地DNS收到后,继续向这个权威DNS服务器发起请求。
- 权威DNS服务器收到后,查询到对应的IP地址,并告诉本地DNS
- 本地DNS再将IP地址返回给客户端
ARP
ARP协议的作用:从网络层使用的IP地址,解析出在数据链路层使用的硬件地址
- 通过目标 IP 地址,定位下一个接收数据包的网络设备的 MAC 地址。如果目标主机处在同一个数据链路上,那么可以直接得到目标主机的 MAC 地址,否则会得到下一条路由器的 MAC 地址。
- 地址解析协议ARP:在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新
- 每一台主机都设有一个ARP高速缓存区,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表
- ARP获取硬件地址流程
- ARP进程在本局域网上广播发送一个ARP请求分组,请求分组主要内容“我的IP地址是:—,硬件地址是:—。我想知道IP地址为:—的主机的硬件地址”
- 本局域网上所有主机上运行的ARP进行都收到此ARP请求分组
- 如果主机的IP地址和ARP请求分组的要查询的IP地址一致,就收下这个ARP请求分组。并向主机A放松ARP响应分组,同时在这个ARP响应分组中写入自己的硬件地址
- 主机收到ARP响应分组后,就在其ARP高速缓存中写入请求主机的硬件地址映射
- ARP对保存在高速缓存中的每一个映射地址项目都设置了生存时间(例如10~20分钟),凡是超过生存时间的项目就从高速缓冲中删除掉
- 注意:ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题
ICMP协议
- ICMP差错报告报文
- 终点不可达:当路由器或主机不能交付数据报是就向源点发送终点不可达报文
- 时间超时:当路由器收到生存时间为0的数据报时,除丢弃该数据报外,还要向源主机发送时间超过报文。当终点在预定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超时报文
- 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文
- 改变路由:路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器
- ICMP询问报文
- 回送请求和回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或目的主机或路由器发送ICMP回送回答报文。
- 时间戳请求和回答:ICMP时间戳请求报文是请求某台主机或路由器回答当前的日期和时间
|