网络层-外网访问服务器

内网和外网

         内网ip实际上是局域网内成员使用的ip地址,比如学校内部即是一个局域网,我们的电脑ipconfig查到的ip即是内网ip, 在同一局域网中内网ip是唯一标识,所有内网ip最终通过某网关与互联网(外网)通信。

         ipconfig出现的ip地址在有些情况不一定是内网ip比如:拨号上网时。

         外网ip是指上述网关的ip地址,在整个互联网中是独一无二的。之所以有内网ip的存在,即是因为外网ip不够用而产生的。

         内网和外网转换采用NAT技术,抄袭走一波:网络地址转NAT映射

         我们想做一个服务器,让外网客户能够访问到,该怎么办?我最近在做简单的外网可访问的服务应用demo,走的弯路不少,有这几种方式可以实现:

  • NAT映射:将内网ip:port映射到网关的ip:port上,使得外网能够通过网关访问到我们的主机。而网上能查到的,通过设置路由器实现NAT映射,是不靠谱的,因为我们所映射的网关也不过在局域网内,它也没法直接和外网通信,它甚至都还要经过多个网关才能连接上外网。所以自己NAT映射是不可行的。
  • 花生壳:身份证实名认证,花点钱就能够使用限量的固定外网ip:port,如果是学生的玩耍的话,这个比较经济。
  • 购买服务器:阿里云、amazon等,ssh操作它。如果选择amazon,想让国内用户访问还需要一台香港服务器作为桥梁。扯远一点,如果服务器是公司级的,那么还考虑到DOS攻击问题,那么cdn就是不错的选择。再扯远一点,公司级的内网建设用open比较合适,然后在利用open做文章,建立一个超秀的公司内网,比如:连上路由器就能访问内网。指出了一条路,大家共同摸索。

电信网和因特网

介绍

        电信网是面向连接的通信方式,在数据传输之前建立好一条虚拟电路,主机间数据都是通过该虚拟电路来传输,数据的准确性由网络来保证。

         因特网是面向无连接的,数据以IP数据报的形式传输,每个IP数据报通过路由方式传输,传输的准确性由主机的TCP层来保证。

区别

        对应通信行业和互联网行业。

        使用的协议完全不同,电信网底层使用map、cap等协议,应用层使用sip协议;因特网底层使用tcp、udp等协议,应用层使用http等协议。

网络层

        IP地址的编址方式按时间经历过以下3种:分类IP地址(基本编址方式)、划分子网 (前一种的改进)、构成超网(较新无分类编址)。

分类IP地址(二级IP地址)

介绍

        其中net-id是网络号,host-id是主机号。

                              网络层-外网访问服务器_第1张图片

         有以下几点需要注意:(1)IP地址管理机构分配网络号,得到网络号的单位自行分配主机号; (2)主机同时连接到N个网络上时主机就会有N个IP地址,所以路由器就会有两个以上IP地址; (3)通过转发器(物理层)或网桥(数据链路层)连接到一起的局域网仍是一个网络。

       网络层数据在传输过程中IP数据报中源地址和目的地址一直未改变,但数据链路层数据在传输中MAC帧中源地址和目的地址是变化的。

IP地址与硬件地址转换-ARP协议

        每个主机和路由器都有ARP高速缓存,缓存里放着本局域网内的主机IP地址和硬件地址映射表。这个表与数据链路层的转发表都是有学习能力的。

IP数据报的格式

其中版本指的就是IP协议版本(IPV4、IPV6);生存时间指每经过一个路由器就将其值减1,直到为0。片偏移指每个IP数据报片在原IP数据报中的相对位置。

                                                                网络层-外网访问服务器_第2张图片

           数据链路层知识:网桥的转发表(数据链路)、每个主机的ARP缓存里的IP->硬件地址的映射表(同一局域网内),路由器里的路由表(网络间)现在来了解一下:路由表中内容:<目的网络地址下一跳地址>。下一跳地址应该怎么选择见下文“划分子网”。

            路由表的动态更新应该和转发表的动态更新方法是一致的。

划分子网(三级IP地址)

