因特网
因特网的核心部分是由许多网络
和把它们互连起来的路由器
组成,而主机处在因特网的边缘部分
。
路由器(网络层)
路由器:实现分组交换的关键构建,在路由器中的输入和输出端口之间没有直接连线
(并非面向连接)。
任务是转发收到的分组
-- 网络核心部分最重要的功能。路由器收到一个分组,先暂时存储下来,再检查其首部,查找转发表,按照首部的目的地址,找到合适的接口转发出去,把分组交给下一个路由器。这样一步一步地以存储转发
的方式,把分组交付到最终的目的主机。目的主机收到分组后剥去首部还原成报文。
路由器处理分组的过程是:
- 把收到的分组先放入缓存(暂时存储);
- 查找转发表,找出到某个目的地址应从哪个端口转发;
- 把分组送到适当的端口转发出去
报文:
报文。在发送报文之前,先把较长的报文划分成为一个个更小的等长
数据段, 在每一个数据段前面,加上一些必要的控制信息组成的
首部(也称为
包头)后,就构成了一个
分组,也成为
包`。分组是因特网中传送的数据单元。而分组的首部非常重要,因为首部包含了诸如目的地址和源地址等重要信息,每一个分组才能在因特网中独立地选择传输路径。
适配器(数链层)
适配器/网络接口卡/网卡 适配器的重要功能:
- 实现以太网协议
- 进行串行/并行转换
...
即计算机通过适配器来和局域网进行通信。
集线器Hub(物理层)
集线器很像一个多接口的转发器,工作在物理层. 用集线器可以在物理层上扩展局域网。
网桥(数链层)
用网桥可以在数据链路层扩展局域网。
它根据 MAC 帧的目的地址对收到的帧进行转发。目前用的最多的是透明网桥
。
数据链路层
数据链路层有三个目的:
- 为 IP 模块发送和 接收 IP 数据报
- 为 ARP 模块发送 ARP 请求和接收 ARP 应答
- 为 RARP 发送 RARP 请 求和接收 RARP 应答
数据链路层传送的是:帧
。无论是以太网还是IEEE802封装都采用48bit的目的地址和源地址-- 硬件地址。(ARP/RARP)对32bit的IP地址和48bit的硬件地址进行映射。
数据链路层三个基本问题:
1. 封装成帧
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部(用于帧定界),然后就构成了一个帧。确定帧的界限。
- 透明传输
无论是以太网(46bytes)还是IEEE802(38bytes)都对帧有最小长度要求, 为保证这一点,需要在不足的空间插入填充字节
。还可以利用字节填充法解决透明传输的问题 。
- 差错控制
在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC
的检错技术。
仅用循环冗余检验只能做到无差错的接受:凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)要做到可靠传输
(即发送什么就收到什么)就必须再加上确认
和重传
机制。
PPP 协议
现在全世界使用得最多的数据链路层协议是点对点协议 PPP
. 用户使用拨号电话线接入因特网时,一般都是使用 PPP 协议。
PPP协议不需要做到: 纠错(单要检查错误),流量控制,多点线路...
三个组成部分:
- 一个将IP数据报封装到串行链路的方法
- 链路控制协议
- 网络控制协议
广播信道 - 局域网的数据链路层
局域网最重要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。 局域网的拓扑:1 星形网 2 总线网 (树形网) 3 环形网 (令牌环) -- 现在以太网是局域网代名词。
局域网(以太网)的工作层次跨越了数链层 和 物理层。计算机通过使用适配器和互联网通信。 以太网提供的服务是不可靠的交付,即尽最大努力的交付。目的站收到有错误的数据帧就丢掉此帧。
以太网中,硬件地址又称为物理地址/MAC地址(48位),实际上就是适配器地址。
网络层
网络层向上只提供简单灵活的,无连接的,尽最大努力交付(不可靠)的数据报服务。
不可靠:IP协议不能保证IP数据报能成功地到达目的地。仅提供最好的传输服务,如果发生错误:就丢弃该数据报。
无连接: IP不维护任何关务后续数据报的状态信息。每个数据报的处理都是相互独立的。 -- IP数据报可以不按发送顺序接收。
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。与 IP 协议配套使用的还有三个协议:
-
地址解析协议 ARP
-
网际控制报文协议 ICMP
-
网际组管理协议 IGMP
具体关系如图:
IP选路
IP路由选择分两种情况,对于主机来说,如果是在PPP点对点或者共享网络(局域网)上,那么IP数据报就可以从源主机直接发送到目的主机;对于互联网来说,源主机得首先把IP数据报发送到默认路由器
,由该路由器进行转发改数据报。
IP层既可以配置成主机的功能,也可以配置成路由器的功能。区别就是主机不在不同网络接口间转发数据报,而路由器进行转发。
进一步说就是,IP层在内存中有一个路由表, 当收到一份数据报并进行发送的时候,IP层要对路由表进行搜索一次。当该数据报是来自某个网络接口时,IP首先检查目的IP是否为本机IP地址之一或者IP广播地址。
- 如果是,数据报就被发送到有IP首部协议字段所指定的协议模块进行处理;
- 如果不是,那么(1)如果IP层被设置为路由器功能,那么就对数据报进行转发;否则(2)丢弃该数据报
下面介绍下路由表
,在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
。根据目的网络地址就能确定下一跳路由器,这样1.IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(despite要通过多次的间接交付)2. 只有到达最后一个路由器时,才试图向目的主机进行直接交付。
路由表的每一项包括:
- 目的IP(either 主机地址 or 网路地址)
- 下一跳路由器的IP地址
- 标志(one of the symbol indicates 目的IP是网络地址还是主机地址;another indicates 下一站路由器是否是真正的路由器还是直接相连的接口)
- 为数据报的传输指定一个网络接口
IP层执行选路机制(一组决定把那些路由放入路由表的规则);而daemon守护程序提供选路策略。
分组转发算法
(1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
(2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错
IP搜索路由表的3个步骤:
1. 搜索路由表,寻找能与目的IP地址完全匹配的表目。
2. 搜索路由表,寻找能与目的网络号相匹配的表目。
3. 搜索路由表,寻找标为默认的表目。
IP地址
分类IP地址
每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
两级IP可以记为 IP地址 ::={<网络号>,<主机号>}
网络类别 | 最大网络数 | IP地址范围 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络最大主机数 |
---|---|---|---|---|---|
A | 126(2^7-2) | 1.0.0.0-126.255.255.255 | 1 | 126 | 16777214 |
B | 16383(2^14-1) | 128.1.0.0-191.255.255.255 | 128.1 | 191.255 | 65534 |
C | 2^21-1 | 192.0.1.0-223.255.255.0 | 192.0.1 | 223.255.255 | 254 |
IP地址特点:
- IP 地址是一种分等级的地址结构
路由器仅根据目的主机所连接的网络号
来转发分组。 - 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口
- 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
- 所有分配到网络号 net-id的网络,范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
划分子网
对基本两级IP结构的改进,因为A类地址和B类地址为主机号分配了太多的空间,而事实上不需要安排这么多主机。 所以不是把IP地址看成单纯的一个网络号+主机号。而是进一步把主机号划分为一个子网号+主机号。 所以IP地址 = 网络号+子网号+主机号。
子网掩码
:除了IP地址外, 主机还需要知道有多少比特用于子网号,有多少比特用于主机号,也就是二者界限。
这是在引导过程通过子网掩码来确定的。这个掩码是32bit
:值为1的比特留给网络号和子网号。为0的比特留给主机号。
(IP 地址) AND (子网掩码) = 子网的网络地址
给定IP地址和子网掩码以后,主机就可以确定IP数据报的目的是:(1)本子网的主机;(2)本网络中其他子网的主机;(3)其他网络的主机。
- 子网掩码是一个网络或一个子网的重要属性。
- 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
- 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
- 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
IP地址与硬件地址
网络层及以上使用IP地址(放在IP数据报首部),链路层及以下使用MAC硬件地址(放在MAC帧首部)
ARP协议
-
什么是 ARP? ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在 IP 以太网中,当一个上层协议要发包时,有了该节点的 IP 地址,ARP 就能提供该节点的 MAC 地址。
-
为什么要有 ARP?
OSI 模式把网络工作分为七层,彼此不直接打交道,只通过接口 (layre interface). IP 地址在第三层, MAC 地址在第二层。
协议在发生数据包时,首先要封装第三层 (IP 地址)和然后在封装第二层 (MAC 地址)的报头, 但协议只知道目的节点的 IP 地址,不知道其物理地址,又不能跨第二、三层,所以得用 ARP 的服务。
详细说明:
Ø 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP 协议就起到这个作用
Ø 当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 位的以太网地址来确定目的接口的,设备驱动程序从不检查 IP 数据报中的目的 IP 地址。ARP(地址解析)模块的功能为这两种不同的地址形式提供映射:32 位的 IP 地址和 48 位的以太网地址
每一个主机都设有一个 ARP 高速缓存(ARP cache)
---ARP协议高效运行的关键,为了减少网络上的通信量。里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。ARP高速缓存在每一项内容都有一个定时器,根据它来删除不完整和完整的表项。
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址
arp -a
arp -d
该命令可以检查ARP高速缓存。
-a : 显示高速缓存中的所有内容。
-d :删除ARP高速缓存的某一项内容。
需要注意:ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做
ICMP协议
为了提高IP数据报交付成功的机会
,在IP层使用了网络控制报文协议ICMP.
ICMP允许主机或路由器报告差错情况
和提供有关异常情况
的报告。ICMP 报文的种类有两种,即ICMP 差错报告报文
和ICMP 询问报文
.
ICMP差错报告报文有5种:
- 终点不可达
- 源点抑制
- 时间超过
- 参数问题
- 改变路由
ICMP差错报告报文的数据字段的内容
不应发送ICMP差错报告报文的几种情况
- 对ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
路由选择协议
自治系统和内部网关协议IGP(RIP, OSPF),外部网关协议EFP(BGP)
RIP
RIP是一种分布式基于距离向量的路由选择协议
原理:要求网络中每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(这是一组距离,即距离向量)。
RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”. 它允许一挑路径最多只包括15个路由器,当距离最大值为16的时候相当于不可达。所以RIP只能用于小型互联网。 RIP不能再两个网络直径同时使用多条路由,RIP选择一个具有最少路由器的路由(最短路由),哪怕还存在另一条告诉但路由较多的路由。
RIP协议的三个要点:
-
仅和
相邻路由器
交换信息
RIP协议让互联网中的所有路由器都和自己的相邻路由器不断交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
-
交换的信息是当前本路由器所知道的
全部信息
,即自己的路由表 - 按固定的时间间隔
交换路由信息
RIP 协议的收敛(convergence)过程较快,即在自治系统中所有的结点都得到正确的路由选择信息的过程.
优点:简单
缺点:当网络出现故障时,要经过比较长的比较时间才能将此信息传送到所有的路由器;
而且限制了网络的规模,所能使用的最大距离是15;
路由器之间交换的路由信息是路由器中完整的路由表,因而随着网络规模的扩大,开销也就增加。
OSPF
是分布式的链路状态协议
OSPF协议的三个要点:
向本自治系统中所有路由器发送信息
,这里使用的方法是洪泛法- 发送的信息是与本路由器相邻的所有路由器的链路状态(本罗尤其都和哪些路由器相邻),但这只是路由器所知道的部分信息。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫作区域。-- 划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
OSPF 优点:
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
- OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms。
外部网关协议BGP
BGP是不同自治系统的路由器之间交换路由信息的协议。
BGP力求寻找一条能够到达目的网络且比较好
的路由, 而并非找到一条最佳路由
。BGP采用了路径向量路由选择协议。
路由器
是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。namely, 将路由器某个输入端口收到的分组,按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。
转发
:就是路由器根据转发表将用户的IP数据表从合适的端口转发出去
路由选择
: 是按照分布式算法, 根据各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。
路由表是根据路由选择算法得出的,转发表是从路由表得出的。
单播、多播、广播
-
单播 每个以太网帧包含源主机和目的主机的以太网地址。通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口。在此方式下,任意两个主机的通信不会干扰网内其他主机。
-
广播 一个主机要向网上的所有其他主机发送帧,这就是广播。
-
多播 处于单播和广播自己:帧仅传送给属于多播组的多个主机。
主机对信道传送过来帧的过滤过程如图:
首先:通常网卡仅接收那些目的地址为网卡物理地址
或广播地址
的帧。对于以太网,当地址中最高字节的最低位
设置为1
时表示该地址是一个多播地址
,用十六进制可表示为0 1 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0
(以太网广播地址ff : ff : ff : ff : ff : ff
可看作是以太网多播地址的特例)
其次,设备驱动程序接收到帧,对其进行帧过滤:首先帧类型必须制定要使用的协议(IP,ARP)。其次,进行多播过滤来检测该主机是否属于多播地址说明的多播组。
广播
4种IP广播地址:
- 受限的广播地址
即255.255.255.255
。
该地址用于主机配置过程中 IP 数据报的目的地址,在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。 - 指向网络的广播
即主机号为全1的地址。
A类网络 广播地址为netid.255.255.255。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。 -
指向子网的广播 即主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。
例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码是255.255.255.0时,该地址就是指向子网的广播地址。但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。
- 指向所有子网的广播
指向所有子网的广播地址的子网号及主机号为全1。
例如,如果目的子网掩码为255.255.255.0,那么I P地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络
没有划分子网,这就是一个指向网络的广播。
广播是一种应该谨慎使用的功能。在许多情况下, I P多播被证明是一个更好的解决办法
多播
IP多播提供两类服务:
1) 向多个目的地址传送数据。
2) 客户对服务器的请求。
使用多播可以明显减轻网络中各种资源的消耗。
多播数据报与一般的IP数据报 区别是它使用D类IP地址作为IP地址,并且首部的协议字段是2,表明使用IGMP协议。此外多播数据报不产生ICMP差错报文,因此不对PING命令产生响应。;
多播组地址
多播数据报的目的地址一定不能写入目的主机的IP地址,因为在同一时间可能有成千上万个主机要加入同一多播组。所以多播数据报不能再其首部写入这样多的主机IP地址。 -- 所以在多播数据报的目的地址写入的是多播组的标示符,即IP地址的D类地址。然后设法让加入到这个多播组的主机的IP地址与多播组的标示符关联起来。
多播使用组地址
--- IP使用D类地址支持多播。多播地址只能用于目的地址,而不能用于源地址。
分配的28 bit均用作多播组号而不再表示其他。 而这28位的前5位不能用来构成以太网的硬件地址。
IP地址范围224.0.0.0
到239.255.255.255
.
D 类 IP 地址与以太网多播地址的映射关系
IP多播需要2种协议
- IGMP 网际组管理协议
为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP 。 即IGMP是让连接在本地局域网的多播路由器知道本局域网是否有主机参加或退出了某个多播组。 - 多播路由选择协议
连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。
配置命令
netstat
接口和网络的有关信息可以通过ifconfig和netstat命令可以获得,包括接口IP地址,子网掩码,广播地址和MTU.
查看路由表的命令:
netstat -rn
ping (IP层命令)
ping 用来测试两个主机自己的连通性,执行ping指令使用ICMP传输协议发送请求并发出要求回应的信息。
ping是应用层直接使用网络层ICMP的例子,它没有通过运输层的TCP/UDP
traceroute/tracert
Traceroute用来跟踪一个分组从源点到终点的路径。
Traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。
arp
arp -a
arp -d
该命令可以检查ARP高速缓存。
-a : 显示高速缓存中的所有内容。
-d :删除ARP高速缓存的某一项内容。