综述及网络层
综述
层次与物理硬件对应关系
- 中继器、集线器、网卡 ,转发器 ,----- 物理层,
- 交换机、网桥 (桥接器) ------------------数据链路层,
- 路由器 ------------------------------------- 网络层
- 网关 ----------------------------------------运输层
体系结构
自上而下:
1. 应用层:是网络应用程序及其应用层协议存留的地方。
协议包括:HTTP(超文本协议,为web文档提供请求和传送),SMTP(提供电子邮件报文的传输),FTP(两个端系统之间的文件传送),DNS(域名系统)
报文(message)
2.运输层: 提供了再应用程序端点之间传送应用层报文的服务。
TCP:面向连接的服务。包括了应用层报文向目的地的确保传递和流量控制,提供拥塞控制机制。UDP协议向它的应用程序提供无连接服务,不提供可靠性,没有流量控制和拥塞机制
报文段(segment)
3.网络层: 负责将数据报(datagram)的网络层分组从一台主机移动到另一台主机。
协议:IP(网际协议),ICMP(网际控制报文协议),IGMP(网际组管理协议),ARP(地址解析协议),RARP(逆地址解析协议)
数据报(datagram)
4.链路层:网络层依靠链路层的服务,将分组发送到下一个目的节点
以太网,WIFI,PPP(点对点协议)
帧(frame)
5.物理层:链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将帧中的一个一个比特从一个节点移动到下一个节点、
双绞铜线,单模光纤,同轴电缆
比特
网络层
概述
网络层向上提供简单灵活、无连接、尽量大努力交付的数据报服务,网络层不提供服务质量承诺。
网际协议IP
- 地址解析协议ARP
- 网际控制报文协议ICMP
- 网际组管理协议IGMP
逆地址解析协议RARP现已被淘汰不使用了
其中,ICMP,IGMP会用到IP协议,IP协议会用到ARP协议。
分类的IP地址
IP地址是全球唯一的32位的标识符。IP地址的结构使我们可以在因特网上很方便的寻址。
两级IP地址记为:
IP地址 ::={<网络号>,<主机号>}
::=表示“定义为”。
图4-5给出了各类IP地址的网络号字段和主机号字段。
可知:整个IP地址32位即4个字节
其中A类,B类和C类地址都是单播地址(一对一通信),是最常用的。
- A类,B类和C类地址的网络号字段(灰色部分)分别为1,2,和3字节长,而在网络号字段的最前面有1~3位的类别位,其数值分别规定为0,10,和110.
- A类、B类和C类地址的主机号字段分别为3个,2个和1个字节长。
- D类地址(前4位是1110)用于多播(一对多通信)。
- E类地址(前4位是1111)保留为以后用。
为什么划分A,B,C类地址 当初是这样考虑的:各种网络的差异很大,有的网络拥有很多主机,而有的网络上的主机则很少。把IP地址划分为A类,B类和C类是为了更好地满足不同用户的要求。当某个单位申请到一个IP地址时,实际上是获得了具有同样网络号的一块地址。其中具体的各个主机号则由该单位自行分配,只要做到在该单位管辖的范围内无重复的主机号即可。
点分十进制记数 机器中存放的IP地址是连续的二进制代码,为了提高可读性,人为的每隔8位插入一个空格。
机器中存放的IP地址: 10000000000010110000001100011111
人为划分8位插入一空格: 10000000 00001011 00000011 00011111
十进制表示位: 128.11.3.31
三种常用IP地址指派范围
IP地址空间共有2^32个地址。
A类地址
参考图4-5,
A地址网络号占一个字节(8位)。除去0的类别位,只有7位可用,可指派的网络号是126个(2^7-2)。减2的原因是:第一,网络号字段全0的IP地址是保留地址,意思是“本网络”。第二,网络号为127(01111111)保留作为软件环回测试本主机的进程之间的通信之用。
环回测试:若主机发送一个目的地址为环回地址(如:127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。目的地址为环回地址的Ip数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。
A类主机号占3个字节(24位),因此每一个A类网络中的最大主机数为2^24-2。这里减2的原因是:全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址(如,IP为5.6.7.8,则主机所在网络地址为:5.0.0.0)。而全1表示“所有的(all)”,因此全1的主机号字段表示该网络上的所有主机
可知,整个A类地址空间共有2^31(7+24)个地址,占整个IP地址空间的50%。
B类地址空间
B类地址的网络号字段有2个字节(16位),除去类别位10,有14位可用。这里不存在总数减2的问题。因为后面的14位无论怎么取值,也不能出现使整个2字节的网络号字段成为全0或全1。但实际上B类网络地址128.0.0.0是不指派的。可指派的最小网络地址为128.1.0.0.因此B类地址可指派的网络数为2^14-1。
B类地址每个网络上的最大主机数为2^16-2.这里需要减2是因为要扣除全0和全1的主机号。
整个B类地址空间共约有2^30(14+16),占整个IP地址空间的25%
C类地址空间
C类地址空间有3个字节的网络号字段,最前面的3位(110)是类别位,还有21位可以进行分配。C类网络地址192.0.0.0也是不指派的,可以指派的C类最小网络地址是192.0.1.0。因此C类地址可指派的网络总数是2^21-1。
每一个C类地址最大主机数是2^8-2。
整个C类地址空间共约2^29个地址,占整个IP地址的12.5%。
IP地址重要特点
- IP地址管理机构在分配IP地址时只分配网络号;路由器仅根据目的主机所连接的网络号来转发分组。
- 实际上IP地址标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机。由于一个路由器至少应该连接到两个网络,因此一个路由器至少应该具有两个不同的IP地址。
- 一个网络是具有相同网络号net-id的主机的集合,通过转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有相同的网络号。具有不同网络号的局域网必须使用路由器进行互连。
- 因特网同等对待每一个IP地址。
IP地址与硬件地址
IP地址放在IP数据报的首部,而硬件地址则放在MAC帧的首部。在网络层和网络层以上使用的是IP地址,而数据链路层及以下使用的是硬件地址。如图4-8,当IP数据报放入数据链路层的MAC帧中以后,整个的IP数据报就成为MAC帧的数据,因而在数据链路层看不见数据报的IP地址。
ARP工作流程
地址解析协议ARP:根据机器的IP地址,找到相应的硬件地址。
当主机A(192.168.1.1)要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址
- 根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP高速缓存中检查有无主机B的IP地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。
- 如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求分组广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
- 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
- 主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
- 当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了
注意:ARP是解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题。
RARP逆地址解析协议
RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,
RARP协议工作流程:
- 给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
- 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
- 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
- 如果不存在,RARP服务器对此不做任何的响应;
- 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。
因此RARP只能用于具有广播能力的网络。
IP数据报
一个IP数据报由首部和数据两部分组成。
首部分为固定的20个字节和可选部分。固定部分是所有IP数据报必须具有的。后面是一些可选字段,其长度是可变的。
固定部分
- 版本,4位,指IP协议的版本。
- 首部长度,4位
- 区分服务,8位
- 总长度,16位,首部和数据之和的长度,最大长度为2^16-1。
- 标识(identification),16位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
- 标志(flag), 3位,但目前只有两位有意义:最低位MF。MF=1表示后面还有“还有分片”的数据报。MF=0表示这已是最后一个数据报分片。
- 片偏移 ,13位,较长的分组在分片后,某片在原分组中的相对位置。
- 生存时间,8位,数据报在网络中的寿命
- 协议,8位,此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
- 首部检验和,16位,这个字段只检验数据报的首部,不包括数据部分。计算方法:在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置0。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接受方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错,并将此数据报丢弃。
- 源地址,32位
- 目的地址,32位
子网划分
- 划分子网后,IP地址变成了三级结构。划分子网只是把IP地址的主机号再划分,而不改变IP地址原来的网络号。
- 划分子网是一个单位内部的事,这个单位对外仍然表现为一个网络
- 划分子网的方法是从网络的主机号借用若干位作为子网号,当然主机号就相应减少了同样的位数。
IP地址::={<网络号>,<子网号>,<主机号>}
子网掩码
当一个数据报到达一个路由器R后,路由器如何把它转发到某一子网上的一个主机呢?
我们知道,从IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网划分。这是因为32位的IP地址本身以及数据报的首部都没有任何有关子网划分的信息。这时就要用到子网掩码了。
- A类地址的默认子网掩码是255.0.0.0
- B类地址的默认子网掩码是255.255.0.0
- C类地址的默认子网掩码是255.255.255.0
子网掩码是一个网络或一个子网的重要属性。
采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。例如,本来一个B类地址最多可连接65534台主机,但表4-6中,任意一行的最后两项的乘积一定小于65534。
问题:根据IP地址141.14.72.24,子网掩码255.255.192.0求网络地址
分析: IP地址与子网掩码的二进制逐位相与(AND),就可得出网络地址
子网掩码前两个字节都是1,因此与IP前两个字节与操作,可知网络地址的前两个自己为141.14。子网掩码的第四个字节是全0,因此网络地址的第四个自己是0。再算第三个字节就行。
72 ->01001000
192->11000000
----->01000000(64)
因此,网络地址为141.14.64.0.
使用子网时分组转发
使用子网划分后,路由表必须包含以下三项内容:目的网络地址,子网掩码和下一跳地址。
在划分子网的情况下,路由器转发分组的算法如下:
- 从收到的数据报的首部提取目的IP地址D。
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用个网络的子网掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换为物理地址,把数据报封装成帧发送出去),转发任务结束。否则就间接交付,执行(3)。
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所致命的下一跳路由器;否则,执行(4)。
- 度路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”,其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。
- 若路由表中有一个默认路由器,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)
- 报告转发分组出错。
网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制协议ICMP。
ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP报文
ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
ICMP格式如下:
前4个字节是统一的格式,共有三个字段:类型,代码和检验和。 接着4个字节的内容与ICMP的类型有关。
最后面的是数据字段。
ICMP报文种类
两种:ICMP差错报告报文和ICMP询问报文。
ICMP差错报告报文 共有5种,即:
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文
- 源点抑制: 当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
- 时间超过: 当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
- 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向): 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
不应该发送ICMP差错报告报文的情况
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
- 对具有多播地址的数据报都不发送ICMP差错报告报文。
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
ICMP询问报文
两种:回送请求和回答报文,时间戳请求和回答报文
回送请求和回答
ICMP回送请求报文是主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
这种询问报文用来测试目的站是否可达以及了解其有关状态
时间戳请求和回答
ICMP时间戳请求报文是请求某个主机或路由器回答当前的日期和时间。
时间戳请求和回答可用来进行时钟同步和测量时间。
ICMP应用举例,ping,tracert
PING PING,用来测试两个主机之间的连通性。
ping使用了ICMP回送请求和回送回答报文。
ping是应用层直接使用网络ICMP的一个例子。它没有通过运输层的TCP或UDP。
一个示例:
PC一共发出四个ICMP回送请求报文,若果邮件服务器mail.sina.com.cn正常工作,而且相应这个ICMP回送请求报文(有的主机为了防止恶意攻击就不睬外界发送过来的这种报文),那么它就发回ICMP回送回答报文。由于往返的ICMP报文上都有时间戳,很容易得出往返时间。最后显示的是统计结果。
traceroute
用来跟踪一组从源点到终点的路径。
linux下为traceroute.
windows下命令是tracert。
Traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。第一个数据报P1的生存时间TTL设置为1。当P1到达路径上的第一个路由器R1时,路由器R1先收下它,接着把TTL的值减1,。由于TTL等于零了,R1就把P1丢弃了,并向源主机发送一个ICMP时间超过的差错报告报文。
源主机接着发送第二个数据报P2,并把TTL设置为2.P2先到达路由器R1,R1收下后把TTl减1再转发给路由器R2。R2收到P2时TTL为1,但减1后TTL变为零了。R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报告报文。这样一直下去,当最后一个数据报刚刚到达目的主机时,数据报的TTL是1。主机不转发数据报,也不把TTL值减1。但因IP数据报中封装的是无法交付的运输层的UDP用户数据报,因此目的主机要向源主机发送ICMP终点不可达差错报告报文。