网络层
4.1 网络层概述
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
网络层需要解决的问题:
- 网络层向运输层提供怎样的服务(可靠传输还是不可靠创数)
- 网络层寻址问题
- 路由选择问题
4.2 网络层提供的两种服务
面向连接的虚电路服务
虚电路服务就像打电话一样,先建立连接,预留出双方通信所需的一切网络资源,然后双方就沿着已建立的虚电路发送分组,这样分组的首部就不需填写完成的目的地址,只需要填写这条虚电路的编号。
但是这种服务不适用于大型的网络,比如在中国的春运期间,每个人都有不同的回家方式,中间也会遇到各种状况,所以回家的路径就很不稳定,不可能每个人都能够买到直达家乡的火车票,中途也会更换交通工具,所以这种服务得不到很大的应用。
无连接的数据报服务
就像刚才提到的春运一样,每个人自己选择回家的路径,中途可能会更换交通方式或者路径。
但这样可能带来数据报的误码、丢失、重复和失序的问题,但仍然是尽最大努力进行交付。
4.3 IP地址
IP地址基础知识
在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则无法实现正常的通信。
IP 地址(IPv4 地址)由 32
位正整数来表示,IP 地址在计算机是以二进制的方式处理的。
而人类为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4
组,每组以「.
」隔开,再将每组转换成十进制。
实际上,IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址。
因此,让 43 亿台计算机全部连网其实是不可能的,更何况 IP 地址是由「网络标识」和「主机标识」这两个部分组成的,所以实际能够连接到网络的计算机个数更是少了很多。
IP地址的分类
互联网诞生之初,IP 地址显得很充裕,于是计算机科学家们设计了分类地址。
IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。
只有A、B、C类地址课分配给网络中的主机或路由器。
A类地址
A类地址中有一个环回测试地址,不指派,网络号全0也不指派。
B类地址
C类地址
D、E类地址
而 D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。
多播地址用来做什么?
多播用于将包发送给特定组内的所有主机。
还是举班级的栗子,老师说:“最后一排的同学,上来做这道数学题。”,老师指定的是最后一排的同学,也就是多播的含义了。
由于广播无法穿透路由,若想给其他网段发送同样的包,就可以使用可以穿透路由的多播。
A、B、C 分类地址最大主机个数是如何计算的呢?
最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:2^8 - 2 = 256
为什么要减2?
在IP地址中,有两个IP地址是特殊的:
- 主机号全为0指定某个网络
- 主机号全为1指定某个网络下的所有主机,用于广播
广播地址用来做什么?
用于在同一个链路中相互连接的主机之间发送数据包。
- 在本网络内广播的叫做本地广播
- 在不同网络之间的广播叫做直接广播
IP 分类的优点
不管是路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。
IP分类的缺点
- 同一网络下没有地址层次,比如一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能,所以这就缺少地址的灵活性。
不能很好的与现实网络匹配。
- C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。
- 而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。
划分子网的IPv4地址
问题1.为什么要划分子网?
问题2:怎么划分子网?
带着问题找答案-->
A类地址由一千多玩个,B类地址有六万多个,而C类地址只有254个,不同类别地址含有的地址数差距太多,所以导致选C类太少,选A类太多,多了浪费,少了不够用,还有分配的一个地址只能在一个单位的同一个网络使用,其他单位的网络不能使用,所以多了浪费,少了又只能换大的,而大的又太大。
如果单位新增加了很多计算机,就需要将原来的网络划分成多个独立的网络,如果为其他网络申请更多的地址,则会带来很多弊端:
那么怎么解决这个问题呢:
可以从IP地址的主机号中借用一些位来区分子网号,就可以利用原有网络中剩余的大量IP地址
新问题:如果未在图中标记子网号部分,那么我们和计算机又如何知道分类地址中主机号有多少比特是被用作子网号了呢
答案:子网掩码
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号,IP地址从两级结构的分类IP地址变成了三级结构的划分子网的IP地址
- 子网掩码使用连续的比特
1
来对应网络号和子网号 - 子网掩码使用连续的比特
0
来对应主机号 - 将划分子网的
IPv4
地址与其相应的子网掩码
进行逻辑AND运算,就可得到IPv4地址所在子网的网络地址
练习:
默认的子网掩码
课后总结
无分类地址CIDR
问题1:为什么要有无分类地址
问题2:什么是无分类地址
带着问题去学习-->
IP地址还是不够用,为了能过够解决IP地址枯竭的问题,而诞生了无分类分址,听名称就可以知道把原来的A类、B类、C类全归结到一类,原先每一类的可用的地址数是固定的,存在着很大的资源浪费,无分类之后,我们就可以自己想怎么分就怎么分地址。
知识延申:上一节的划分子网虽然在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其网络空间太大 而地址空间太小导致并没有充分利用资源,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
概念
练习
注意的是
- 主机号全为0的是本主机的单个网络地址,也是地址,全为1是广播地址,也是地址,看清问的是地址数目还是主机数数目
- 地址掩码就是前缀数全是1,后全是0
路由耦合
一个路由器如果要把自己所在网络内的所有主机ip地址都发给别的路由器,但是路由器转发表保存不了这么多,而且效率更低,可以找到这个路由器所有的主机的共同前缀来存储在转发表内
- 网络前缀越长,地址快越小,路由越具体,就对哪个方向转发就更清楚
- 网络前缀越短的地址块所包含的地址数就越多
练习
解题步骤
- 通过子网地址求出网络前缀
- 计算出总共有多少个主机地址
- 目的地址是广播地址还是主机地址,如果是广播地址,答案就是所有的主机地址数,如果不是就是某个主机地址
练习:求路由聚合后的网络地址
解题步骤
找共同前缀
- 看第几个字节数不同就从这个字节开始找,转换成二进制形式
- 共同前缀有多少位,加上
/前缀数
- 剩余比特全部取0,然后写成点分十进制形式
课后小结
IPv4地址的应用规划
问题1:定长子网掩码和变长子网掩码分别是什么
问题2:它俩有什么区别
问题3:用来解决什么问题
定长的划分子网
- 使用同一个子网掩码来划分子网
- 子网划分方式不灵活,有几个子网就只能有2^n(大于等于子网个数)个子网个数,就需要从主机位上划分出n个比特位用来划分子网,且每一个子网的主机数量都相同
- 造成了不小的资源浪费
变长的子网掩码
- 使用不同的子网掩码来划分子网
- 划分方式比较灵活,可以按需分配
- 可以减少对资源的浪费
分配原则:每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点,建议先给大的子块分配。
补充
五个子网的划分的网络地址,只写出了最后一个字节
N1
:000/00000N2
:0010/0000N3
:0011/0000N4
:0100/0000N5
:010100/00
个人思考:
定长和变长子网掩码就和前面所学过的IPv4地址划分是一样的,由于A类B类划分很浪费资源,出现了无分类编址,这个也是同理。
还有一个问题,就是定长的子网掩码方式可能会导致不够用,如果申请到的是C类网络,那么如果有很多个子网,而且有些子网中有很多主机,那么就回导致一个子网的主机地址不够用的问题,而其他地址有剩余却不能用,所以还是使用变长的子网掩码的利用率最大
总结
4.4 IP数据报的发送和转发过程
问题1:IP数据报是如何发送的
问题2:IP数据报是如何转发的
- 直接交付:同属于一个网络之间的主机发送数据
- 间接交付:两个网络中的主机发送数据
源主机如何知道目的主机是否与自己在同一个网络中?
首先我们知道每个网络的网络地址是不同,所以我们可以根据网络地址的不同判断是都同属于一个网络,如何得到源主机和目的主机的网络地址呢?我们可以使用地址掩码与主机地址进行AND操作。
一个网络中的主机为了和其他网络种的主机进行通信,必须要经过一个路由器进行转发,那么就需要指定一个默认的路由器进行转发,称为默认网关
路由器转发
从路由表中寻找匹配过程:
- 讲目的地址与地址掩码相与,如果得到的网络地址和其网络地址相同,直接去下一跳
- 如果不同,则依次往下寻找
- 如果找不到,则丢弃该IP数据报并通告源主机。
路由器隔离广播域
如果一个路由器收到了来自本网络的广播信号,则不会进行转发
在巨大的互联网中如果每个路由器都进行广播转发,那么将会发送广播风暴
如果路由器收到本网络向其他网络的广播信号,也不会转发。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xe3QNIRH-1662651469675)(image-20220403215727364.png)]
路由器只能确保分组有没有出错,但不能确保会不会丢失,分组时单个转发的,丢失了路由器没办法知道啊
主机1的默认官网应该是连接Internet的路由器,但是了DHCP服务器
主机发送IP数据包
- 先判断目的主机是否与自己在同一个网络:
- 若在同一个网络,则属于直接交付
- 若不在同一个网络,则属于间接交付,传输给主机所在的默认网关
路由器转发IP数据包
检查IP数据首部是否错误
- 若错误,则直接丢弃数据包并通知源主机
- 若没有错误,则进行抓发
根据IP数据包的目的地址在路由表中查找匹配的条目
- 若找到,则转发给下一条
- 若找不到,则丢弃该IP数据包并通告源主机
4.5 静态路由配置可能产生的路由环路问题
- 静态路由是什么
- 路由环路是什么
- 二者的联系
静态路由配置
静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表
- 这种人工配置方式简单、开销小,但不能及时适应网络状态的变化。因为是人工的吗,操作只能需要人工来执行
- 一般只在小规模网络中采用。->大规模网络要人一个个配置的话那要耗费多长时间啊
使用静态路由配置可能残生的路由环路错误:
- 配置错误
- 聚合了不存在的网络
- 网络故障
如何配置静态路由
如果是某个网络与该路由器直连,那就是直连网络,可以直接得到
如果不是,需要人工配置路由器,比如说R1要传到蓝色网络
默认路由
路由环路:如果要连到因特网中的某个网络,要把因特网中所有的网络都配置到路由表中吗?当然不可能,所以对于因特网中的所有网络的目的网络,可以使用默认路由:0.0.0.0
如果在路由表中找不到想要的目的网络,就转发到默认路由,让默认路由去找
特定主机路由
为了网络管理人员对网络的管理和测试,测试该主机能不能接收到信息
静态路由配置导致的路由环路问题
- 配置错误
因为配置错误导致A->B->A的环路问题 - 聚合了不存在的网络
路由聚合,但聚合后有些不存在的网络也会往该路由器转发,该路由器收到后在路由表中找不到该网络,所以发到默认路由,但默认路由和起始路由相同,所以形成环路
为了解决该问题,把不存在的路由加入到路由表中,称为黑洞路由,直接不转发该路由
- 网络故障导致路由环路
如果某个网络故障,路由表会删去该路由,导致其他路由想要转发到该网络而在路由表中找不到目的路由,只能转发到默认路由,为了解决该问题,加上黑洞路由
4.6 路由选择协议
概述
静态和动态相比较
路由选择协议
路由器基本结构
路由器可以分为路由选择部分和分组转发部分。
转发表是由路由选择协议得来的。二者分工合作,相互协作。
路由信息协议RIP的基本工作原理
RIP使用跳数作为度量来衡量到达目的网络的距离。
- 路由器到智联网络的距离定义为1
- 路由器到非直连网络的距离定义为所经过的路由器数加1
- 允许一条路径最多只能包含15个路由器。距离等于16时相当于不可达。所以RIP只适用于小型互联网。
RIP认为好的路由就是距离最短的路由,也就是所通过的路由器数量最少的路由。
如果由多条距离相等的路由,可以进行等价负载均衡。
RIP的基本工作流程
- 和谁交换信息:仅和相邻路由器交换信息
- 交换什么信息: 自己的路由表
- 何时交换信息:周期性交换
距离向量算法
- 对相邻地址为X的路由器发来的RIP报文,先吧所有下一条的字段都改为X,距离的值都加1.
将修改后的RIP报文中的每一个项目和当前路由器中的路由表进行比较:
如果相同网络
- 相同下一条:直接更新距离字段。
- 不同下一条:如果距离更小就更新,否则不更新
- 不同网络,直接加入到路由表中
- 若三分钟之后还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为16(表示不可达)
RIP存在“坏消息传得慢”的问题
开放最短路径优先OSPF的基本工作原理
最短路径优先是因为用了Dijkstra提出的最短路径算法SPF
OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。不会产生路由回路。
OSPF不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相连,以及相应的链路的代价。(代价可以用来表示费用、距离、时延、带块等等,这些由网络管理人员来决定)
OSPF工作流程
- OSPF相邻路由器之间通过交互问候分组,建立和维护邻居关系
使用OSPF的每个路由器都会产生链路状态通告LSA,LSA包含以下内容:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
- LSA被封装在链路状态更新分组LSU中,采用洪泛法发送
- 使用OSPF的每个路由器都有一个链路状态数据库LSDB。用于存储LSA
- 通过个路由器洪泛发送封装由自己LSA的LSU分组,个路由器的LSDB最终将达到一致。
- 个路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短距离,即构建各自的路由表。
总体流程
OSPF由以下五种分组类型:
- 问候分组:用来发县和维护邻居路由器的可达性
- 数据库描述分组:向邻居路由器给出自己的链路状态数据库信息
- 链路状态请求:向邻居路由器请求发送某些链路状态项目的详细信息
- 链路状态更新:路由器使用这种分组将其链路进行洪泛发送,即用洪泛法对全网更新链路状态
- 链路确认分组:对链路状态更新分组的确认
洪泛法这样发送的话,每个路由器都要向系统内所有网络都发送一遍自己的链路状态信息,会导致有大量的数据包被发送在网络中,会造成网络阻塞,降低效率。为了解决这个问题,我们可以指定几个路由器来做组长的角色,其他组员都向组长发送自己的信息,这样组长把这些信息整合之后在发给每一个组员,这样就能缓解网络负荷。
如果一个网络很大的话,这样发送负担依然很重。
为了解决这一问题,可以将网络划分为若干个更小的范围,叫做区域。
这样像行政规划一样:省--市--县...。
主干区域就像省会一样。
外部网关协议BGP的基本工作原理
在不同自治系统内,度量路由的代价(距离、带宽、费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的。
自治系统之间的路由选择必须考虑相关策略(政治、经济、安全等)
所以BGP只能力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
在配置BGP的时候,每个自治系统的管理员要选择至少一个路由器作为该自治系统的BGP发言人。
不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接。
- 在此TCP连接上交换BGP报文以建立BGP绘画
- 利用BGP会话交换路由信息
BGP发言人除了允许BGP外,还必须允许自己所在自治系统所使用的内部网关协议。
4.8 网际控制报文协议ICMP
网络包在复杂的网络传输环境里,常常会遇到各种问题。
当遇到问题的时候,总不能死个不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。
ICMP
主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
在 IP
通信中如果某个 IP
包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。
差错报告报文
终点不可达:当路由器或主机不能交付数据报时,就像源点发送终点不可达报文。
源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就像源点发送源点抑制报文,使源点知道应当把数据阿波的发送速率放慢。
时间超过:当路由器收到一个目的地址不是自己的IP地址的时候,会将生存时间的值减1,如果结果不为0,就发出去,否则发送时间超过报文给源点并丢弃该数据报。
如果目的主机在预先规定时间内不能收到一个数据包的全部数据报片式,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
参数问题:当路由器或主机收到IP数据报时,根据其首部检验和字段发现首部在传输过程中出现了误码,就丢弃该数据包, 并向源点发送参数问题报文。
改变路由:路由器发现有更好的路径到达目的地址,就会给源点发送改变路由报文,让源点选择更好的路径。
查询报文
回送请求和回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送回送回答报文。这种询问报文用来测试目的站是否可达及了解其有关状态。
ping —— 查询报文类型的使用
同一个子网下的主机A和主机B,主机A执行ping
主机B后,中间发生了什么?
ping命令执行的时候,源主机首先会构建一个ICMP回送请求信息数据包。
ICMP数据包内包含多个字段,最重要有两个:
- 类型:对于回送请求信息,类型值为8
- 序号:用于区分连续ping的时候发出的多个数据包(每发出一个书包,序号会自动加1)
为了能够计算往返时间RTT,它会在不好闻的数据部分插入发送时间。
然后,由 ICMP 协议将这个数据包连同地址 192.168.1.2 一起交给 IP 层。IP 层将以 192.168.1.2 作为目的地址,本机 IP 地址作为源地址,协议字段设置为 1
表示是 ICMP
协议,再加上一些其他控制信息,构建一个 IP
数据包。
接下来,需要加入 MAC
头。如果在本地 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可以直接使用;如果没有,则需要发送 ARP
协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机B收到这个数据帧后,先检查它的目的MAC地址,并和本机地址对比,如符合就接受,否则丢弃。
接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层,同样,IP层检查完后,将有用的信息提取后交给ICMP协议。
主机B会构建一个ICMP回送相应消息数据包,回送响应数据包的类型字段为 0
,序号为接收到的请求数据包中的序号,然后再发送出去给主机 A。
在规定的时间内,源主机如果没有接收到ICMP的应答包,则说明目的主机不可达,否则表示目的主机可达。
此时,源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。
traceroute —— 差错报文类型的使用
用来测试IP数据包从源主机到达目的主机要经过哪些路由器
如何实现:故意设置特殊的TLL,来追踪去往目的地时沿途经过的路由器。它的原理就是利用 IP 包的生存期限 从 1
开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。
当TLL设置为1时,遇到第一个路由器就会发送超时信息报文给源主机,这样源主机就确定了沿途中遇到的第一个路由器。
解析来TLL设置为2,遇到的第二个路由器就会发送超时信息报文给源主机,这样就确定了第二个路由器,以此反复,直到到达目的主机。
这样的过程,traceroute 就可以拿到了所有的路由器 IP。
发送方是如何直到发出的UDP包是否到达了目的主机呢
traceroute 在发送 UDP
包时,会填入一个不可能的端口号值作为 UDP 目标端口号(大于 3000
)。当目的主机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是「端口不可达」。
所以,当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。
4.9 虚拟专用网VPN与网络地址转换NAT
虚拟专用网VPN
由于IP地址的短缺,一个机构能够申请到的IP地址数往往小于本机构所拥有的主机数。考虑到互联网也不安全,一个机构内也并不需要把所有的主机都接入到外部的互联网中。
在很多情况下,很多主机还是和本机构内的其他主机进行通信(一个大学)。
假定一个机构内部的计算机通信才是采用TCP/IP协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本地机构自行分配其IP地址。这些IP地址只在机构内部有效,不需要向互联网的管理机构申请全球唯一的IP地址。这样就可以大大节约宝贵的IP地址资源。
但是,如果任意选择一些IP地址作为本机构内部使用的本地地址,那么很有可能内部使用的IP地址和互联网中的某个IP地址重合,这样就会出现地址的二义性问题。
问了解决这一问题,互联网管理机构指明了一些专用地址来用于机构的内部通信,而不能用于互联网上的主机通信。换言之,专用地址只能用于本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
加入一个很大的机构遍布世界各地,这些部门要交换信息,要怎么做呢?
- 租用电信公司的通信线路作为机构所用,这种方法虽然简单,但价格昂贵,一般难以承受
- 利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN
使用IP隧道技术实现虚拟专用网
- 路由器收到内部数据包之后,发现其目的网络必须通过互联网才能到达,就把整个的内部数据包进行加密,保证数据包的安全。
- 重新加上数据包的首部,封装成为在互联网上发送的外部数据包,源地址是路由器R1的全球地址,目的地址是R2的全球地址。
- 路由器R2收到数据包后讲其数据部分取出进行解密,恢复出原来的内部数据包,恢复目的地址,交付目的主机。
网络地址转换NAT
前面说的是一个机构的机构专用网进行通信,那如何实现机构内部的主机和互联网上的主机进行通信呢?
网络地址转换技术需要在专用网络连接到互联网的路由器上安装NAT软件,装有NAT软件的路由器叫做NAT路由器。这个路由器至少有一个IP地址。
这样一来,一个网络内部的所有使用本地地址的主机和外部通信时,都可以使用NAT路由器上将其IP地址转换为全球IP地址,才能和互联网连接。
NAT路由器的工作原理
- NAT路由器收到来自专用网的主机A发送互联网上主机B的IP数据包,路由器通过NAT转换表,将原专用网的IP地址转换为全球IP地址发出去,改写到数据包的首部中作为新的源地址,发送出去。
- 主机B收到数据包后,发送应答,B发送的IP数据报的源地址就是自己的IP地址,目的地址就是收到的数据报的源地址。B并不知道A的专用地址,知道了也不会转发专用IP地址。
- NAT路由器收到应答数据报后,还要进行以此转换,将目的地址改为主机A的本地地址。然后发送给A。
由此可见,当NAT路由器有n各全球IP地址时,专用网内最多可以同时有n台主机向互联网发送数据报,这样可以使专用网内较多数量的主机轮流使用NAT路由器有限数量的全球IP地址。
显然,通过NAT路由器的通信必须由专用网内的主机发起。专用网外的主机要发起通信,NAT路由器收到后就不知道发给谁,因为全球IP地址是公共的,使用它的主机随时会变。所以专用网内部的主机不饿能直接充当服务器。
网络地址与端口号切换NAPT
为了能让专用网内的主机都可以同时通信,可以用网络地址和端口号来区分各个主机。而且路由器上可以只有一个全球IP地址。
NAPT将源IP地址和TCP端口都进行切换,现在NAPT把专用网内不同的源IP地址都转换为同样的全球IP地址,只是端口号不同。
由于 NAT/NAPT 都依赖于自己的转换表,因此会有以下的问题:
- 外部无法主动与 NAT 内部服务器建立连接,因为 NAPT 转换表没有转换记录。
- 转换表的生成与转换操作都会产生性能开销。
- 通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。