计算机网络学习笔记(一)-- 计算机网络概述
计算机网络学习笔记(二)-- 物理层
计算机网络学习笔记(三)-- 数据链路层
计算机网络学习笔记(五)-- 运输层
1. 网络层提供的两种服务
- 虚电路服务
- 数据报服务

2. 网际协议 IP
网际协议 IP 是 TCP/IP 体系中两个最重要的协议之一,也是最重要的因特网标准协议之一。与 IP 协议配套是用的四个协议:
- 地址解析协议 ARP:是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
- 网际控制报文协议 ICMP:提供差错报告和询问报文,以提高 IP 数据交付成功的机会
- 网际组管理协议 IGMP:用于探寻、转发本局域网内的组成员关系。

ARP 画在最下面,因为 IP 经常要使用这个协议。 ICMP、IGMP 画在这一层的上部,因为它们要使用 IP 协议。
-
虚拟互连网络
因为没有一种单一的网络能够适应所有的用户需求,所以网络互连也变得困难,所以需要一些中间设备:
- 物理层中间设备:转发器(repeater)
- 数据链路层中间设备:网桥或桥接器(bridge)
- 网络层中间设备:路由器(router)
- 网络层以上的中间设备:网关(gateway)
-
分类的 IP 地址
IP 地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。由因特网名字与号码指派公司 ICANN 进行分配。
IP地址编制方法的三个阶段:
- 分类的IP地址
- 子网的划分
- 构成超网
IP 地址::={<网络号>,<主机号>}
一个网络号在整个互联网范围内必须是唯一的,主机号在它前面的网络号所指明的网络范围内必须是唯一的。一个 IP 地址在整个互联网范围内是唯一的。
- A类
- 由1字节的网络地址和3字节主机地址组成。
- 网络地址的最高位必须是“0“,可指派的网络数为2^7 - 2,减2的原因是0.0.0.0对应“本网络”,另外一个是127.0.0.1是本地软件的回环地址,用于测试自己电脑IP地址是否可用。
- 地址范围 1.0.0.0 到 126.255.255.255。
- 最大主机数为 2^24 - 2 = 16777214 台,减2的原因是全0的主机号字段代表该IP地址是"本主机“,全1表示”所有的“,表示该网络上的所有主机。
- B类
- 由2字节的网络地址和2字节主机地址组成。
- 网络地址的最高位必须是“10”,可指派的网络数为 2^14 -1,因为最高位为10,所以不存在全0全1的情况,但是B类网络地址128.0.0.0是不指派的,可指派最小网络地址是128.1.0.0。
- 地址范围 128.0.0.0 - 191.255.255.255。
- 最大主机数为2^16 - 2 = 65534台,减2同样是全0全1情况。
- C类
- 由3字节的网络地址和1字节主机地址组成
- 网络地址的最高位必须是“110”,可指派的网络数为2^21 - 1,192.0.0.0不指派,最小可指派网络地址是192.0.1.0
- 地址范围192.0.0.0 - 223.255.255.255
- 最大主机数为2^8 - 2 = 254台,减2同样是全0全1情况。
- D类是多播地址,“1110”开始
- E类地址保留为今后使用,“11110”开头
-
IP 地址与硬件地址
物理地址是数据链路层和物理层使用的地址,而 IP 地址是网络层和以上各层使用的地址,是一种逻辑地址。
IP 地址放在 IP数据报 的首部,而硬件地址放在 MAC帧 的首部。当数据报放入数据链路层的 MAC帧 中后,整个 IP数据报 就成为 MAC帧 的数据,因而在数据链路层看不见数据报的 IP 地址。
-
地址解析协议 ARP
ARP是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
每个主机都有一个 ARP 高速缓存,存放映射表。如果一个 IP 地址 到 MAC 地址的映射不在该表中,主机通过广播的方式发送 ARP 请求分组,匹配 IP 地址的主机会发送 ARP 响应分组告知 MAC 地址。
A 收到 B 的 ARP响应分组后就在其 ARP 高速缓存中写入 B 主机 IP 地址到硬件地址的映射。同时 B 也会将 A的映射写入到自己的ARP 高速缓存。
ARP 对保存在高速缓存中的每一个映射地址项目都设置生存时间。凡超过生存时间的项目就从高速缓存中删除掉。
-
IP 数据报的格式
-
版本:IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。
-
首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。
-
区分服务(服务类型):占8位,未使用。
-
总长度:IP报文的总长度。报头的长度和数据部分的长度之和。占16位,因此数据报的最大长度为2^16-1=65535字节(实际极少遇到)。
在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段最大长度,这称为最大传送单元MTU。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层规定的MTU值。如:最常用的以太网就规定其MTU值是1500字节。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
IP协议规定,在因特网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。即:假定上层交下来的数据长度有512字节,加上最长的IP首部60字节,再加上4字节的富裕量。否则就要进行分片。
-
标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
-
标志:共3位。R、DF、MF三位。目前只有后两位有效,DF(don’t fragment)位:为1表示不分片,为0表示分片。MF(more fragment):为1表示“更多的片”,为0表示这是最后一片。
-
片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)
IP数据报分片举例1:一数据报总长度3820字节,其数据部分3800字节长,需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分为3个数据报片,其数据部分的长度分别为1400,1400,1000字节。原始数据报首部被复制为各数据片的首部,但必须修改有关字段的值。分片结果如下:
-
生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。
-
协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
-
首部校验和:只检验数据报的首部,但不包括数据部分。
-
源IP地址:标识IP数据报的源端设备。32位
-
目的IP地址:标识IP数据报的目的地址。32位
-
-
IP 层转发分组的流程
每一条路由最主要的两个信息:(目的网络地址,下一跳地址)
- 特定主机路由:可使网络管理人员更方便地控制网络和测试网络。
- 默认路由:在一个网络只有很少的对外连接时很有用,可以以减小路由表所占用的空间和搜索路由表所用的时间。
分组转发算法:
(1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
(2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)
(6) 报告转发分组出错。
3. 划分子网和构造超网
-
两级IP地址缺陷
- IP 地址空间的利用率有时很低。
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 两级的 IP 地址不够灵活
-
子网划分的基本思路
-
划分子网纯属一个单位内部的事情,单位对外仍然表现为没有划分子网的网络。
-
原来的两级 IP 地址在本单位内部就变为三级 IP 地址:网络号、 子网号和主机号。
IP 地址::={<网络号>,<子网号>,<主机号>}
-
路由器在收到IP数据报后,按目标网络号和子网号定位目标子网。
-
-
子网掩码
从 IP 数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分。
把 IP 地址的子网掩码和收到的数据报的目的 IP 地址逐位相与 (AND) ,得出了所要找的子网的网络地址。
如果一个网络不划分子网, 那么该网络的子网掩码就使用默认子网掩码。
子网数是根据子网号(subnet-id) 计算出来的。若 subnet-id n 位,则共有 2^n 种可能的排列。除去全 0 和全 1 这两种情况,就得出表中的子网数*(2^ n - 2)*。
同样的 IP 地址和不同的子网掩码可以得出相同的网络地址。但是,不同的掩码的效果是不同的。
-
使用子网时分组的转发
使用子网划分后,路由表必须包含以下三项内容:目的网络地址、 子网掩码和下一跳地址。
在划分子网的情况下,路由器转发分组的算法如下:
(1) 从收到的数据报的首部提取目的 IP 地址 D。
(2) 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和 D 逐位相”与 “(AND 操作),若匹配,则进行直接交付;否则就是间接交付,执行(3) 。
(3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4) 。
(4) 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和 D 逐位相”与 “(AND 操作),其结果为 N 。若 N 与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5) 。
(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否 则,执行(6)
(6) 报告转发分组出错。
-
无分类编址 CIDR (构造超网)
-
网络前缀
CIDR 的记法是无分类的两级编址。
IP 地址::={<网络前缀>,<主机号>}
前面部分是“网络前缀"(简称 “前缀"),用来指明网络,后面部分则用来指明主机。
“斜线记法 ”(slash notation) ,或称为 CIDR 记法,即在 IP 地址后面加上 斜线 "/",然后写上网络前缀所占的位数。
CIDR 使用的地址掩码也可继续称为子网掩码。斜线记法中,斜线后面的数字就是地址掩码中 1 的个数。
网络前缀越短,其地址块所包含的地址数就越多。
最长前缀匹配,即选择两个匹配的地址中更具体的一个。使用二叉线索查找路由表。
-
4. 网际控制报文协议 ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了ICMP,ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。

