计算机网络读书笔记-----网络层

  • 网络层提供的两种服务

网络层位于数据链路层之上,应用层之下,提供两种服务:数据报和虚电路,前者为无连接的网络服务,后者为面向连接的网络服务。这里有点类似TCP和UDP。

数据报服务:网络随时都可以接受主机发送的分组(数据报),网络为每个分组独立选择路由,尽最大努力将分组交付给目的主机,所以数据报服务提供的是不可靠的,不能保证服务质量。

虚电路服务:A要与B通信,首先A向B发送一条特定的消息,要求进行通信,B收到后返回响应,此时虚电路就建立起来了,然后传送数据即可,所以服务质量有着较好的保证。

项目 虚电路服务 数据报服务
思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
连接的建立 必须有 不要
目的站地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有目的站的全地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
当结点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达目的站 到达目的站时不一定按发送顺序
端到端的差错处理和流量控制 可以由分组交换网负责也可以由用户主机负责 由用户主机负责
  • IP网的出现

如果将全世界范围内大大小小的网络通过路由器互连起来,并进行通信,会遇到许多问题需要解决:不同的寻址方案、不同的最大分组长度、不同的超时控制、不同的路由选择技术等等。

因为用户的需求是多种多样的,所以没有一种单一的网络具备所有用户的需求。

将网络互连起来需要使用一些中间设备:

1、物理层的中间设备称为转发器

2、数据链路层使用的中间设备叫网桥或桥接器

3、网络层使用的中间设备叫路由器

4、网络层以上使用的中间设备叫网关,通常用网关连接两个使用不同协议的网络。

一般情况下所说的网络互连是指用路由器进行网络互连和路由选择。可以将路由器看做一台专用计算机,只是负责在互联网中进行路由选择。

TCP/IP体系在网络互连上采用的做法是在网络层采用了标准化协议,通过路由器进行互连的网络都使用相同的网际协议IP,因此可以可以把互连后形成的网络看做虚拟互连网络,所谓虚拟互连也就是逻辑互连。

这样,我们互连起来的各种物理网络虽然都是异构的,但是在网络层上看起来就好像是一个统一的网络,这样的使用IP协议的虚拟互连网络也称为IP网。

IP网的好处:隐藏了各种互连网络的底层具体异构细节,当IP网上的主机进行通信时,就好像是在一个单个的网络上进行通信一样。

  • IP协议

IP协议是TCP/IP体系中最核心的协议。TCP、UDP、ICMP及IGMP都以IP数据报的格式传输数据。

IP协议提供无连接不可靠的服务。

不可靠:不能保证IP数据报能成功到达目的地。只是尽最大努力传输。

无连接:说明每个IP数据报处理是相互独立的,即IP数据报可以不按照顺序接收。

与其配套使用的还有4个协议:

ARP:地址解析协议

RARP:反地址解析协议

ICMP:因特网控制报文协议

IGMP:因特网组管理协议

后两者需要用到IP协议,所以在上方,而IP协议需要经常使用前面两个,因而在下方。

  • IP地址

将因特网看成是单一的,抽象的网络,IP地址就是给每个接入因特网的主机分配的一个全世界范围内唯一的32bit的标识符。这样IP地址使我们很方便在因特网上进行寻址。

IP地址的编址经历了三个阶段:

1、分类的IP地址

2、子网的划分

3、构成超网

  • 分类IP地址

将IP地址划分为若干个固定类,每一类地址都由网络号和主机号组成。一个主机号在前面网络号指定的网络范围内是唯一的,所以这种IP地址可以记为

  IP地址:{<网络号>,<主机号>}

  

图中网络号字段最前面1~4位表示类别位,用于区分这几类地址。

A、B、C类地址都属于单播地址(一对一通信),D属于多播(一对多通信),而E则保留为以后使用。

前面提到,IP地址是32bit的二进制代码,为了提高可读性,将用等效的十进制表示:

最常用的IP地址是A、B、C类地址

IP地址空间总共有2^32个地址,A类地址空间共有2^31个地址,占总地址空间的50%

B类地址空间共有2^30个地址,占总地址的25%,C类地址约有2^29个地址,占整个IP的12.5%

所以IP的范围:

一般不使用的IP地址:

IP的特点:

1、IP地址是一种分等级的地址结构,好处:IP地址管理机构只需要分配网络号(第一级),主机号(第二级)由使用该网络号的单位自己分配,方便管理;路由器仅根据目的主机所连接的网络号来转发分组,不用考虑主机号,这样就可以简化路由表以及查找路由表的时间。

