简介
IP相当于OSI参考模型中的第三层——网络层
网络层的主要作用是实现终端节点之间的通信。从前面的章节可知,数据链路层的主要作用是在互连的节点之间进行包传递,而一旦跨越多种数据链路,就需要借助于网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
IP基础知识
IP地址属于网络层的地址,为了识别通信对端,我们需要有一种类似于地址的识别码进行识别,我们前面提到过,MAC地址就是这种用于在同一个链路中标识不同计算机的一种识别码。但这只能为我们提供一种识别方式而非寻找方式。因为MAC地址是固定的,就像我们的身份证一样,我们无法通过身份证号就能获知你当前所处的位置。因此我们需要一种能够为我们提供寻址功能的标识,那就是ip地址。
IP地址用于在连接到网络中的所有主机中识别出进行通信的目标地址,因此,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址。
我们可以这么想,以快递为例,快递小哥知道这个包裹要送给张三,并且他知道张三的身份证,用于确认张三这个人,但是世界上叫张三的人太多了,快递小哥必须知道张三在哪,所以他需要寄件人给他提供目标张三所在的地址,他才可以给张三送过去。这个地址在网络中就是我们的IP地址。
路由控制
路由控制是指将分组数据发送到最终目标地址的功能。即使网络非常复杂,也可以通过路由控制确定到达目标的通路。一旦路由控制的运行出现异常,分组数据极有可能迷失,从而无法到达目标地址。
我们再次以前面提到的快递为例,路由控制就相当于快递小哥,当我们告诉快递小哥一个地址时,快递小哥可以通过这个地址按照省市区街道逐层寻找到目标地址,也就是说,ip相当于一个静态地址,而路由控制才是数据正确运输的执行者。
路由控制表
那么路由控制到底是如何根据ip寻找到正确的发送路径的呢。
实际上,为了将数据包发送给目标主机,所有的主机都维护着一张路由控制表,该表记录IP数据在下一步应该发送给哪个路由器。IP包将根据这个路由表在各个数据链路上传输。
以公路上的路标为例,假设我们要从上海开往杭州,在这段高速公路上必然存在许多的岔口是到其他的市的,因此我们每一个岔路口提供一个道路标识来告诉我们朝哪边才可以前往杭州。
事实上IP寻址的方式基本上与我们现实生活中寻找路的方式是一样的,我们寻找某个地方通过是根据某某省某某市某某街道这样具有层次性的地址进行寻找,IP也具有这样的层次性。
IP地址的基础知识
IP地址的定义
IP(ipv4)地址是由32位整数来表示,TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部以二进制的形式处理,但是在我们使用时,会将IP地址按照8位一组进行使用,每组以"."隔开,将每组数转换为十进制数。
10101100. 00010100. 00000001. 00000001(二进制)
172. 20. 1. 1 (十进制)
IP地址由网络和主机两部分标识组成
网络标识必须保证互连的每个网段的地址都不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的主机标识则不允许在同一个网段内重复出现。
IP包被转发到途中某个路由器时,正是利用目标IP地址的网络标识进行路由。因为即使看不到主机标识,只要一看到网络标识就能够判断是否为该网段内的主机。
那么究竟从第几位到第几位才算是网络标识和主机标识?在现在的网络中通常以子网掩码进行区分,以前是根据ABCD四类网络进行区分的,A类是前8位为网络标识,B类是前16位,一次推类。
子网掩码
我们来看一个例子
在上面图片中,IPV4地址位192.168.31.184,而在ip地址的下方就是我们子网掩码。子网掩码也是由32位数字组成,它对应IP地址网络标识的部分全部为”1“,对应主机标识的位置全部为”0“。当然,子网掩码必须以连续的“1“开始。
上面图中的子网掩码为255.255.255.0,这表示IP地址中的前24位位网络标识,后8位为主机标识。同一条数据链路的网络标识相同,但是主机标识不可重复。
广播地址
广播地址用于在同一链路中互相连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为1,就成了广播地址。
假设存在一个网络为172.20.0.0/16,16表示前16位为网络表示。二进制表示如下
10101100.00010100.00000000.00000000
将这个地址的主机部分全部改为1 ,则形成广播地址
10101100.00010100.11111111.11111111
将这个地址用十进制表示就是172.20.255.255
广播分为:
- 本地广播
- 直接广播
本地广播
在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0.24的情况下,我们向这192.168.0.255发送的IP都会被广播到本网络内的所有主机上,但是所有来自广播地址的IP包都会被路由器屏蔽,不会发送到外网上。
直接广播
除了在本网络内实现广播以外,不同网络之间也可以发送广播消息,例如网络为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包,收到这个包的路由器将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包。
DNS
我们一般在使用TCP/IP通信时也不直接使用ip地址,而是使用像www.baidu.com这样的网址去访问目标服务器。这是因为我们是通过访问某个域名,然后通过域名服务器将我们访问的域名字符串转化为对应的ip地址。
域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的相关信息
ARP
只要确定了IP地址,就可以向这个目标地址发送IP数据报,然而,在底层数据链路层,进行通信时却必须要了解每个IP地址所对应的MAC地址。
ARP是一种解决地址问题的协议。以目标IP为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址,但是ARP只适合IPv4。IPv6使用ICMPv6代替ARP发送邻居探索消息。
ARP的工作机制
ARP是如何知道MAC地址的,简单来说,ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。
假设存在主机A向同一链路上的主机B发送IP包,主机A的地址为172.20.1.1,主机B的IP地址为172.20.1.2,但是它们互相不知道对方的mac地址。主机A为了获取主机B的mac地址它会向链路上所有主机发送一个ARP请求报,这个包会包含它要请求的ip地址,如果某台主机发现此IP与本机IP相同就会将自己mac地址塞入ARP请求包返回给主机A。此时主机A就拥有主机B的mac地址了。
ICMP
我们如何确定一个网络是否能够正常运行,ICMP为我们提供了这样的功能。
ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因等。有了这些功能以后,就可以获得网络是否正常,设置是否有误等信息,从而便于进行网络上的问题诊断。
假设我们现在有一个主机A为了获取主机B的MAC地址而发送了一个ARP请求包,但是由于主机B没有开机,因此多次发送ARP请求都无效,由于始终无法到达主机B,路由器会返回一个ICMP包给主机A表示目标不可达。ICMP有多种异常类型,有需要的朋友可以上网查询ICMP的类型。
DHCP
如果逐一为每一台主机设置IP地址会非常繁琐。特别是在使用移动端设备时,每次移动设备都需要重新设置ip地址。
于实,为了实现自动设置IP地址,同一管理IP地址分配,就产生了DHCP(Dynamic Host Configuration Protocol)协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。DHCP不仅在IPv4中,在IPv6中也可使用。
DHCP的工作机制
在使用DHCP之前,首先要架设一台DHCP服务器,然后将DHCP所要分配的IP地址设置到服务器上。此外,还需要将相应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。
- 在我们的计算机插入网线时,会向当前网络广播一个DHCP发现包来寻找DHCP服务器
- 当DHCP服务器接到DHCP发现包时,会向发起者发送一个DHCP提供包来告诉刚接入的主机可以使用的网络设置。
- 当我们的计算机接收到这个DHCP提供包以后会再次广播来告诉DHCP服务器它要使用刚才接收到的配置,这可以认为是一个确认阶段,用来确保即使重复设置了相同的网络设置也可以正常工作
- 最后DHCP服务器会向发起计算机发送一个包来告诉发起者是否允许该配置。
NAT、全局地址和私有地址
起初,互联网中的任何一台主机或路由器必须配有一个唯一的IP地址。一旦IP发生冲突,就会使发送端无法判断究竟应该发送给哪个地址。随着互联网的迅速普及,IP地址不足的问题日趋显著。如果一直按照现行的方法采用唯一地址的话,就会出现IP耗尽的危险。
于是出现了一种技术。它不要求为每台主机或路由器分配一个固定的IP地址,而是要求必要的时候为相应数量的设备分配唯一的IP地址。尤其对于那些处于独立网络中的主机,只要保证在该网络内地址唯一,就可以不用考虑互联网即可分配相应的IP地址。
简单来说,该技术网络IP分为两类,第一类叫全局IP,它要求在整个互联网内不会发生重复,第二类叫私有IP,它要求在它所在的私有网络内IP不发生重复即可,一旦私有网络内的主机需要访问互联网,需要通过某台具有全局IP的主机向外访问。事实上,不管是内网访问外网亦或是外网访问内网,都会需要NAT即使实现IP转换,毕竟私有IP不能在全局网络使用。
私有IP:
- 10.0.0~10.255.255.255
- 182.168.0.0~172.31.255.255
- 192.168.0.0~192.168.255.255
全局IP:
- 除去私有IP以外都是全局IP
NAT
NAT(Net Address Translator)是用于在本地网络内使用私有IP,在连接互联网时转而使用全局IP地址的技术。
NAT的工作机制
以10.0.0.10 的主机与163.221.120.9的主机通信为例,利用NAT,途中NAT路由器将发送源地址从10.0.0.10转换为全局的IP地址(路由器的IP地址)再发送数据,反之,当包从163.221.120.9发过来时,目标地址先被NAT路由器从其本身的全局地址转换成私有IP的10.0.0.10以后再被转发。
在NAT路由器内部,有一张自动生成的用来转换地址的表