网络基础(五)网络层IP协议、NAPT端口映射及路由选择

文章目录

  • IP协议的概念和功能
  • IP协议格式
  • IP地址管理
    • IP地址划分
    • 特殊的IP地址
    • IP地址的数量限制
    • 私有IP地址和公网IP地址
  • NAT(Network Address Translation网络地址转换技术)
    • NAPT技术(NAT重载)
  • 路由选择
  • 所以

IP协议的概念和功能

IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:
一是解决互联网问题,实现大规模、异构网络的互联互通;
二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务。

IP是整个TCP/IP协议族的核心,也是构成互联网的基础。IP位于TCP/IP模型的网络层,对上可载送传输层各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网等各种技术来传送。
为了能适应异构网络,IP强调适应性、简洁性和可操作性,并在可靠性做了一定的牺牲。IP不保证分组的交付时限和可靠性,所传送分组有可能出现丢失、重复、延迟或乱序等问题。

要先理解的基本概念:
主机: 配有IP地址, 但是不进行路由控制的设备;
路由器: 即配有IP地址, 又能进行路由控制;
节点: 主机和路由器的统称;

IP协议的作用:
网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第1张图片

IP协议格式

网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第2张图片

  • 4位版本号(version): 指定IP协议的版本, 一个是ipv4版本,一个是ipv6版本;

  • 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数,4bit表示最大的数字是15, 因此IP头部最大长度是60字节(固定的20字节+40字节的选项)

  • 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段和1位保留字段(必须置为0).
    – 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个。对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要。

  • 16位总长度(total length): IP数据报整体占多少个字节(ip头部+上层数据),IP包总长度最大为65535个字节。

  • 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的(即同一个报文的每个片段都有相同的标识id);

  • 3位标志字段(flags):
    –第一位保留,
    –第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文,
    –第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0,类似于一个结束标记;

  • 13位片偏移(framegament offset): 是每个分片相对于原始IP报文开始处的偏移(即该字段指出分段数据在源数据报中的相对位置)。其实就是在标识当前分片在原报文中处在哪个位置,实际偏移的字节数是这个值 * 8 得到的, 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
    –13个比特位最大能表示的数字是2^13 = 8192数值
    片偏移 = 13位数值* 8,最大不超过ip报文的数据长度2^13* 2^3=2 ^16

  • 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数(计数器), 一般是64. 每次经过一个路由, TTL-1, 一直减到0还没到达, 那么就丢弃了,这个字段主要是用来防止出现路由循环(实现通信防环)。
    –例子:已知路由器会将数据包以接力(一站一站)的形式逐条传递,很多时候,由于工程师的疏忽,或者因为网络拓扑结构的复杂性,会出现一些Bug环境:由于网络设备之间存在的环路”Loop“,所以数据包一直里面饶起来,而不是发送到该发送过去的服务器上。
    ​ 如果没有TTL,那么这个数据包将会一直存在于链路中,这样不仅占用网络带宽,并且浪费设备的处理器资源,严重的时候将会拖垮其他人的正常通信。
    ​ 所以,当IP数据包加入TTL值之后,即便网络拓扑存在环路设计,当数据包被转发到TTL为0的时候,网络设备也可以直接丢弃,以此解决环路带来的危害。

  • 8位协议: 标识IP协议上层协议。当上层协议为ICMP时,协议号为1,TCP协议号为6,UDP的协议号为17。

  • 16位头部校验和: 使用CRC进行校验, 用于检验IP头部(不同于tcp/udp还要检测数据)是否完整或被修改,若校验失败则丢弃数据包。

  • 32位源地址: 标识发送者IP地址,占用32bit

  • 32位目标地址:标识接收者IP地址,占用32bit

IP地址管理

IP地址划分

IP地址分为两个部分:网络号主机号
网络号: 保证相互连接的两个网段具有不同的标识;
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

  • 不同的子网其实就是把网络号相同的主机放到一起;
  • 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复;

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同。