-
ICMP报文的种类
- ICMP差错报告报文
- ICMP询问报文
-
ICMP 询问报文有两种:
- 回送请求和回答报文:用来测试目的站是否可达以及了解其有关状态。由主机或路由器向一个特定的目的主机发出的询问。
- 时间戳请求和回答报文:用于时钟同步和时间测量。
5. 互联网的路由选择协议
**静态路由选择策略(非自适应路由选择)**与 动态路由选择策略(自适应路由选择)。
-
分层次的路由选择协议
把整个互联网划分为许多较小的自治系统,记做 AS。
分类:
- 内部网关协议 IGP:RIP 、OSPF 协议。
- 外部网关协议 EGP:BGP协议。
-
内部网关协议 RIP
RIP 是一种分布式的基于距离(也叫跳数)向量的路由选择协议。RIP 允许一条路径最多只能包含 15 个路由器。因此“距离”等于 16 时即相当于不可达。可见 RIP 只适用于小型 互联网。
-
特点
- 仅和相邻路由器交换信息。
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表。
- 按固定的时间间隔交换路由信息。
-
距离向量算法
(1) 对相邻地址 X 发来的 RIP 报文,先将报文中的所有下一跳字段更改为 X,并把跳数都加一。
(2) 对修改后的每条路由信息做下面的操作:
①若原来的路由表中没有目的网络 N, 则把该项目添加到路由表中;否则执行②;
②若下一跳路由器地址是 X, 则把收到的项目替换原路由表中的项;否则执行③;
③若收到的项目中的距离小于路由表中的距离,则进行更新,否则什么也不做。
(3) 若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为 16。
(4) 返回。
-
RIP 协议的报文格式
一个 RIP 报文最多可包括 25 个路由,因而 RIP 报文的最大长度是 4 + 20 X 25 = 504 字节。如超过,必须再用一个 RIP 报文来传送。
优点:
- 实现简单,开销较小。
缺点:
- 好消息传得快,坏消息传的慢。
-
内部网关协议 OSPF(开放最短路径优先)
OSPF最主要的特征就是使用分布式的链路状态协议。
-
特点:
- 使用洪泛法向本自治系统中所有路由器发送信息。
- 发送的信息是与本路由器相邻的所有路由器的链路状态。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
-
OSPF 协议报文格式
OSPF 不用 UDP 而是直接用 IP 数据报传送。
(1) 版本当前的版本号是 2。
(2) 类型可以是五种类型分组中的一种。
(3) 分组长度 包括 OSPF 首部在内的分组长度,以字节为单位。
(4) 路由器标识符 标志发送该分组的路由器的接口的 IP 地址。
-
OSPF 的五种分组类型
- 问候(Hello) 分组,用来发现和维待邻站的可达性。
- 数据库描述(Database Description)分组,向邻站给出自己的链路状态数据库 中的所有链路状态项目的摘要信息。
- 链路状态请求(Link State Request)分组,向对方请求发送某些链路状态项目的详细信息。
- 链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。
- 链路状态确认(Link State Acknowledgment)分组,对链路更新分组的确认。
每两个相邻路由器每隔 10 秒钟要交换一次问候分组。
OSPF 还规定每隔一段时间,要刷新一次数据库中的链路状态。
-
-
外部网关协议 BGP
边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。 BGP 采用了路径向量路由选择协议,它与距离向量协议(如 RIP) 和链路状态协议(如 OSPF) 都有很大的区别。
BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。BGP 发言人与其他 AS BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话。
-
BGP 的四种报文类型
(1) OPEN (打开)报文,用来与相邻的另一个 BGP 发言人建立关系,使通信初始化。
- 共有 6 个字段,即版本 (1 字节,现在的值是 4) 、本自治系统号 (2 字节, 使用全球唯一的 16 位自治系统号,由 ICANN 地区登记机构分配)、保持时间 (2 字节,以 秒计算的保持为邻站关系的时间)、 BGP 标识符 (4 字节,通常就是该路由器的 IP 地址)、 可选参数长度 (1 字节)和可选参数。
(2) UPDATE (更新)报文,用来通告某一路由的信息,以及列出要撤销的多条路由。
- 共有 5 个字段,即不可行路由长度 (2 字节,指明下一个字段的长度)、 撤销的路由(列出所有要撤销的路由)、路径属性总长度 (2 字节,指明下一个字段的长 度)、路径属性(定义在这个报文中增加的路径的属性)和网络层可达性信息 NLRI (Network Layer Reachability Information) 。最后这个字段定义发出此报文的网络,包括网络前缀的位数、 IP 地址前缀。
(3) KEEPALIVE (保活)报文,用来周期性地证实邻站的连通性。
- 只有 BGP 19 字节长的通用首部。
(4) NOTIFICATION (通知)报文,用来发送检测到的差错。
- 有 3 个字段,即差错代码 (1 字节)、差错子代码 (1 字节)和差错数据(给出有关差错的诊断信息)。
-
-
路由器的构成
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
-
路由器的结构
由**路由选择部分(控制部分)**和 分组转发部分组成。
-
分组转发部分
-
输入端口
为了使交换功能分散化,往往把复制的转发表放在每一个输入端口中,路由选择处理机负责对各转发表的副本(影子副本)进行更新。
-
输出端口
-
交换结构
交换结构把分组从一个输入端口转移到某个合适的输出端口。
-
-
-
6. IPv6
IPv6 数据报由两大部分组成,即基本首部和有效载荷(净负荷)。有效载荷允许有零个或多个扩展首部,但扩展首部不属于首部。
-
IPv6的基本首部
-
版本:占4位,IPv6 该字段是6.
-
通信量类:8位,区分不同的 IPv6 数据报的类别或优先级。
-
流标号:20位,对实时数据有用,对非实时数据无用。
-
有效载荷长度:16位,表示除基本首部(包括扩展首部)以外的字节数,最大值是 64 KB。
-
下一个首部:8位,相当千 IPv4 的协议字段或可选字段。
- 无扩展首部时,作用和 IPv4 的协议字段一样,它的值指出了基本首部后面的数据应交付 IP 层上面的哪一个高层协议(6代表TCP,17代表UDP)。
- 有扩展首部时,值标识后面第一个扩展首部的类型。
-
跳数限制:8位,防止数据报在网络中无限期地存在。路由器在转发数据报时,要先把跳数限制字段中的值减1。为零时,就要把这个数据报丢弃。
-
源地址:128 位。发送端的 IP 地址。
-
目的地址:128 位。接收端的 IP 地址。
-
-
IPv6 的地址
-
三种目的地址类型:单播,多播,任播。
-
每个IPv6地址128位,采用冒号十六进制记法。把每个 16 位的值用十六进制值表示,各值之间用冒号分隔。允许把数字前面的 0 省略,
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF 把 0000 中的前三个 0 省略了
一连串连续的零可以为一对冒号所取代(零压缩法),但在一个地址中只能使用一次。
FF05:0:0:0:0:0:0:B3 可记为 FF05: :B3
CIDR 的斜线表示法仍然可用。60 位的前缀 12AB00000000CD3(16进制表示,每个字符代表 4 位二进制数字)
可记为12AB:0000:0000:CD30:0000:0000:0000:0000/60
或12AB::CD30:0:0:0:0/60
或12AB:0:0:CD30::/60
不可记为12AB:0:0:CD3/60 (最后的0不能省略)
或12AB::CD30/60 (这是地址 12AB:0:0:0:0:0:0:CD30 的前 60 位二进制)
或12AB: :CD3/60 (这是地址 12AB:0:0:0:0:0:0:0CD3 的前 60 位二进制)
-
-
IPv4 IPv6 过渡
-
双协议栈
-
隧道技术
-
-
ICMPv6
地址解析协议 ARP 和网际组管理协议 IGMP 的功能都被合并到 ICMPv6。
7. IP多播
-
概念
多播数据报和一般的 IP 数据报的区别就是它使用 D类 IP 地址作为目的地址,地址范围是 224.0.0.0 到 239.255.255.255,并且首部中的协议字段值是 2, 表明使用网际组管理协议 IGMP。多播地址只能用于目的地址,而不能用于源地址。多播数据报不产生 ICMP 差错报文。
-
IP 多播需要两种协议
网际组管理协议 IGMP 和 多播路由选择协议。
-
IGMP
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组。
-
多播路由选择协议
把多播数据报用最小代价传送给所有的组成员。
三种方法:
- 洪泛与剪除。
- 隧道技术。
- 基于核心的发现技术。
-
8. 虚拟专用网 VPN 和网络地址转换 NAT
-
虚拟专用网 VPN
仅在本机构有效的 IP 地址称为本地地址,全球唯一的 IP 地址称为全球地址。专用地址(可重用地址)只能用做本地地址不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一 律不进行转发。
A、B内部的通信量都不经过互联网,X 和 Y 通信时,X将报文交付给R1,经R1加密后,重新加上数据报首部,此时源地址变为R1,目的地址变为R2。R2收到后进行解密,发现目的地址是Y,将报文交付给Y。
-
网络地址转换 NAT
解决的问题就是专用网内部的一些主机本来已经分配到了本地 IP 地址 (即仅在本专用网内使用的专用地址),但现在又想和互联网上的主机通信。
方法:安装NET路由器,它至少有一个有效的外部全球 IP 地址,NAT 路由器上将其本地地址转换成全球 IP 地址就能实现本地地址和全球地址通信了。
通过 NAT 地址转换表将旧的目的 IP 地址, 转换为新的目的 IP 地址。