2、一个主机连接到两个网络上时,就必须同时具有两个相应的IP地址,所以由于一个路由器至少应当连接到两个网络,至少一个路由器至少应有两个不同的IP地址

3、局域网都具有相同的网络号

4、所有分配到的网络号的网络都是平等的。

  • IP地址与硬件地址

物理地址是指数据链路层和物理层使用的地址
而IP地址是网络层及以上各层使用的地址,是一种逻辑地址

IP地址放在IP数据报的首部,而硬件地址放在MAC帧的首部,IP数据报放入数据链路层的MAC帧后,整个IP数据报就成为MAC帧的数据,因而在数据链路层是看不见数据报的IP地址的,只有在剥去MAC帧的首部和尾部把MAC帧上交给网络层,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。

实例:

现在H1要与H2进行通信,H1->经过R1转发->经过R2转发->H2

下图表示了不同层次、不同区间的源地址和IP地址

我们可以看出:虽然IP数据报经过路由器的两次转发,但是在其首部的源地址和目的地址始终分别是H1的IP地址和H2的IP地址,经过的两个路由器的地址并不会出现在IP数据报的首部中,路由器只根据目的站的IP地址的网络号对其进行路由选择

MAC帧在不同的网络之间传送时,其源地址和目的地址要改变,从表中我们就可以看到他的变化情况。但是MAC帧的这种变化,在IP层上是看不见的。

我们可以看出,虽然不同网络之间的硬件地址各不相同,但是IP地址却很巧妙的屏蔽了这些复杂的细节。

  • 地址解析协议和反地址解析协议

    地址解析协议(ARP):将IP地址转换为物理地址
    反地址解析协议(RARP):将物理地址转换为IP地址
    

RARP:

反地址解析协议曾经起重要作用,但是如今DHCP中已经包含RARP的功能,因此没有人单独的使用RARP协议了,只需知道是自己主机的硬件地址可以通过RARP协议得到其IP地址即可。

ARP:

虽然网络层使用的是IP地址,但是我们在实际的链路上传输数据帧时,必须使用该网络的硬件地址。

但是IP地址与硬件地址之间不存在简单的映射关系,ARP解决这个问题的方法是在主机的ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表动态更新。

每一个主机都设有一个ARP高速缓存,里面有所在局域网的各主机和路由器的IP地址到硬件地址的映射表,那么主机怎么知道这些地址?

实例:

当主机A要向本局域网的某个主机B发送IP数据包,就现在ARP高速缓存中查找有无主机的IP地址,如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网将MAC帧发送此硬件地址。

如果主机B刚入网或者主机A刚刚加电(高速缓存是空的),就会找不到主机B的IP地址,

此时,主机A会自动运行ARP,按照以下步骤找出主机B的硬件地址:

1、ARP进程在本局域网上广播发送一个ARP请求分组,请求分组的内容是:
自己(主机A)的IP地址和硬件地址以及主机B的IP地址。

2、在本局域网上的所有主机运行的ARP进程都会收到这个请求分组。

3、主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分
组,并写入自己的硬件地址。其余的主机都不会理会这个ARP的请求分组。
(ARP请求分组是广播发送,但是响应分组是普通的单播,从某一个源地址
发送到一个目的地址)

4、主机A收到主机B的ARP响应分组,就在其ARP高速缓存中写入主机B的IP
地址到硬件地址的映射。

以后主机B可能会向主机A通信,所以还得反着来一次,为了减少网络上的通信量,主机A发送的请求分组中包括自己的IP地址到硬件地址的映射写入ARP请求分组。当主机B接收到主机A发来的ARP请求分组时,就顺便把主机A的这地址映射写入主机B自己的ARP高速缓存中,以后直接去高速缓存中查找即可。

图解:

前面说到ARP表示动态更新的,当A与B通信的时候,刚开始好着,后面B的网络适配器换了,B立即更换了一块,因此B的硬件地址就改变了,但是A还要和B通信,由于IP地址还存在,但是以前的硬件地址已经失效了,所以A无法找到B的硬件地址。

ARP中的每一个项目都设置由生存时间,凡是超过生存时间的项目就会从高速缓存中删除掉。因此上面的场景,A找不到主机B,但是过了生存时间,A的ARP缓存中已经删除了B的原先的硬件地址,所以A此时重新广播发送ARP请求分组,找到B。

如果通信的两台主机不再同一个局域网内,那则需要记录路由器的ip地址和硬件地址。

这种IP地址到硬件地址是自动进行的,主机的用户对这种地址解析过程是不知道的,只要主机或路由器和本网络上一个已知IP地址的主机或路由器进行通信,ARP就会自动把这个IP转换为硬件地址。