介绍

        IP ::= {<网络号>,<子网号>,<主机号>}

        网络号是全世界唯一的。

        网络地址:一个网络的网络号和子网号保留,主机号置0,即是这个网络的网络地址。

        子网掩码:一个网络网络号和描述子网的那几位为1,主机号为0即是这个网络的子网掩码。当收到IP数据报后将IP数据报目的地址与子网掩码进行“与”运算,即是对应子网的网络地址,比如IP:145.13.3.10,子网掩码:255.255.255.0,它的网络地址就为:145.13.3.0。子网掩码 >= 网络地址。

路由

        路由表中内容:<目的网络地址;子网掩码;下一跳地址>,到达目的地址可能要通过下一跳地址进行多次的间接交互。这个下一跳地址对应的是网络号而不是网络地址。从网络号还可以分别A、B、C三类网。

        路由过程:

  1. IP数据报发出后对比ARP高速缓存中的地址映射表,如果在同一局域网中就直接交付,否则继续。   
  2. 主机通过链路层的转发表将数据转发给局域网路由器,根据子网掩码计算,若结果与相应网络地址匹配则直接交互,否则继续。   
  3. 将路由表中的每行<目的网络地址;子网掩码;下一跳地址>,根据子网掩码计算,若结果与该行目的地址匹配则将数据转发给下一跳地址的路由器,也就是传到另一个局域网中,否则继续。
  4. 按照默认路由转发,通常主机默认路由是路由器,路由器默认路由是光猫,光猫默认路由是互联网,若没有默认路由则报告转发组出错。

        子网号是在IP数据报中的说明了数据发送给第几个子网;子网掩码是在路由表中描述网络的参数的。

构造超网(无分类编址CIDR)

          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就几乎可以避免这种现象。

          路由表内容:<网络前缀 ; 下一跳地址>,匹配网络前缀可能会有多个匹配成功,选择其中最长网络前缀对应的下一跳地址。

          在路由表中匹最长网络前缀不可能一一进行比对,这样很浪费时间而且很天真,匹配时我们采用二叉树来找到最长前缀,简介如下图:

                                                        网络层-外网访问服务器_第3张图片

     这个树位于路由器中,图中方框是叶节点代表唯一前缀(最长前缀),每个叶节点包含它本身的网络前缀和子网掩码,搜索到某叶节点就将目的地址 && 子网掩码,若相等就跳到该节点对应的下一跳,否则继续向下走。

ICMP协议

          ICMP报文是IP数据报途经某路由器或某主机产生异常,该路由将异常情况返回给源点的。

        有两种ICMP报文:ICMP差错报告报文、ICMP询问报文。ICMP格式如下:前4个字节是固定的,后4个字节取决前边的“类型”。差错报文的类型有5种:

(1)终点不可达(类型值3):路由器或主机不能交互数据报是向源点发送终点不可达报文。 

(2)源点抑制(类型值4):路由器或主机由于拥塞丢弃报文,向源点发送源点抑制报文使其慢点发送。 

(3)时间超过(类型值11):路由器或主机收到生存时间为0的报文会给源点发送时间超过报文,并将收到的报文丢掉。 

(4)参数问题(类型值12):路由器或主机收到IP数据报首部参数有不正确时向源点发送参数问题报文。 

(5)改变路由(类型值5):让主机知道更好路由的地址。 ICMP报文格式如图下所示:

                                                    网络层-外网访问服务器_第4张图片

                                                                                                                      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、OSPFAS外部网关协议(域外

          路由选择协议)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会经过多次的交互信息才能使得双方多知道故障发生

                                               网络层-外网访问服务器_第5张图片

        另一种IGP,OSPF协议:

        链路状态:本路由器都和哪些路由器相邻,及该链路的“度量”。

        OSPF的三要点:(1)路由器会使用洪泛法向网络中的所有路由器发送信息。(2)消息内容为本路由器的链路状态。(3)只有该链路状态发生改变时发送信息。         

        OSPF协议又将一个AS划分为多个范围,成为区域,区域不能太大不超过200个路由器,划分区域后洪泛法发送信息就只会在一个区域内发送,区域内路由器只知道区域内网络的全部信息。区域的结构图如下图:

           网络层-外网访问服务器_第6张图片   

        OSPF协议不使用UDP直接使用IP数据报传输,且构成的数据报很短,这样就不需分组传输。OSPF没有坏消息传的慢的缺点。

           

 

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