传统五类划分
过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类:
网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第3张图片

  • A类:
    高1位固定为0,后面7位为网络号,24位为主机号
    00000000 00000000 00000000 00000000 =》 0.0.0.0
    01111111 11111111 11111111 11111111 =》 127.255.255.255
    网络号的范围: 0~127 ;意味着总共划分出来128个子网
    A类表示的ip地址范围0.0.0.0 ~ 127.255.255.255
    每一个A类的子网,能够拥有品大2^ 24次方个ip地址

  • B类
    高两位固定为10,后面14位表示网络号,16位表示主机号
    网络号范围: 10 000000 00000000 ~ 1011111 11111111 =》128.0 ~ 191.255
    主机号范围: 0~ 2^16
    ip地址范围128.0.0.0 ~ 191.255.255.255

  • C类
    高三位固定为110,后面21位表示网络号, 8位表示主机号
    网络号范围11000000 00000000 00000000 ~ 11011111 11111111 111111111
    192.0.0 ~ 223.255.255
    主机号范围: 0~2^8,也就是意味着每一个C类 子网当中有256个ip地址
    ip地址范围: 192.0.0.0 ~ 223.255.255.255

  • D类
    高4位固定,28位多播组号
    ip地址范围: 224.0.0.0到239.255.255.255

  • E类
    高5位固定, 27位留用
    ip地址范围: 240.0.0.0到247.255.255.255

但是随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址;
例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了(就算是申请最小的C类地址,也有256个主机,但是对于一些小工作室或者公司来说,也可能有多余的浪费)。

新的划分方案CIDR(Classless Interdomain Routing)
针对这种情况提出了新的划分方案, 称为CIDR:

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾(或者说由一段连续的1组成);
  • 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
  • 注意网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

子网掩码的意义:
1.最大主机号=子网掩码取反
2.网络号= 子网掩码& IP地址
举例 :

IP地址: 172.16.99.129
netmask : 255.255.255.0    
两者按位与&操作
得到网络号: 172.16.99.0 则最大主机号 : 255 (0~255 )
IP地址范围为:172.16.99.0~172.16.99.255 

可见,IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
IP地址和子网掩码还有一种更简洁的表示方法,例如 172.16.99.129/24,表示IP地址为 172.16.99.129, 子网掩码的高24位是1,也就是255.255.255.0。

这样划分便解决了刚才的分配问题,即提高了利用率, 减少了浪费

特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
  • 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1(自己在本机做通信实验时,就是在本机的协议栈上封装和分用信息的)
  • 0.0.0.0用于在服务器程序中,表示服务器机器上所有网卡的ip地址
  • 255.255.255.255 : UDP的广播地址,应用于DHCP动态主机分配协议: 谁上网给谁分配IP

IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数, 那么一共只有 2的32次方 个IP地址, 大概是42亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.
这意味着, 一共只有43亿台主机能接入网络么?
实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址.
而CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:

  • 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
  • NAT技术;
  • IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及;

私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址。
网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第4张图片
三个私网网段

  • 10.* . * . * , 前8位是网络号,共16,777,216个地址
    IP地址范围: 10.0.0.0 ~ 10.255.255.255

  • 172.16.* .* ~ 172.31. * .* , 前12位是网络号,共1,048,576个地址
    IP地址范围: 172.16.0.0 ~ 172.31.255.255

  • 192.168.* . * ,前16位是网络号,共65,536个地址
    IP地址范围:192.168.0.0 ~ 192.168.255.255

包含在这些范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);

但是可能有疑惑?
本身ip地址都不够用了,还要划分出三个段的不让访问互联网的IP地址。
当然,这样规定是有别的本意:
1.让这三个段的ip地址可以进行复用;不管是个人还是企业还是国家,都可以不用申请就直接使用;
2.这些ip可以组建子网,而我们将这种子网称之为私网。对应的互联网称之为公网;
3.这个私网当中的ip之间,不影响网络通信,换句话说,私网的当中的机器之间可以互相通信,但是不能访问互联网;
4.要是想要访问互联网就要由路由器的NAT技术转换成可以上网的公网IP才行.

NAT(Network Address Translation网络地址转换技术)

NAT技术背景

  • 一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).路由器LAN口连接的主机, 都从属于当前这个路由器的子网中;
  • 不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间(即不同的的两个子网之间)的IP地址就可以重复了;
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级(套娃),而最外层的运营商路由器, WAN口IP就是一个公网IP了;
  • 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP,便可以访问互联网了。 这种技术称为NAT(Network Address Translation,网络地址转换).
  • 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

NAT技术
NAT技术是当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;
NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;
网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第5张图片
具体的例子:
网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第6张图片
注意:

  1. 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
    当 172.16.99.129第一次向 14.215.177.38发送数据时就会生成表中的映射关系;
  2. 替换的IP地址是路由动态分配的(DHCP协议)