为什么不直接用硬件地址进行通信,而非要调用ARP来寻找相应的硬件?

这有点类似最开头说的IP网的出现,全世界存在各种网络,有各种各样的硬件地址,要通信就得进行非常复杂的转换,几乎是不可能的。所以抽象出统一的IP地址,连接到因特网的主机只要用统一的IP地址,他们之间的通信就像连接在同一个网络上那么简单方便。而且ARP是自动的,对用户而言是看不到的,所以是非常方便的。

这IP地址有点像抽象类,有各种各样的子类,但是这些子类要和另外一个区域的子类进行通信,那么就需要写大量大量的代码,所以抽象出基类,两个基类互相通信,方便简单。

  • IP数据报

版本:

占4位,指IP协议的版本。通信双方使用的IP协议版本要一致

首部长度——占 4 位,可表示的最大数值

是 15 个单位(一个单位为 4 字节)

因此 IP 的首部长度的最大值是 60 字节。

总长度:

是指首部和数据之和的长度,单位是字节。总长度字段为16,因此数据报的最大长度为2^6-1(65535),总长度必须不超过最大传送单元 MTU

生存时间:

8位,表明数据报在网络中的寿命,指数据报在因特网中最多可经过多少个路由器,显然最大值是255

协议

指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程

协议 ICMP IGMP TCP EGP IGP UDP IPV6 OSPF
协议字段名 1 2 6 8 9 17 41 89

首部校验和

思路:

首先将IP首部即40位16进制的字符串转化为二进制字符串,
然后以每16位为一个字段,分为10个二进制字段。存放在IP1~IP10字符串中;
然后求出每个字段的反码,根据IP数据报格式,可以知道IP6存放的就是校验和,将校验和IP6置位全0;
利用求反码和,求出10个字段反码相加后的值sum,然后对字符串sum取反,得到发送时所用的校验码。
假设接收端的IP首部与发送的是相同的,那么其10个字段的利用反码和算法求出的值应为0

图解:

(图片地址:http://wenku.baidu.com/link?url=em2I8OC8FEg-zHslpMcF5r_m2eYFbzXyYkZ0ChdXdWH9CnRs6htX_6IhVosmecTxOWrF_VCQvII1jM2mYiogi9KoMC1b8bwSCcu3vB-Ub4W

  • IP层转发分组的流程

前面已经说过如果按照目的主机号来制作路由表,那最终的路由表则会过于庞大

所以为了简化路由表,我们用主机所在的网络地址制作路由表,如下图所示:

所以在路由表中,对每一路由最主要的是以下信息:

(目的网络地址,下一跳地址)

所以我们用目的网络来确定下一跳路由器,这样就说明:

IP数据报最终一定可以找到目的主机所在目的网络上的路由器

IP数据报只有到达最后一个路由器时,才试图向主机进行直接交付

同时,路由器还可以采用默认路由简化路由表和减少搜索路由表所用的时间。如下图所示:当目的网络不是N1和N2,就一律选择默认路由,把数据报先交付给路由器R1,让R1在转发给下一个路由器,一直转发到目的网络上的路由器。

IP数据报中只有源IP地址和目的IP地址,数据报是怎么找到下一跳路由器?

是通过ARP,首先在路由表中得到下一跳的路由器的IP地址,然后将这个地址通过ARP转换成硬件地址,然后发送到下一跳路由器,然后不断重复进行

分组转发算法 :

(1)从数据报的首部提取目的主机的 IP 地址 D,得出目的网络地址为 N。

(2)若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。

(3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由
表中所指明的下一跳路由器;否则,执行(4)。(特殊情况)

(4)  若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。

(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
(6)  报告转发分组出错。

摘自:计算机网络.第五版.谢希仁

参考:TCP/IP详解.卷一

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 12:24:23

计算机网络读书笔记-----网络层的相关文章

计算机网络学习笔记--网络层知识点整理

为什么要划分网络层? 不用的网络有不同的协议和标准,为了可以在不同网络之间互访,共享双方的资源,并且还要保持每个计算机网络本来的独立性,所以才划分出了网络层,并制定了专门的协议来负责网络间通信. 网络层的主要功能: 1.屏蔽网络差异,提供透明传输. 为传输层提供服务:面向连接的网络服务(虚电路服务)和无连接的网络服务(数据报服务). 2.为网络通信提供路由选择 什么是路由选择? 按一定的原则和路由选择算法在多个节点的通信子网中选择一条到达目的节点的最佳路径的过程. 确定路由选择的策略成为路由算法

计算机网络读书笔记-----数据链路层

首先区分链路与数据链路的概念 链路只是从一个节点到相邻节点的一段物理线路,中间没有任何其他的交换节点.所以说链路只是一条路径的组成部分. 数据链路:是必要的物理线路和必要的通信协议构成数据链路. 数据链路层的协议数据单元---帧 类似在网络层协议数据单元是IP数据报 路由器的协议栈只有三层:网络层,链路层,物理层 数据链路层的任务是:把网络层交下来的数据发送到链路上,以及把接收到的帧中的数据取出并上交给网络层. 当两个主机进行通信时:应用进程将数据从应用层逐层往下传,经过传输层再到网络层,网络层

计算机网络学习笔记--网络层之IP地址与子网

IPv4地址: 我们知道在网络层(TCP/IP体系结构的网际互联层),最重要的一个协议就是IP协议,现在正处于IPv4和IPv6的过渡时期,但目前来说,IPv4仍为主流,所以主要讲Ipv4. IP地址基本格式: 计算机内部IP地址的格式是32位的二进制数表示的,为了让人们看起来方便,通常采用点分十进制来表示IP地址,如192.168.1.25,其中用来分隔各段的那个点,也是为了方便人们阅读加上的,计算机内部并没有这个点. 公网IP地址和私网IP地址: 公网Ip地址是指可以在广域网上直接使用,直接

计算机网络读书笔记-----数据链路层的可靠性

此篇是为了引出TCP的可靠机制. 停止等待协议: 在计算机网络发展的初期,通信网的传输质量普遍不是很好,所以数据传输的差错率较大.所以数据链路层就必须解决可靠传输的问题. 停止等待是最简单也是最基本的数据链路层协议 工作原理如下: 发送端每发送完一帧后就停止发送,等待接收端的确认,如果收到了接收端发来的确认帧,就继续发送下一帧. 在接收端,每收到一个无差错的帧,就将其交付给上层,并给发送端返回一个确认帧. 接收端如果收到有差错的帧,就悄悄的丢弃这个帧,其余什么也不做.发送端长时间没有收到接收端发

计算机网络读书笔记-----应用层

每个应用层的协议都是为了解决某一类应用问题,而问题的解决又往往是通过不同主机之间多个应用进程之间的通信和协作工作来完成的.应用层的具体内容就是规定应用进程在通信时遵循的协议. DNS(Domain Name System ) DNS的出现: 用户与因特网进行通信时,显然不愿意使用很难记忆的32位二进制主机,即使点分十进制的IP地址也不容易记忆,相反愿意使用某种易于记忆的主机名. 在早期的时候,整个网络上只有数百台计算机,那时使用一个hosts的文件,列出所有的主机名字和相应的IP地址,用户只要输

计算机网络读书笔记-----UDP vs TCP

UDP: UDP用户数据报协议在IP数据报服务上只增加了分用复用和差错检测的功能. UDP是不具有可靠性的数据报协议. UDP的特点: UDP是无连接的: UDP不保证可靠交付,即尽最大努力交付 UDP是面向报文的: 发送方的UDP对应用程序交下来的报文,在添加首部后就直接交付给IP层.对应用层交下来的报文,既不拆分也不合并,而是保留这些报文的边界. 对IP层交上来的UDP数据报,在去除首部后就直接交给上层的应用进程,所以说UDP数据报一次交付一个完整的报文.如图所示: UDP没有拥塞控制. 所

读书笔记:计算机网络4章:网络层

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 本章详细讲解了网络层的一些概念.通常网络层是通过IP协议实现的,网络层是所有协议的核心.本章介绍了I

【读书笔记】计算机网络1章:课程介绍、协议、分层

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 本章讲述了这门课程的大致情况,讲述了协议.协议层等基本概念. 目标和动机 课程的主要目标就是介绍计算

读书笔记:计算机网络9章:QoS服务质量

章节概述 本章节主要讲QoS服务质量.涉及到网络层.传输层和应用层. QoS和用户需要得到的服务种类有关.不同的服务需要的带宽.延迟.丢包率都是不一样的.QoS是未来互联网的重要问题之一. 目前的互联网没有服务质量保证.因为目前的网络只是将数据包尽力投递到对方服务器,然而投递的速度.延迟.丢包率都是没有保障的.但是有时候"尽力"投递是不够的,因为有些应用需要有性能方面有保障,比如VoIP电话.虽然我们不能增加现有网络的带宽,但是我们可以给用户分配不同的带宽给用户带来更多利益. 举个例子