内网ip实际上是局域网内成员使用的ip地址,比如学校内部即是一个局域网,我们的电脑ipconfig查到的ip即是内网ip, 在同一局域网中内网ip是唯一标识,所有内网ip最终通过某网关与互联网(外网)通信。
ipconfig出现的ip地址在有些情况不一定是内网ip比如:拨号上网时。
外网ip是指上述网关的ip地址,在整个互联网中是独一无二的。之所以有内网ip的存在,即是因为外网ip不够用而产生的。
内网和外网转换采用NAT技术,抄袭走一波:网络地址转NAT映射
我们想做一个服务器,让外网客户能够访问到,该怎么办?我最近在做简单的外网可访问的服务应用demo,走的弯路不少,有这几种方式可以实现:
电信网是面向连接的通信方式,在数据传输之前建立好一条虚拟电路,主机间数据都是通过该虚拟电路来传输,数据的准确性由网络来保证。
因特网是面向无连接的,数据以IP数据报的形式传输,每个IP数据报通过路由方式传输,传输的准确性由主机的TCP层来保证。
对应通信行业和互联网行业。
使用的协议完全不同,电信网底层使用map、cap等协议,应用层使用sip协议;因特网底层使用tcp、udp等协议,应用层使用http等协议。
IP地址的编址方式按时间经历过以下3种:分类IP地址(基本编址方式)、划分子网 (前一种的改进)、构成超网(较新无分类编址)。
其中net-id是网络号,host-id是主机号。
有以下几点需要注意:(1)IP地址管理机构分配网络号,得到网络号的单位自行分配主机号; (2)主机同时连接到N个网络上时主机就会有N个IP地址,所以路由器就会有两个以上IP地址; (3)通过转发器(物理层)或网桥(数据链路层)连接到一起的局域网仍是一个网络。
网络层数据在传输过程中IP数据报中源地址和目的地址一直未改变,但数据链路层数据在传输中MAC帧中源地址和目的地址是变化的。
每个主机和路由器都有ARP高速缓存,缓存里放着本局域网内的主机IP地址和硬件地址映射表。这个表与数据链路层的转发表都是有学习能力的。
其中版本指的就是IP协议版本(IPV4、IPV6);生存时间指每经过一个路由器就将其值减1,直到为0。片偏移指每个IP数据报片在原IP数据报中的相对位置。
数据链路层知识:网桥的转发表(数据链路)、每个主机的ARP缓存里的IP->硬件地址的映射表(同一局域网内),路由器里的路由表(网络间)现在来了解一下:路由表中内容:<目的网络地址;下一跳地址>。下一跳地址应该怎么选择见下文“划分子网”。
路由表的动态更新应该和转发表的动态更新方法是一致的。
IP ::= {<网络号>,<子网号>,<主机号>}
网络号是全世界唯一的。
网络地址:一个网络的网络号和子网号保留,主机号置0,即是这个网络的网络地址。
子网掩码:一个网络网络号和描述子网的那几位为1,主机号为0即是这个网络的子网掩码。当收到IP数据报后将IP数据报目的地址与子网掩码进行“与”运算,即是对应子网的网络地址,比如IP:145.13.3.10,子网掩码:255.255.255.0,它的网络地址就为:145.13.3.0。子网掩码 >= 网络地址。
路由表中内容:<目的网络地址;子网掩码;下一跳地址>,到达目的地址可能要通过下一跳地址进行多次的间接交互。这个下一跳地址对应的是网络号而不是网络地址。从网络号还可以分别A、B、C三类网。
路由过程:
子网号是在IP数据报中的说明了数据发送给第几个子网;子网掩码是在路由表中描述网络的参数的。
CIDR消除了传统A、B、C类地址以及子网划分的概念。CIDR的谐音sider。CIDR消除了A、B、C类网络和划分子网的概念,IP地址构成如此:{<网络前缀>,<子网号>}。CIDR使用斜线记法:IP地址后加'/',然后写上网络前缀的个数,比如:128.14.231.7/20,就是前20位是网络前缀,后12位是主机号。网络前缀相同的IP组成一个“CIDR地址块”。
CIDR比较分类IP要灵活很多,分类IP事实上是存在浪费IP地址的现象的,比如得到了一个A类网络号后后面的主机号很多分配不完。而CIDR就几乎可以避免这种现象。
路由表内容:<网络前缀 ; 下一跳地址>,匹配网络前缀可能会有多个匹配成功,选择其中最长网络前缀对应的下一跳地址。
在路由表中匹最长网络前缀不可能一一进行比对,这样很浪费时间而且很天真,匹配时我们采用二叉树来找到最长前缀,简介如下图:
这个树位于路由器中,图中方框是叶节点代表唯一前缀(最长前缀),每个叶节点包含它本身的网络前缀和子网掩码,搜索到某叶节点就将目的地址 && 子网掩码,若相等就跳到该节点对应的下一跳,否则继续向下走。
ICMP报文是IP数据报途经某路由器或某主机产生异常,该路由将异常情况返回给源点的。
有两种ICMP报文:ICMP差错报告报文、ICMP询问报文。ICMP格式如下:前4个字节是固定的,后4个字节取决前边的“类型”。差错报文的类型有5种:
(1)终点不可达(类型值3):路由器或主机不能交互数据报是向源点发送终点不可达报文。
(2)源点抑制(类型值4):路由器或主机由于拥塞丢弃报文,向源点发送源点抑制报文使其慢点发送。
(3)时间超过(类型值11):路由器或主机收到生存时间为0的报文会给源点发送时间超过报文,并将收到的报文丢掉。
(4)参数问题(类型值12):路由器或主机收到IP数据报首部参数有不正确时向源点发送参数问题报文。
(5)改变路由(类型值5):让主机知道更好路由的地址。 ICMP报文格式如图下所示:
ICMP报文图
ICMP差错报文格式与上图保持一致,其中数据部分是由接收到的IP数据报首部8字节和之后的8字节一共16字节数据组成。
ICMP询问报文:(1)回送请求和回答报文:主机或路由向目的主机发出请求,目的主机必须回送回答报文,用来检测目的站是否可达和相关信息。(2)时间戮请求和回答报文:请求某主机和路由回答当前日期和时间,从1900年1月1日算起。
实例1:电脑中的PING,发送4个ICMP回送请求报文,可以得到4个回送报文算是ping通了,可以从发出和接收的报文时间戮之差得到往返时间。
实例2:UNIX中traceroute应用程序 ,跟踪IP数据报分组从原点到终点的路径,这是利用ICMP差错报文。先发TTL设为1,到达第一个路由后TTL-1=0了,就给源点回时间超过差错报文,从而得到第一个路由IP及时间差,源点在发送TTL为2的报文,得到第二个路由IP,然后以此类推得到整个路由过程的所有IP。
因特网路由选择协议是动态和分布式的。由于网络太庞大和隐私性两个原因,因特网采用分层次的路由选择协议,这样一来因特网那个就将互联网划分为许多较小的自治系统,称为AS。
AS:在单一的技术管理下的一组路由器,AS内部使用什么协议没有限制,但是每个AS之间使用的路由选择协议是单一、一致的。AS内部网关协议(域内路由选择协议)IGP,例如RIP、OSPF;AS外部网关协议(域外
路由选择协议)EGP,例如BGP-4。下面介绍IGP中的RIP协议。
RIP协议是分布式、基于距离向量的选择协议。距离的定义:路由到直接连接的网络的距离为1,这样算来,路由到非直接的网络的距离为经过的路由器数加一。
根据RIP协议选择的路径永远是最短的,且一条路径最多15个路由,也就是距离最大16,这表明这种协议只适合小型互联网。一个AS内部若使用RIP协议则两网络之间只会有一条路由。
RIP协议的三个要点:(1)只和相邻路由器交换信息。(2)交换信息为自己所知道的全部信息。(3)每个固定时间交换一次信息。
一个AS内的每个路由器经过多次RIP协议规定的信息交换后就知道整个AS内部任意网络的最短距离和下一跳地址。收到相邻路由器(其地址为 X)的RIP 报文的处理方式:
(1) 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
(2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若项目中的目的网络不在路由表中,则把该项目加到路由表中。
否则
若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。
否则
若收到项目中的距离小于路由表中的距离,则进行更新
否则,什么也不做。
(3) 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(距离为16表示不可达)。
(4) 返回。
RIP协议也是有缺点的:正常消息更新很快,但是一旦网络出现一点故障就要花很长时间才能让整个网络知道,比如下图网1有了故障后,R1和R2会经过多次的交互信息才能使得双方多知道故障发生。
另一种IGP,OSPF协议:
链路状态:本路由器都和哪些路由器相邻,及该链路的“度量”。
OSPF的三要点:(1)路由器会使用洪泛法向网络中的所有路由器发送信息。(2)消息内容为本路由器的链路状态。(3)只有该链路状态发生改变时发送信息。
OSPF协议又将一个AS划分为多个范围,成为区域,区域不能太大不超过200个路由器,划分区域后洪泛法发送信息就只会在一个区域内发送,区域内路由器只知道区域内网络的全部信息。区域的结构图如下图:
OSPF协议不使用UDP直接使用IP数据报传输,且构成的数据报很短,这样就不需分组传输。OSPF没有坏消息传的慢的缺点。