NAT技术的特点:
1.网络被划分为私网和公网, NAT网关设置到私网到公网的路由出口位置,双方的流量都是需要经过NAT网关的;
2.网络访问只能从私网一端发起,公网是无法访问到私网的主机的(没有映射表的)
3.NAT网关对于请求而言,是替换源IP地址,对于应答而言,是替换目的IP地址
4.NAT网关对于双方都是透明的,双方在网络传输过程当中是无感知的;
5.NAT网关为了实现双向翻译功能,需要在NAT服务器当中维护一张映射表,把替换的信息一一记录下来 ;

NAPT技术(NAT重载)

如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候就用NAPT解决这个问题了. 使用IP+port来建立这个关联关系(端口映射).

NAPT技术不仅实现了多对一,且相较于NAT技术的一对一,减少了公网IP的映射数量,解决的IP地址不够用的问题。理论上一个公网ip便可以可以替换2^ 16次方65536个私网IP.

网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第7张图片
这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接(第一次发送数据)时, 就会生成这个表项; 在断开连接后, 就会删除这个表项。

总结:
1.私网和NAT可以是多对一的关系,通过端口来进行标识
2、NAPT服务器当中的公网ip,最大可以映射2^16 (端口)
3. NAPT也是一个动态NAT,可以维护多个公网ip
4.NAPT很好的解决了ip地址不够用的问题; 即NAT协议和DHCP协议成功挽救了快要枯竭的ipv4版本的ip地址

NAT技术的缺陷
由于NAT依赖这个转换表, 所以有诸多限制:

  • 无法从NAT外部向内部服务器建立连接;
  • 转换表的生成和销毁都需要额外开销;
  • 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;

NAT和代理服务器()

  • 路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.
  • 代理服务器看起来和NAT设备有一点像,客户端向代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端.

那么NAT和代理服务器的区别有哪些呢?

  • 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行, 另外像迅游这样的加速器, 也是使用代理服务器.
  • 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
  • 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.
  • 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.

代理服务器是一种应用比较广的技术.

  • : 广域网中的代理(常常说的梯子).
  • 负载均衡: 局域网中的代理.

路由选择

互联网是由许多个网络连接所形成的大型网络。如果要在互联网中传送IP信息包,除了确保网络上每个设备都有一个唯一的IP地址之外,网络之间还必须有传送的机制,才能将IP信息包通过一个个的网络传送到目的地。
首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网(局域网技术)会将该数据包转发给本子网的网关进行路由。网关(路由器)是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。而完成这个路由协议的物理设备就是路由器,路由器扮演着交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。此种传送机制称为IP路由(路由选择)。

这里是根据网络当中的数据存在的五元组信息(源IP地址,目的IP地址,源端口,目的端口,协议)中的目的IP地址来进行选择的,当IP数据包, 到达路由器时, 路由器会先查看目的IP;路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
反复套娃, 直到到达目标IP地址;

网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第8张图片
那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表;

  • 路由表可以使用route命令查看
    网络基础(五)网络层IP协议、NAPT端口映射及路由选择_第9张图片
    – 这台主机有两个网络接口,一个网络接口连到172.16.99.0/24网络,另一个网络接口连到192.168.122.0/24网络;
    – 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址(),没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;
  • 如果目的IP命中了路由表, 就直接转发即可;
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

举两个例子来了解路由选择
转发过程例1:
如果要发送的数据包的目的地址是192.16.122.3跟第一行的子网掩码做与运算得到192.16.122.0,与第一行的目的网络地址不符,接着再跟第二行的子网掩码做与运算得 到192.16.122.0,正是第二行的目的网络地址,因此从对应的eth1接口发送出去;由于192.16.122.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。

转发过程例2:
如果要发送的数据包的目的地址是202.10.1.2依次和路由表前几项进行对比, 发现都不匹配;就按缺省路由条目(default), 从eth0接口发出去, 发往gateway路由器;由gateway路由器根据它的路由表决定下一跳地址,要是它的路由表里也没有,那就继续发往缺省路由,如此往复,在每一个路由设备上进行比对,之后进行传输,直到TTL耗尽被丢弃,或者递达到目标主机;

所以

网络层的主要工作是定义网络地址、区分网段、子网内MAC寻址(ARP协议)、对于不同子网的数据包进行路由。
且注意:
1.网络层的ip协议不负责数据有序或者可靠到达对端(这些都是依靠传输层)!
2.网络层的ip协议只负责数据的源端和目的端(五元组中的原地址和目的地址)!

你可能感兴趣的:(计算机网络)