Java常见面试题汇总-----------计算机网络(网络分层
67、OSI 与 TCP/IP 的网络分层
(1)、物理层----定义了为建立、维护和拆除物理链路所需的机械的、电气的、功能的和规程的特性,其作用是使原始的数据比特流能在物理媒体上传输。具体涉及接插件的规格、“0”、“1”信号的电平表示、收发双方的协调等内容。
(2)、数据链路层----比特流被组织成数据链路协议数据单元(通常称为帧),并以其为单位进行传输,帧中包含地址、控制、数据及校验码等信息。数据链路层的主要作用是通过校验、确认和反馈重发等手段,将不可靠的物理链路改造成对网络层来说无差错的数据链路。数据链路层还要协调收发双方的数据传输速率,即进行流量控制,以防止接收方因来不及处理发送方来的高速数据而导致缓冲器溢出及线路阻塞。
(3)、网络层----数据以网络协议数据单元(分组)为单位进行传输。网络层关心的是通信子网的运行控制,主要解决如何使数据分组跨越通信子网从源传送到目的地的问题,这就需要在通信子网中进行路由选择。另外,为避免通信子网中出现过多的分组而造成网络阻塞,需要对流入的分组数量进行控制。当分组要跨越多个通信子网才能到达目的地时,还要解决网际互连的问题。
(4)、传输层----是第一个端--端,也即主机--主机的层次。传输层提供的端到端的透明数据运输服务,使高层用户不必关心通信子网的存在,由此用统一的运输原语书写的高层软件便可运行于任何通信子网上。传输层还要处理端到端的差错控制和流量控制问题。
(5)、会话层----是进程--进程的层次,其主要功能是组织和同步不同的主机上各种进程间的通信(也称为对话)。会话层负责在两个会话层实体之间进行对话连接的建立和拆除。在半双工情况下,会话层提供一种数据权标来控制某一方何时有权发送数据。会话层还提供在数据流中插入同步点的机制,使得数据传输因网络故障而中断后,可以不必从头开始而仅重传最近一个同步点以后的数据。
(6)、表示层----为上层用户提供共同的数据或信息的语法表示变换。为了让采用不同编码方法的计算机在通信中能相互理解数据的内容,可以采用抽象的标准方法来定义数据结构,并采用标准的编码表示形式。表示层管理这些抽象的数据结构,并将计算机内部的表示形式转换成网络通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的表示变换功能。
(7)、应用层是开放系统互连环境的最高层。不同的应用层为特定类型的网络应用提供访问 OSI 环境的手段。网络环境下不同主机间的文件传送访问和管理(FTAM)、传送标准电子邮件的文电处理系统(MHS)、使不同类型的终端和主机通过网络交互访问的虚拟终端(VT)协议等都属于应用层的范畴。
67.1、网络各层常用的协议
物理层:RJ45、CLOCK、IEEE802.3
数据链路:PPP、FR、HDLC、VLAN、MAC
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGMP
传输层:TCP、UDP、SPX
会话层:RPC 、SQL、NETBIOS、NFS
表示层:JPEG、MPEG、ASCII、MIDI
应用层:RIP、BGP、FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
常见协议的端口:http 80,ftp 20、21,telnet 23,SMTP 25。
68、IP地址
68.1、IP地址的分类
整个的因特网就是一个单一的、抽象的网络。IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32位的标识符。
所谓分类的IP地址,就是将IP地址划分为若干固定类,每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,一个网络号在整个因特网范围内必须是唯一的。而另一个字段则是主机号 host-id,它标志该主机(或路由器),一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个因特网范围内是唯一的。
由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。路由器只根据目的站的IP 地址的网络号进行路由选择。
用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号。
两级的 IP 地址可以记为:IP 地址 :: = { <网络号>, <主机号>}
上图中的A类、B类、C类地址都是单播地址(一对一通信),是最常用的。网络号字段的最前面有1-4位的类别位,A类、B类、C类地址的类别位分别为0、10、110。为了提高可读性,我们常常把32位的IP地址中的每8位用其等效的十进制数字表示。
IP地址的取值范围:
A类:1.0.0.0到127.255.255.255
B类:128.0.0.0到191.255.255.255
C类:192.0.0.0到223.255.255.255
D类:224.0.0.0到239.255.255.255
E类:240.0.0.0到247.255.255.255
私有地址有:
A类:10.0.0.0到10.255.255.255
B类:172.16.0.0到172.31.255.255
C类:192.168.0.0到192.168.255.255
A类地址的网络号字段占一个字节,只有7位可供使用(第一位已固定为0),但是可指派的网络号是126个(2^7-2),减2的原因:第一,IP地址中全为0的地址是个保留地址,表示“本网络”;第二,网络号为127(01111111)保留作为本地软件环回测试本主机的进程间的通信。
A类地址的主机号占3字节,因此每一个A类网络中的最大主机数是2^24-2。减2的原因:第一,全为0的主机号字段表示该IP地址是本主机所连接到的单个网络地址,第二,全为1的主机号字段表示该网络上的所有主机。
B类地址的网络号字段有2字节,但是前两位已经固定为10,只剩下14位可以进行分配,因为前面两位是10,不会出现全为0或全为1的网络号,但实际上,B类网络地址128.0.0.0是不指派的。所以最大网络数为2^14-1。最大主机数为2^16-2。
C类地址有3字节的网络号字段,前三位固定位110,还有21位可以进行分配。但实际上192.0.0.0是不指派的,因此C类地址可指派的网络总数为2^21-1,最大主机数为2^8-2。
68.2、IP地址与硬件地址
硬件地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。
发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部。
连接在通信链路上的设备在接受MAC帧时,其根据是MAC帧首部中的硬件地址。在数据链路层看不见隐藏在MAC帧的数据中的IP地址。只有在剥去了MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。
68.3、划分子网
一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网(subnet)。划分子网纯属一个单位内部的事情。单位对外仍然表现为一个网络。
划分子网的方法是从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。于是两级IP地址在本单位内部就变为三级IP地址:网络号、子网号和主机号。
IP地址 ::= {<网络号>, <子网号>, <主机号>}
凡是从其他网络发送给本单位某个主机的 IP数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机。
下面通过一个例子来展示划分子网的方法与效果。
下图表示某单位拥有一个B类IP地址,网络地址是145.13.0.0(网络号是145.13)。
现把上图中的网络划分为三个子网,这里假定子网号占用8位,因此主机号只剩8位。所划分的子网分别是:145.13.3.0、145.13.7.0、145.13.21.0。
划分子网后,整个网络对外仍表现为一个网络,其网络地址仍为145.13.0.0,但是路由器R1在收到外来的数据报后,再根据数据报的目的地址把它转发到相应的子网。
假定有一个数据报的目的地址是145.13.3.10已经到达路由器R1,那么这个路由器如何把它转发到子网145.13.3.0呢?这就需要借助子网掩码(subnetmask)来实现了。
路由器会把子网掩码和收到的数据报地址的目的IP地址145.13.3.10进行按位“与”操作,得出所要找的子网的网络地址。
子网掩码与IP地址进行“与”操作之后,就将主机号“过滤”掉了,只剩下了网络号与子网号。
实际上,因特网的标准规定:所有网络必须使用子网掩码。即便一个网络没有划分子网,也要使用默认子网掩码。默认子网掩码中1的位置和IP地址中的网络号字段正好相对应,因此,两者进行“与”操作后,就能得出该IP地址的网络地址。A类、B类、C类地址的默认子网掩码是固定的:
例,已知 IP 地址是141.14.72.24,子网掩码是 255.255.192.0。试求网络地址。
应当注意,划分子网后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。
68.4、路由器转发分组算法
在划分子网的情况下路由器转发分组的算法:
(1)、从收到的分组的首部提取目的IP 地址 D。
(2)、先用各网络的子网掩码和 D逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
(3)、若路由表中有目的地址为 D的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
(4)、对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
(5)、若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
(6)、报告转发分组出错。
68.5、地址解析协议ARP
已知主机的IP地址,如何获取其相应的硬件地址。地址解析协议ARP是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个表还经常动态更新(新增或超时删除)。每个主机都设有一个ARP高速缓存(ARP cache)。里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。
ARP 解决的是同一个局域网内,主机或路由器的 IP 地址和 MAC 地址的映射问题。如果源主机和目的主机在同一个局域网内(目标 IP 和本机 IP 分别与子网掩码相与的结果相同,那么它们在一个子网 ),就可以用 ARP 找到目的主机的 MAC 地址;如果不在一个局域网内,用 ARP 协议找到本网络内的一个路由器的 MAC 地址,剩下的工作由这个路由器来完成。
ARP 协议的具体内容是:
01、每个主机都会有ARP高速缓存,存储本局域网内IP地址和MAC地址之间的对应关系。
02、当源主机要发送数据时,首先检查 ARP 高速缓存中是否有对应 IP 地址的目的主机的MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 请求分组,该数据包包括的内容有:(源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址)。
03、当本网络的所有主机收到该 ARP 请求分组时,首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包;如果是,则首先从数据包中取出源主机的 IP 地址和 MAC 地址写入到 ARP 高速缓存中,如果已经存在,则覆盖,然后将自己的MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
04、源主机收到 ARP 响应分组后,将目的主机的 IP 和 MAC 地址写入 ARP 高速缓存中,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应分组,表示 ARP 查询失败。
注意:主机的用户对这种地址解析的过程是不知道的,ARP协议会自动解析所需要的硬件地址。
问题:为什么不直接使用硬件地址通信,而是要使用抽象的IP地址,并调用ARP来寻址相应的硬件地址?
由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构的网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。但是统一的IP地址把这个复杂的问题解决了。