【计算机网络】网络层

计算机网络不看后悔系列blog(四)网络层/超详细!!(๑´ڡ`๑)

网络层的作用

负责在不同的网络之间(基于数据包的IP地址)尽力转发数据包,不负责丢包重传和接收顺序。有点像送快递,一个人往另一个地方寄快递,每个快递走不同的路线,可能后发的先到了,也可能丢件了。但是网络层不管这些,只管寄快递。

DMnNI.png

数据包在Internet中的传输,Internet既有局域网,又有广域网,既有光纤,又有铜线,无线,还有不同的协议,这是Internet复杂所在。
路由器是三层设备:能看到网络层的IP地址来选择路径:

DM80K.png

典型的路由器结构:

D5emT.png

网络层向运输层提供的两种服务

  • 电信网:虚电路服务:指定所传送的分组都沿着相通的一条虚电路传送,也就是为分组指定路径,这个方式可以不用写目标地址,因为线路已经确定了(可靠性应到由网络来保证)

CF1cM.png

  • 因特网:数据包服务:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务,网络在发送分组时不需要先建立连接,每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号),网络层不提供服务质量的承诺,即所传送的分组可能出错、丢失、重复、失序(不按序达到终点),当然也不保证分组传送的时限。(可靠通信应当由主机来保证)

CFqWa.png

网关

如果计算机没有配网关,那么计算机将不能到其他网段,但是可以访问本网段的计算机,网关就是到其他网段的路由器的接口,一个计算机可以指定多个网关 (得是存在的路由器接口)还可以指定多个IP地址

IP协议简介

网际协议IP是TCP/IP体系中最重要的协议之一,网络层还有四个协议:

  • 地址解析协议ARP
  • 逆地址解析协议RARP
  • 国际控制报文协议ICMP
  • 国际组管理协议IGMP

第一和第二协议一般被认为是同一回事,所以就直接用ARP协议代替,组成网络层的四种协议

网络层4个协议之间的层次

CFeVR.png

IP地址

网络部分与主机部分

CFw6I.png

前半段为网络地址,后半段为主机地址

网络地址

网络地址(也可以称为网络号)唯一指定了每个网络,同一网络中的每台计算机都共享相同的网络地址,并用它作为自己IP地址的一部分,其中划分的几个类别的区分网络地址段与主机地址段的区别:

CFztK.png

IP地址及其表示方法

我们把整个因特网看成为一个单一的、抽象的网络。IP地址就是给连接再因特网上的主机或路由器的每一个接口分配一个再全世界范围是唯一的32位标识符,IP地址现在由因特网名字与号码指派公司ICANN进行分配。IP地址的编址方法:

  • 分类的IP地址,这是最基本的编址方法。
  • 子网的划分。这是对基本的编址方法的改进。
  • 构成超网。这是比较新的无分类编址方法

IP地址

CIszJ.png

可以看到A类地址的网络号字段只有8位而主机号字段有24位,即A类地址可以接254^3台主机为他们分配不同的地址,同样的道理,C类地址只有8位主机号字段,那么它只能给254台主机分配不同的地址

原因牵扯到十进制与二进制的关系:

CIJOm.png

  • 当第一段为0-127则为A类地址
  • 128-191则为B类地址
  • 192-224则为C类地址

也就是说

  • 0开头的为A类地址
  • 10开头的为B类地址
  • 110开头的为C类地址

常用的三种类别的IP地址

CIjDU.png

主机的网段不能全为0或1,所以A类可用网络号到126因为127全为1,128全为0,向下的以此类推

例子

CIuud.png

在这个例子中的首段为133,说明这个为B类IP地址,B类IP地址的前两段为网络号字段,所以TAB键自动填充两个255,也就是告诉计算机我的前两个字段为网络号字段

几个特殊的IP地址

  • 127.0.0.1本机环回地址
  • 169.254.0.0没有地址而分配到的默认地址(所有默认这个地址的人是在一个网段的)
  • 10.0.0.0保留的A类私网地址(在互联网上这个地址没有被服务器拿来用,可以让企业或学校来用)
  • 172.16.0.0–172.31.0.0保留的B类私网地址
  • 192.168.0.0–192.168.255.0保留的C类私网地址

注意:保留的私网地址是不能通过互联网连接的,因为互联网没有这些地址的服务器,所以不知道怎么走,这肯定是在某个机构的内网里,这些地址重叠都没关系,因为私网之间不互相通信。公网地址才能通过互联网访问

IP数据包的格式

注意,ARP数据包不是这个格式。

  • 首部:第一部分是固定长度,20字节,是所有IP数据包必须具有的。后一部分是可选字段,长度可变。

DMNUT.png

每一行32bit相当于1个字节,一共5行,共20字节

DMl5w.png

  • 版本:用来表示TCP/IP是哪个版本,ipv4还是ipv6.
  • 区分服务:确定更高的传输优先级。
  • 总长度:确定数据部分长度。一共是16位,最多有2^16-1=65535字节。

注意,网络层,数据包最大65535字节;而数据链路层数据最大是1500字节,是不一样的。所以说,一旦超过数据链路层的最大要求时(网络层数据部分超过1480字节),数据包会分片。最大传输单元MTU。

DMrRo.png

数据包分片:把数据分割,分别添加IP地址,通过网络发给目标MAC地址。目标在通过网络层拼接。传送过程中可能会丢包,或者后发的先到(泪滴攻击就是利用目标机发送破坏的IP包(重叠的包货过大的包负荷)可以通过TCP/IP协议来瘫痪各种不同的操作系统)。所以需要编号。

  • 标识:如果出现数据包分片,那么标识用来确定哪些数据包是需要组合的。
  • 标志:确定该数据包是完整的还是分片中的一部分。占3位,只有前两位有用,标志字段最低位是MF(More Fragment),MF=1表示后面还有分片,MF=0表示最后一个分片。标志字段中间一位是DF(Don’t Fragment),只有DF=0才允许分片。
  • 片偏移:偏移等于当前字节在数据部分的第几个再除以8.(下图是一个举例)

DMOKl.png

  • 生存时间:就是TTL,time to live,每过一个路由器就减1。8位二进制。防止数据包在网络中循环。
  • 协议:用协议号标识数据部分是什么数据。

DMSy1.png

  • ICMP协议号:1;
  • IGMP协议号:2;
  • TCP协议号:6;
  • UDP协议号:17;域名解析
  • IPv6协议号:41;
  • OSPF协议号:89;
  • 首部检验和:16位,只检验数据报的首部,不检验数据部分。这里不是采用CRC检验码而是采用简单的计算方法。每经过一个路由器就会检验一次。

DMy62.png

  • 源地址和目的地址都是IP地址,32位,只符合IPv4。IPv6是128位。
  • 可变部分:一般没用。

子网掩码

在两个地址准备通信时,子网掩码会比较两个地址的网络号段是否相同(即是否是在同一个网段)若相同则直接通信,若不相同则转发给.1.0的网关路由器再转发给对应的地址

CIemY.png

注意:子网掩码的格式错误也会产生错误,造成线路不同,所以一定要配置正确的子网掩码
具体的比较过程:

CI184.png

IP协议

网络畅通的条件下沿途路由器必须知道下一跳给谁,数据包有去有回。

DMVe8.png

静态路由

  • 数据路由:路由器在不同网段转发数据包
  • 静态路由问题:ping连接一通一断很有规律很可能就是路由造成的,它可能加了两个网关,每次发到一个,一次一回就导致了这个问题。如果要通信的那个地址不在默认网关的一端,那么久route add手动添加一条和指定地址联系的道路
  • 需要管理员告诉路由器所有没有直连的网络下一跳给谁。
  • 适合于小规模网络,不能自动调整路由。

动态路由

RIP协议

周期性广播(30s)路由表,选择路径的依据是最少的跳数,最大跳数是15跳,所以一般不适合大网络。

内部网关协议OSPF(Open Shortest Path First)

  • 向本自治系统中所有路由器发送信息,实力使用的方法是洪泛法
  • 发送的消息就是与本路由器小林的所有路由器的链路状态,但这只是路由器所知道的部分信息
  • 只有当链路状态发生变化时,路由器采用洪泛法向所有路由器发送此信息

OSPF带宽度量值,支持多区域,触发式更新,有三个表,

  • 邻居表,hello包(和邻居互相打一下招呼)
  • 链路状态表(交换邻居表就能得出谁连着谁)
  • 计算路由表(算一下看看最短路径)

D5sza.png

OSPF划分为两种不同的区域

D5hQM.png

OSPF下的路由器只会和自己所在自治系统(也就是不同的区域用各自的协议就是自治系统)的路由器互相交互,不会影响到其他区域的路由器,自治区域汇成一条线路与主干区域相连

OSPF的其他特点

  • ISPF不用UDP而是直接用IP数据报传送
  • OSPf对不同的链路可根据IP分组的不同服务类型而设置成不同的代价。因此,对于不同类型的业务可计算出不同的路由
  • 如果到同一个目的网络有多条代价相同的路径,那么可以将信息量分配给这几条路径,这叫做多路径间的负载平衡
  • 所有在OSPF了路由器之间交换的分组都具有鉴别功能
  • 支持可变长度的子网划分和无分类编址CIDR
  • 每一个链路状态都带上一个32位的序号,序号越大状态就越新
  • OSPF对子网掩码的要求是反过来的

外部网关协议BGP

BGP协议是不同自治系统的路由器之间交换路由信息的协议。边界网关BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。每一个自治系统的管理员要选择至少一个路由器作为该自制系统的“BGP发言人”:

D5uuK.png

D518G.png

BGP协议的特点:

  • BGP协议交换路由信息的数量不是很多
  • BGP发言人数目不多,路由选择相对简单
  • BGP协议支持CIDR
  • BGP建立时,交换整个路由表但之后只交换变化部分

动态路由配置问题

动态路由添加的时候如果是统一网段那么就写一个就行了,如果不是同一个网段那么则要全部添加

子网的划分

划分子网为了充分利用IP地址

等分子网的划分

CIff1.png
CIFho.png
Cf5A2.png
CIIal.png

(B类网络的子网划分以此类推)

在这个里面0-64字段里面能使用的字段为1-62,因为0是管理员63为广播字段,以此类推其他的字段,第一个和倒数的两个都不能用 128往前移几位就是处于几个2,就得到了第一个0-*的网段,等分成几个子网,网络号段就往后移一半位,一直向后移到0-4,这样这个往里面只有两个地址,这样就变成了两个主机,点对点的的子网掩码就变成了11111100(252)

CfXSJ.png
每个网断最大地址的为广播地址,所以最大地址为理论最大地址-1位

等分子网划分的规律

划分子网的各子网的内部主机数量与2相关,比如200台机器划分为150与50是不能划分的,因为中间数为128,无法划分

变长子网的划分

CfjHa.png

超网合并网络

这种情况下A与B通信需要经过路由器转发,但是这样是很多此一举的(两台计算机接在了一个网关的两个接口,是在两个C类地址里)

CfVee.png

合并方式其实就是子网划分的反过程

CfFbD.png

这两个地址都被合并到了192.168.0这个网段里了,以此类推,192.168.2与192.168.3也可以合并,10和11,但是需要向前移动两位,但是并不是所有的网段都可以合并,比如192.168.1与192.168.2,01和10,这样需要向前移动两位,但是这样的话1,3也将被纳入到一个网段,所以是不能合并的

超网合并的规律

D45ik.png

117与118就不能合并,小的是偶数才能合并

IP地址与MAC地址

IP地址决定了数据的终点是谁,MAC地址决定了下一设备是谁

arp -a可以查看本机所缓存的MAC地址

D4mRh.png

通信过程中M系列为各端口的MAC地址

ARP协议

ARP&RARP

D4pWM.png

TCP/IP协议层次关系

DMFbJ.png

  • IP协议:把数据包从一个网段转到另一个网段,就是用来选择路径用的。
  • ARP为IP服务,IP为ICMP/IGMP服务。

ARP协议的作用

将IP地址通过广播(本网段,不通过路由器),目标MAC地址是FF-FF-FF-FF-FF-FF,解析目标IP地址的MAC地址。ARP是解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射关系。如果所找的主机和原主机不在同一个局域网上,那么就要通过ARP找一个位于本局域网上的某个路由器的MAC地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。从IP地址到MAC地址的解析是自动进行的,主机的用户对这种地址解析过程是不知情的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址解析为链路层所需要的MAC地址

使用ARP的四种典型情况

  • 发送方是主机,要把IP数据报发送到本网络的另一个主机,此时用ARP找到目标主机的MAC地址;
  • 发送方是主机,要把IP数据报发送到另一个网络的另一个主机,此时用ARP找到本网络上一个路由器的MAC地址,剩下的工作由路由器进行;
  • 发送方是路由器,要把IP数据报发送到本网络的另一个主机,此时用ARP找到目标主机的MAC地址;
  • 发送方是路由器,要把IP数据报发送到另一个网络的另一个主机,此时用ARP找到本网络上一个路由器的MAC地址,剩下的工作由路由器进行;

逆地址解析协议RARP

只知道自己MAC地址就能获得其IP地址。

ICMP

ICMP报文格式

D4fw8.png

ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码、检验和,接着4个字节的内容与ICMP的类型有关

ICMP报文的类型

两种类型:

  • ICMP差错报告报文

    • 终点不可达
    • 源点抑制
    • 时间超过
    • 参数问题
    • 改变路由(重定向)
  • ICMP询问报文

    • 回送请求和回答报文
    • 时间戳请求和回答报文

差错报告报文的字段和内容

D5XjU.png

其中B收到报文后将数据区拿出来,然后加上蓝色部分到最后的首部+ICMP差错报告报文,然后将其返回

ping(Packet Internet Grope)命令诊断网络故障

  • PING是网络层命令。

  • TTL是数据报的生存时间每过一个路由器就会减1,作用是防止数据报在网络中循环。TTL默认初始值如下:

    • Linux 64
    • Windows 128
    • Unix 256
  • 可以根据TTL值粗略判定对方是什么系统。

  • PING,因特网包套所起,用于测试网络连接量的程序。ping发送一饿ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。

  • ping指端对端联通,通常用作可用性检测,但是某些病毒会强行大量远程执行ping命令抢占你的网络资源,导致系统网速变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。

  • 如果打开IE浏览器访问网站失败,可以通过ping命令测试到Internet的网络连通,可以为你排除网络故障提供线索。

ping和pathping命令

QQ能登上,网页打不开是为什么?网络层没有问题,域名解析有问题。

pathping 能跟踪数据包路径,发现出问题的位置。
pathping 还可以列出丢包率

NAT和PAT

NAT网络地址转换的过程

  • 内部主机X用本机地址(私网地址)IPx和因特网上的主机Y通信所发送的数据报必须经过NAT路由器
  • NAT路由器将数据报的源地址IPg),但目的地址IPy保持不变,然后发送到因特网
  • NAT路由器收到主机Y发挥的数据报时,知道数据报中的源地址时IPy而目的地址是IPg
  • 根据NAT转换表,NAT路由器将目的地址IPg转换为IPx转发给最终的内部主机X

NAT不节省公网IP,如果NAT路由器绑定了5个公网地址,那么如果局域网有10台主机那么将会有5台主机无法上网,并且只能出去不能访问进来

利用这样的特性有另一种应用:单向访问

D5tgw.png

在图中左边区域为私密主机不能让右边区域访问但得让外部的那个机器访问,但左边区域要访问右边区域,这样就可以利用外部这个机器充当NAT,让左边区域当内网(私网)访问右边机器时统一使用外部机器转换的那个公网地址,这样一来,右边的机器只知道访问它们的是一个公网地址,而不知道左边机器的具体地址

PAT端口地址转换

PAT(port address translation,端口地址转换)是NAT(network address translation,网络地址转换)最常用的一种实现方式。NAT通过将企业内部的私有IP地址转换为全球唯一的公网IP地址,使内部网络可以连接外网(internet),而PAT可以在上述转换过程中,实现企业内网的多个私有IP对一个或是多个IP复用,从而实现IP地址的节约.

IGMP组播协议

组播可以想象成是一个频道,主机就是电视台,IGMP就是管理组播成员的。当电视台向其他路由器传输组播数据包时,路由器会利用IGMP协议查看是否有用户连接,如果没有就会返回不再接受组播数包了

参考:
韩立刚老师《计算机网络》课程
https://blog.csdn.net/iwanderu/article/details/103812967

如果觉得还不错的话,把它分享给朋友们吧(ง •̀_•́)ง