敬教劝学,建国之大本;兴贤育才,为政之先务。——《朱舜水集。劝学》
文章目录
- IPv4编址
- 接口
- IP地址
- 子网
- 无类别域间路由选择(CIDR)
- 获取一块地址
- 获取主机地址
- 网络地址转换
IPv4编址
接口
主机或路由器与物理链路的边界称作接口。一台主机往往只有一个接口,而路由器由于要转发数据报,有两个或多个接口,IP要求每个接口有自己的IP地址,因此一个主机通常只有一个IP地址,但路由器有多个。
IP地址
IP地址长度为32比特,因此有232个可能的IP地址。这些IP地址一般用点分十进制记法,将每一个字节转换成十进制来表示,例如135.34.32.167,就是一个合法的IP地址,每一个十进制数都等价于一个八比特的二进制数。
子网
如果一组接口之间没有互联网连接,只靠链路相连,那么这些端口组成一个子网。例如:
在这个网络中,有六个子网:
- 左下角,右下角,上面各有一个由两个主机接口和一个路由器接口组成的子网。
- 223.1.9.1和223.1.9.2;223.1.8.1和223.1.8.0;223.1.7.1和223.1.7.0分别组成一个子网。
仔细观察这些子网可以看到,同一个子网的接口IP地址前24位都是一样的,事实上,IP编址为每个子网分配一个这样的地址:xxx.xxx.xxx.0/24,其中的/24称为子网掩码,表示最左侧的24比特定义了子网地址。
无类别域间路由选择(CIDR)
因特网的地址分配策略称为CIDR,该策略将一个地址分为两部分,写作a.b.c.d/x,前x比特构成了IP地址的网络部分,常被称为前缀。在同一个子网内接口的网络部分完全相同,子网外的分组前缀如果与该网络部分相同,那么可以直接寻址到该子网。多个子网可以构成一个更大的地址块,这个地址块拥有更短的网络部分,于是互联网形成层次结构。这种使用单个网络前缀通告多个网络的能力称为地址聚合或路由聚合或路由摘要。例如:
在这个图片中,组织0-7是七个子网,他们子网地址的前缀长23比特,这7个子网聚合起来的分配给ISP的地址块向ISP外通告的是拥有20比特前缀的IP地址。当ISP外的某个主机想要向组织3中的主机发送分组时,它先通过前20比特寻址到该ISP内,然后在通过前23比特寻址到组织3。
但是,如果组织1转而通过下面的ISPs-R-Us与因特网相连,又该如何寻址呢?此时上面的ISP通告范围不变,下面的ISP除了继续通告原有地址块外,再通告组织1的子网地址“200.23.18.0/23”,由于最长前缀匹配原则,当有目的地为组织1的分组寻址时找到的是23比特前缀的通告,而不是20比特的。
在CIDR之前,IP地址采用分类编址的方案,网络部分被限制为8/16/24比特,分别被称为A,B,C类网络。但这种编址方式太过死板,抛去2个特殊用途的IP地址,一个子网如果采取C类网络,只能容纳254台主机,但如果采取B类网络,会有65534个空间,会造成地址浪费。
最后,有一个特殊的IP地址255.255.255.255,当目的地址为255.255.255.255时,它将这个分组发送给同一个网络的所有主机。
子网和网络的区别:每一个网络中有很多个子网。例如,因特网是一个网络,它其中包括很多很多个子网。
获取一块地址
对于一个组织的子网,获取地址有两种方法:
- 联系它的ISP,由ISP从其拥有的地址块中分出一块给该子网。
- 向因特网名字和编号分配机构(ICANN)直接获取,ISP本身也是用这种方法获取IP地址块的。
获取主机地址
在网络中,一个主机的IP地址就相当于这个主机的“身份证”,别的主机靠IP地址来辨别它。如果一个主机或路由器想要获得一个IP地址,对于路由器来说,一般由系统管理员手动配置;对于主机来说,更多的是使用动态主机配置协议(DHCP)完成。
DHCP在某个主机每次与网络相连时给它一个固定的IP地址或者给它分配一个临时IP地址,若是临时IP地址,那么每次与网络连接时该地址都不同。它还支持主机得知它的子网掩码等网络相关信息。由于DHCP具有将主机自动连接进一个网络的能力,它又被称为即插即用协议。临时IP地址的方法有效的节省了IP地址空间,例如,假设一个ISP有2000个主机,但只有400个主机会同时在线,那么分配IP地址的DHCP服务器只需拥有一个512的IP地址块即可。
DHCP是一个客户-服务器协议。在一个子网中,有一台或多台DHCP服务器或DHCP中继代理(通常是一台路由器),DHCP中继代理知道在该网络中的所有DHCP服务器的地址。
在该网络中,当新的主机加入左边子网或下边子网时,中间的路由器就起到了DHCP中继代理的作用。
主机通过以下几步请求向一个DHCP服务器请求一个DHCP地址:
- DHCP服务器发现:主机为了发现DHCP服务器,以广播目的地址255.255.255.255向网络中的所有主机发送DHCP发现报文,在报文中,该主机附上自己的“源地址”0.0.0.0。
- DHCP服务器提供:网络中可能有多个DHCP服务器,每一个服务器收到DHCP发现报文后,发送DHCP提供报文向客户作出响应。由于不知道需要IP地址的主机是哪个,该报文也采用广播目的地址进行传播。在该报文中,带有四条信息:该报文的事务ID,向客户推荐的IP地址,网络掩码,IP地址租用期(IP地址有效的时间量)。
- DHCP请求:客户从多个发送提供报文的服务器中选择一个发送DHCP请求报文进行响应,在报文中回显配置参数。
- DHCP ACK:收到请求的服务器用DHCP ACK报文响应请求报文,证实回显的参数。
网络地址转换
随着在家庭或企业中越来越多主机的出现,一个子网中所分配的地址块可能不能满足其中主机的使用,但若是按照旧有的方法,则地址块被固定,不能进行扩张,因此出现了网络地址转换(NAT)。
上图是一个NAT的示意图。可以看到,以中间的路由器为分界,左边是外部网络,左侧接口的IP地址是外部网络主机所看到的IP地址;右边是子网,其子网地址是10.0.0.0/24,这是一个特殊的子网地址。在网络中,有3块IP地址空间被保留,它们用于专用网络或具有专用地址的地域。在这种子网中,主机的IP地址只对同一个子网中的设备有意义。相当于是一个“外号”而不是“大名”,这些主机没有对外部网络的IP地址,即没有“大名”,只有在这个小团体(即子网)中互相称呼的“外号”,需要与外界联系时,它们会通过拥有“大名”的路由器。而在因特网中,有几十万的这样的子网在使用这三块IP地址空间。对于路由器来说,它的外部网络IP地址通过ISP得到,而它自身也运行一个管理子网地址空间的DHCP服务器,为它自己和子网中的主机提供只能在子网中使用的IP地址。
那么,子网中的主机是怎么通过路由器和外部网络连接的呢?NAT使路由器在外部网络看来只是一台拥有单一IP地址的单一设备,当外部主机想要给子网中的任意一个主机发送分组时,同一将分组发送给这个路由器。路由器则通过NAT转换表与子网主机进行互动。当子网主机发送分组到外部网络时,先要经过路由器。路由器提取出数据中的源IP地址和源端口号信息并写入NAT转换表的LAN端。然后路由器改装该数据报,将自己在外部网络的IP地址写入源IP地址,并启用一个端口号,将这个端口号写入源端口号字段,将这两个信息写入NAT转换表的WAN端然后发送出去。当有外来的分组想要发送给子网中的主机时,它就可以查阅NAT转换表,根据分组中的目的IP地址和目的端口号进行逆向改装,将对应的LAN端目的IP地址和目的端口号写入,然后发送给对应的子网主机。
NAT会妨碍P2P应用程序,因为在P2P应用程序中两个对等方需要一条直接的TCP连接,而路由器阻挡了这一连接。如果对等方A不在NAT后,而对等方B在,那么A可以通过另一个不在NAT后且与B创建了TCP连接的对等方C请求到B,并于B创建一条直接的TCP连接。这种A与C的雇佣关系称为连接反转,被许多P2P应用程序用于NAT穿越。当A和B都在NAT后时,就需要应用程序自己解决了。
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!