• 计算机网络学习笔记——网络层


    四、网络层

    网络层只向上提供简单灵活的、无连接的、尽最大努力交付的数据包服务。

    网络在发送分组时,不需要先建立连接。每一个分组(IP数据包)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。也就是说,所发送的分组可能出错、丢失、重复和失序(不按序到达终点),也不保证分组交付的时限。由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器比较简单,且价格低廉,加快了互联网的发展。

    1. 网际协议 IP

    • 虚拟互联网:

      • 将网络互相连接起来要使用一些中间设备

        • 物理层使用的中间设备叫做转发器(repeater)。集线器,用于信号放大。

        • 数据链路层使用的中间设备叫做网桥或桥接器(bridge)。

        • 网络层使用的中间设备叫做路由器(router)。

        • 网络层以上使用的中间设备叫做网关(gateway)。 现在网关指的是接向其他网段计算机的路由器接口地址。

          • 一般把网关地址设置成本网段的第一个地址(再或就是最后一个地址),因为怕和计算机接入网段的地址重复。

      • 许多计算机网络通过一些路由器进行互连,由于参加互连的计算机网络都是用相同的网际协议 IP(Internet Protocol),因此可以把互连以后的计算机网络看成一个虚拟互联网(internet)。意思是:虽然互连起来的各种物理网络差别很大(结构、性能、编址方案、路由选择协议等),但是使用了 IP 协议就可以使这些有差别的网络在网络层看起来好像是一个统一的网络,不再关心那些差异,就好像在一个单个网络上通信一样。

    • 分类的IP地址:

      • (近年来,已经广泛使用无分类IP地址进行路由选择,A、B、C类地址的区别已成为历史)

      • 分类的IP地址就是将 IP地址分为若干个固定类,每一类地址都由两个固定长度的字段组成。第一个字段是网络号(net-id),这样路由器就能根据网络号转发,不用关心到某个计算机怎么走,只关心到某个网段怎么走,类似于电话的区号。第二个字段是主机号(host-id),标志主机(或路由器),一台主机号和他前面的网络号所指明的网络范围必须是唯一的。所以,一个IP地址早整个互联网范围内是唯一的。

      • 【主机部分全为0】表示这个网段的地址,全为1表示这个网段的所有主机(广播地址),所以每个网段的最大主机数为2^n-2(n为主机位数)。127.0.0.1 作为本地软件换回测试(loopback test)本主机的进程之间的通信之用。

      • IP地址由网络号和主机号两部分组成。所以IP地址是一种分等级的地址结构。好处:路由器仅根据目的网络的主机所连接的网络号来转发分组,而不用考虑主机号,从而提高效率,减小了路由表所占的存储空间以及查找路由表的时间。

      • IP地址特点:

        • 在同一个局域网上的主机或路由器的IP地址的网络号必须是一样的。

        • 用网桥(只在链路层工作)互连的网段仍然是一个局域网,只能有一个网络号。

        • IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为 多归属主机(multihomed host) 。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。

    • IP地址和MAC地址:

      • MAC地址(物理地址、硬件地址)是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址。IP地址放在IP数据包的首部,MAC地址放在MAC帧的首部。当IP数据包放入数据链路层的MAC帧后,整个IP数据包就成为了MAC帧的数据,因此数据链路层看不见数据包的IP地址。

      • 如下图,IP数据包传播时不变,只有MAC帧中的MAC地址在变,因为数据链路层靠MAC地址转发数据。(HA Hard Adress 硬件地址),路由器连接在多个局域网,所以每个接口都有一个硬件地址。路由器R2发现不了主机H1的MAC地址,本网段的计算机只能发现本网段的MAC地址,发现不了别的网段的MAC地址。如下图,路由器每转发一次,就改变一次源MAC地址和目标MAC地址。

    • 地址解析协议ARP:

      • ARP协议的作用是根据IP地址找到其对应的硬件地址。

      • 网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是使用的MAC地址。每台主机都有一个ARP高速缓存(ARP cache),里面有一些本局域网上的各种主机和路由器的IP地址到硬件地址的映射表,这个映射表经常动态更新。

      • 当A要向本局域网的MAC_B(主机B)发送数据时,先看看ARP高速缓存有没有B的IP地址,如果有就查出对应的MAC地址;没有的话就自通运行ARP进程:

        • (1) ARP进程在本局域网上发送一个ARP请求分组,内容是:“我的IP地址是xxxx,硬件地址是yyyyy,我想知道ip为aaaaa的主机的硬件地址

        • (2) 本局域网上的所有主机运行的ARP进程都能收到此ARP请求分组

        • (3) 主机B的IP地址与ARP请求分组中要查询的一致,就收下这个分组(同时在自己的ARP高速换成你中写入主机A的IP地址到MAC地址的映射),并向主机A发送ARP响应分组(分组中有自己的MAC地址)。其余主机因为和自己的IP地址不同,不予理睬。ARP请求分组是广播,响应分组是单播。

        • (4) A收到B的响应后,就在其ARP高速缓存中写入主机B的IP地址到MAC地址的映射。

      • 可见ARP高速缓存很有用。如果不用ARP高速缓存,那么任何一台主机只要进行通信就必须在网络上用广播方式发送ARP请求分组,这就会使网络的通信量大大增加。

      • ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间(例如:10~20分钟)。凡是超过石村事件的项目就从高速缓存中删除掉。目的是:防止其他主机硬件地址改变,例如主机B因为网卡坏了,换了一个。

      • ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。

      • ARP欺骗:

        • 当主机A请求主机B时,主机C答应,从而骗了主机A,从而获得主机A的所有流量

        • arp -a 查看arp表 arp -s ip mac 自己指定 ip-mac 映射

    • IP数据包的格式:

      • 在TCP/IP 的标准中,各种数据常常以32位(4字节)为单位来描述。

      • IP数据包首部的固定部分的各字段:

        • 版本:

          • 占4位,指IP协议的版本,IPV4 or IPV6。

        • 首部长度:

          • 占4位,可表示的最大十进制数值为15,。

        • 区分服务:

          • 占8位,基本不用。

        • 总长度:

          • 指的是首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据包的最大长度为 2^16-1=65535 字节。但在现实中,这么长的数据包极少遇到。

          • IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,称作最大传送单元MTU(Maximum Transfer Unit)。当一个IP数据包封装成链路层的帧是,一般数据包总长度不能超过MTU规定的值。例如:以太网规定MTU为1500字节,当传送到IP数据包超过时,就把过长的数据包进行分片处理。

          • 虽然尽可能长的IP数据包会使传输效率提高。但IP数据包越短,路由器转发的就越快。因此IP协议规定互联网上的所有路由器和主机,必须能接收长度不超过576字节的数据包。超过时,就先了解目的主机能否接收要发送的长度,否则就进行分片。

        • 标识:

          • 占16位。IP软件在存储器中维持一个计数器,每产生一个数据包计数器就加一,并将值赋给标识字段。

          • 但这个标识不是序号,因为IP是无连接服务,数据包不存在按序接收的问题。作用是:当进行分片处理时,这个标识字段的值就被复制到所有数据包片段中的标识字段中。相同的标识字段的值使分片后的各数据包片最后能正确地重新组装成原来的数据包。

        • 标志:

          • 占三位,但目前只有前两位有意义。

          • 标志字段中的最低位记为MF(More Fragment)。MF=1标识后面还有分片的数据包,MF=0表示这已经是若干数据包分片中的最后一个。

          • 标志字段中间的一位基座DF(Don't Fragment)。意思是不能分片。只有当DF=0时才允许分片。

        • 片偏移:

          • 占13位。指的是:在较长的分组分片后,某片在原分组中的相对位置。

        • 生存时间:

          • 占8位,英文缩写为TTL(Time To Live),表明数据包在网络上的寿命。由发出数据包的原点设置这个字段,目的是为了防止因无法交付的数据包无限制地在互联网上兜圈子,白白消耗网络资源。

          • 原来是靠秒数来辨别的,因为随着技术的进步,路由器处理时间越来越少,就换成了次数,保留了原名。路由器在每次转发数据包之前就把TTL值减1。若TTL减到0,就丢弃它,不再转发。若把TTL设为1,则只能在本局域网传送。显然数据包能在互联网中经过的路由器的最大数值为255(占8位)。

          • ping xx.xx.xx.xx -i n 指定发送端的TTL值,可以辨别经过了多少路由器

          • 一般:linux 返回的TTL是64,win7:64,UNIX:255,win2000/NT:128。

        • 协议:

          • 占8位,指出了此数据包携带的数据是使用的何种协议,以便目的主机的IP层知道应将数据部分交给哪个协议处理。

        • 首部校验和:

        • 原地址:占32位。

        • 目的地址:占32位。

    • IP层转发分组流程:

      • 不仅路由器有路由表,主机也有。

      • 路由表中,每一条路由最重要的信息是:(目的网络地址,下一跳地址)

      • 默认路由:

        • 0.0.0.0 下一跳地址

        • 当在路由表找不到目的网络地址时,就交给默认路由的下一跳地址。

        • 默认路由可以减少路由表所占用的空间和搜索路由表所用的时间,这种转发方式在一个网络只有很少的对外连接是很有用的。

          • 如图,只要不是给N1 或 N2 的数据包,就扔给R1。

     

     

    2. 划分子网 和 构造超网

    • 子网划分:

      • 一个A类网络可容纳主机数1600多万,一个B类可容纳6万多,为了提高利用率就需要划分子网。把主机号再分成一个子网号和主机号,这样IP地址就变成了 网络号+子网号+主机号。 一个单位中也可以划分数个子网。

      • 这样的话,从别的网络发往某一主机的IP数据包,仍然根据IP数据包的目的网络号找到连接那个网络上的路由器,路由器收到数据后,再按目的网络号和子网号找目的子网,再把IP数据包交给目的主机。

      • 网络内部划分为N个子网,对外仍是一个网络。

    • 子网掩码:

      • 路由器根据子网掩码(subnet mask),算出IP地址属于哪个子网。

      • 子网掩码,根据IP地址,将网络位写成1,主机位写成0

      • 计算方法:将IP地址和子网掩码转换成二进制形式,进行与运算,得到的数字即为网络号。网络地址就是主机所在网段的地址。一个子网掩码就可以确定不同的子网地址了。

      • E:坚果云-笔记网络、服务计算机网络.assets1533657291727.png

      • 将一个C类地址划分为两个子网:

        • C类地址的子网掩码为 255.255.255.0,划分为两个子网,则借用一个主机位,子网掩码就是:255.255.255.10000000 = 255.255.255.128 。 即第一个子网的范围是:xxx.xxx.xxx.00000000 -> xxx.xxx.xxx.01111111 第二个范围:xxx.xxx.xxx.100000000 -> xxx.xxx.xxx.11111111 。可用IP十进制形式:A:1-126 B:129-244

      • 将一个C类地址划分为四个子网:

        • 需要借用两个主机位

        • A:1-62 B: 65-126 C: 129-190 D: 193-244

    • 变长子网划分:

      • 注:子网掩码也可以这样写:ip/数字,数字表示子网掩码中1的个数。如:192.168.201.169/30

      • 每个不等长的网段设置不同的子网掩码。

      • 255.255.255.128 长度128 子网掩码向后移1位

      • 255.255.255.192 长度64 子网掩码向后移2位

      • 255.255.255.224 长度32 子网掩码向后移3位

      • 一个网段需要12台主机:

        • 除以2,128;再除以2,64;再除以2,32;再除以2,16;也就是移动四位才行,就是255.255.255.240

    • 使用子网时分组的转发:

      • 在划分子网的情况下,分组转发的算法必须做响应的改动。使用子网划分后,路由表必须包含三项内容:目的网络地址、子网掩码、下一跳地址

      • 在划分子网的情况下,路由器转发分组的算法如下:

        •   

      • 实例:

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

      • 为了解决IP地址不够用等情况,IETF就开始研究了无分类的编址方法。在变长子网掩码VLSM(Variable Length Subnet Mask) 的基础上又进一步研究出来了 无分类域间路由选择CIDR(Classless Inter-Domain Routing)

      • CIDR的最主要的两个特点:

        • CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而能更加有效地分配IPv4的地址空间,并且在新的IPv6之前容许互联网规模的继续增长。CIDR把32位的IP地址划分为前后两个部分。前面部分是“网络前缀(network-prefix)”或简称为“前缀”,用来指名网络,后面部分则用来指名主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编制,但已是无分类的两级编址。

          • CIDR使用“斜线记法”,在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数(即二进制地址掩码中1的个数)。

        • CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”。只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址和最大地址,以及地址块中的地址数。 如下图,这个地址块可以简记为 128.14.32.0/20

          • CIDR使用 32 位的地址掩码(adress mask)。地址掩码有一串0和一串1组成。1的个数就是网络前缀的长度。如:/20地址块的地址掩码是:11111111 11111111 11110000 00000000

      • “CIDR 不使用子网”指的是CIDR没有在32位地址中指明若干位作为子网网段。但分配到一个CIDR地址块的单位,仍然可以根据本单位内的实际情况划分出一些字网。这些子网也都只有一个网络前缀和一台主机号字段。但子网的网络前缀比整个单位的网络前缀要长一些。例如:地址块为/20,划分为8个子网,则向主机位借3位,这样每一个子网的网络前缀就变成了23位。

      • 斜线记法的好处是可以除了表示一个IP地址外,还提供了一些其他的信息:

        • 如:192.199.170.82/27 不仅表示了IP地址是多少和网络前缀,还从侧面反映出来了该地址块中的IP地址数目,即:2^(32-27) = 2^5 = 32(个)

        •  

     

    3. 网际控制报文协议 ICMP

    • 为了更有效地转发IP数据包和调高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。 ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文内容封装在IP数据包中,作为IP数据包的数据部分

      • 注:虽然ICMP报文是封装在IP数据包里的,但它并不是高层协议,而就是IP层的。

    • ICMP 报文的种类:

      • ICMP差错报文:

        • 终点不可到达(类型值 3):到路由器或主机不能交付数据时就向源点发送终点不可到达报文

        • 时间超过(类型值 11):当路由器收到生存时间(TTL)为0的数据包时,除了丢弃该数据包外,还要向源点发送时间超过报文

        • 参数问题(类型值 12):当路由器或目的主机收到的数据包首部的字段不正确时,除了丢弃还向源点发送参数问题报文

        • 重定向(类型值 5)(改变路由):路由器把改变路由报文发送给主机,让主机知道下次应将数据包发送给另外的路由器(可通过更好的路由)。

      • ICMP询问报文:

        • 回送请求和回答(类型值 8 or 0):ICMP会送请求报文是由主机或路由其想一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。可以用来测试目的站是否可达以及了解其有关状态。

        • 时间戳请求和回答(类型值 13 or 14):ICMP时间戳请求报文时请某台主机或路由器回答当前的日期和时间。用于时钟同步和时间测量。

    • ICMP应用:

      • PING(Packet Internet Groper)

        • PING 使用了 ICMP回送请求和回送回答报文。

        • ping就是确定对方主机是否响应ping,一般返回ping的信息就表示本地到该主机的网络线路连通。但是很多服务器为了防止攻击,一般会关闭对ping的响应。所以ping一般作为测试连通性使用。

      • traceroute(类Unix系统) 和 tracert(Windows)

        • 用来跟踪一个分组从原点到终点的路径。

        • 不断发送 TTL为 1,2,3,4,5... 的数据包,这样就会把途经所有的路由器信息返回了。因为路由器收到数据包时,要把TTL减1,减完为0时,就丢弃,然后向源点发送一个ICMP时间超过的差错报告报文。

      • pathping(Windows)

        • pathping会先显示中间的通过的路由器,然后对每个中间路由器发送一定数量的ping包,通过统计他们对ping包响应的数据包来分析通信质量。

     

     

    4. 互联网的路由选择协议

    • 有关路由选择协议的基本概念:

      • 理想的路由算法:

        • 算法必须是正确地和完整的:“正确” 的含义是,沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机。

        • 算法在计算上应简单:路由选择的计算不应使网络通信量增加太多的额外开销。

        • 算法应能自适应通信量和网络拓扑的变化:也就是说,要有自适应性

        • 算法应具有稳定性:

        • 算法应是公平的:即对所有用户都是公平对待

        • 算法应是最佳的:

      • 静态路由选择策略:

        • 也叫非自适应路由选择,特点是简单和开销小,但不能及时适应网络状态的变化。对于很简单的小网络完全可以采用静态路由选择,用人工配置每一条路由。

      • 动态路由选择策略:

        • 也叫自适应路由选择,特点是能友好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。

      • 分层次的路由选择协议:

        • 互联网采用的路由协议主要是自适应的(即动态的)、分布式路由选择协议。因为互联网规模非常大(如果让路由器知道所有的网络应怎样到达,则路由表将会非常大,处理起来也太费时间),所以把整个互联网划分为许多小的自治系统(autonomous system),一般记为AS。

        • 目前的互联网中,一个大的ISP就是一个自治系统。这样,互联网就把路由选择协议划分为两大类:

          • 内部网关协议 IGP(Interior Gateway Protocol): 即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF协议。

          • 外部网关协议 EGP(External Gateway Protocol): 若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。

        • 自治系统之间的路由选择叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)

    • 内部网关协议 RIP:

      • RIP(Routing Infomaiton Protocol)是内部网关协议IBP中最先得到广泛使用的协议,但很少被使用。RIP是一种基于距离的路由选择协议,是互联网的标准协议,最大的优点是简单。它是分布式的路由选择协议。

      • RIP协议要求网络中的每一个路由器都要维护从他自己到其它每一个目的网络的距离记录

        • 距离:从一个路由器到直接连接的网络的距离定义为1,到非直接连接的网络的距离定义为所经过的路由器数加1(加1是应为到达对我那个落后就进行直接交付)。距离也称为跳数。RIP认为好的路由就是它通过的路由器数目少,即距离短。RIP允许一条路径最多只能包含15个路由器,因此距离等于16时就相当于不可到达。所以,RIP只适用于小型互联网。

      • RIP协议的特点:

        • 仅和相邻路由器(直接相连的)交换信息。

        • 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表。也就是说交换的信息是:“我到本自治系统中所有的网络的最短距离,以及到每个网络应经过的下一跳路由器“。

        • 按固定的时间间隔交换路由信息。例如,每隔三十秒。然后路由器根据收到的信息更新路由表,当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。

      • 路由器刚开始工作时,它的路由表是空的,然后路由器得出到相邻的网络的距离。接着,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。经过若干次更新,所有路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。

      • 路由器中最主要的信息就是:到某个网络的最短距离,以及经过的下一跳地址,路由表更新的原则就是找出到每个目的网络的最短距离,这种更新算法又称为距离向量算法。

      • 这种方法也不是完全最优化,如果到某个网络有两条路,A路线经过1个路由器,但带宽很小;B路线经过3个路由器,带宽非常大,RIP会选择A路线,但A远比B慢。

      • 距离向量算法:

    • 内部网关协议 OSPF:

      • 开放最短路径优先 OSPF(Open Shortest Path First)。

    • 外部网关协议 BGP:

      • 外部网关协议,进行各个自治系统之间的路由选择。

    • 路由器的构成:

      • 路由器是一种有多个输入端口和多个输出端口的专用计算机,任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的网络,把该分组从路由器的某个合适的输出端口转发个下一跳路由器。

     

     

     

    5. IPV6

     

    6. IP 多播

    • IP多播的基本概念:

      • 与单播相比,在一对多的通信中,多播可以大大节约网络资源。如图a,单播方式,服务器需要发送90次单播,而图b的服务器只需要一次,路由器会把收到的数据复制3份,转发出去。当分组达到目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,局域网上的多播组成员都能收到这个视频分组。

    •  

     

     

     

     

    7. 虚拟专用网VPN 和 网络地址转换NAT

    • VPN:

      • 分类:

        • Access VPN:

        • Intranet VPN:

        • Extranet

    • NAT:

      • 如果在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),又想和互联网通信,可以申请互联网的IP地址(但IPV4所剩不多)。这时就应该用网络地址转换NAT(Network Address Translation) 的方法了。

      • 要使用NAT,必须在专用网连接到互联网的路由器上安装NAT软件,装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将本地地址转换为全球IP地址。

      • 但发送到NAT路由器上的数据包如何分发给本地正确的主机呢,就需要转换了。

      • 使用端口号的NAT也叫做网络地址与端口号转换NATP(Netword Address and Port Translation),一般不区分NAT与NATP

      • NAT的端口映射:

      • 虚拟机NAT配置:

      •  

  • 相关阅读:
    pydata-book-利用python进行数据分析-github
    利用Python进行数据分析-github
    stanford提供的数据库
    转:python 实现GUI(图形用户界面)编程
    PyGObject的使用手册
    python-install-package-C++编译器问题---06
    git 命令大全
    redis复习
    Python 十进制转换为二进制 高位补零
    cURL可以做的10件事
  • 原文地址:https://www.cnblogs.com/yuanyb/p/9697256.html
Copyright © 2020-2023  润新知