计算机网络面试常考总结(一)
写在最前面:本文章所有内容是本人从网络上以及《计算机网络第七版整理》整理而得,内容非原创~
** 另一部分参见:计算机网络面试常考总结(二)**
OSI、TCP/IP、五层协议体系结构是什么样的?每层的作用是什么?每层的协议有哪些?使用了哪些硬件设备?
OSI七层协议体系: 概念清楚,理论也比较完整,但是它既复杂也不实用。
物理层:
计算机网络体系中最底层,为所有网络/数据数据通信提供物理的通信线路。另外通信线路可以通过信道复用方式在一条物理线路中划分多条信道。默认情况下,一条物理线路就是一条信道。
常用协议: ISO2110,IEEE802,IEEE802.2
常用硬件: 中继器、集线器、还有我们通常说的双绞线也工作在物理层
数据链路层:
为同一局域网内部的网络/数据通信提供点到点的数据传输通道,通过MAC地址寻址把数据传输到目的节点。
数据链路层的通信只能在同一网段进行,要在不同网段间进行,必须依靠网络层和传输层。
数据链路层提供的不是物理线路,而是在物理层的物理线路基础之上,通过数据链路层协议构建的虚拟数据传输通道,并且只能在同一段内进行数据转发。
常用协议:SLIP,CSLIP,PPP,ARP,RARP,MTU。(在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。)
常用硬件:网桥、以太网交换机、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层)
网络层:
为不同网段之间的数据转发提供路径选择,通过IP地址(也有可能是其他网络地址)把数据包转发到目的节点。网络层这种寻址功能我们称为“路由寻址”,就是选择哪一条路径到达下一个节点。
网络层的功能仅起到不同网络间转发数据包的功能,最终数据还是要在目的网络的数据链路层进行传输,在到达下一个节点设备(如路由器)再进行转发。
常用协议:IP,ICMP,RIP,OSPF,BGP,IGMP
常用硬件:路由器
运输层:
是在下面三层构建的网络平台基础上专门为通信双方构建端到端(不是点到点)的数据传输通道,使通信双方就像在直接进行数据传输一样。这个端到端的传输通道是可以跨网络的。
常用协议: TCP,UDP
常用硬件:网关
会话层:
为具体的用户建立会话进程。
常用协议: 无
常用硬件:网关
表示层:
是对用户网络应用数据的具体解释,包括在网络通信中可采用的信息技术、可采用的加密方式等。
常用协议: 无
常用硬件:网关
应用层:
用户进行具体网络应用的层次,是具体网络应用的体现者,负责接受用户的各种网络应用进程的调用。
常用协议: TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
常用硬件:网关
TCP/IP四层协议体系: 实际应用非常广泛,从实质上讲,TCP/IP体系只有最上面的三层,最底下的网络接口层实际上没有什么内容。
- 网络接口层:合并了原来OSI中的物理层和数据链路层,提供局域网的功能。
- 网际层:同OSI网络层
- 运输层:同OSI运输层
- 应用层:合并了OSI中最上面的三层。
五层协议体系: 《计算机网络第七版》中,为了方便介绍网络原理,而引人的体系。实际应用还是TCP/IP协议体系。
- 物理层:同OSI物理层
- 数据链路层:同OSI数据链路层
- 网络层:同OSI网络层
- 运输层:同OSI运输层
- 应用层:合并了OSI中最上面的三层。
OSI体系与TCP/IP体系的联系与区别?
相同点:
层次结构划分思想相同;
总体层次结构相同;
核心组成一样,都定义了“服务“、”接口“、”协议“上重要核心。
不同点:
适用范围不同:OSI在标准协议发明前就产生了,不偏重于任何特定的网络类型,具有最广泛的理论参考性,是一个理想代的模型;而TCP/IP则相反,它是针对TCP/IP协议簇产生的,最具实践性;
层次结构不同:TCP/IP体系中没有会话层和表示层;
支持通信模式不同:OSI同时支持无连接和面向连接的网络通信(不仅支持TCP/IP协议网络中无连接的IP网络协议,同时支持NetWare SPX/IPX网络中的面向连接的SPX协议等)。TCP/IP模型的网络层只提供无连接的服务。
所包括的通信协议不同。
路由器、中继器、集线器、交换机、网关、网桥各自的概念以及作用?
路由器(Router):
工作范围:网络层,不同网络之间
功能:是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过 的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转 送。路由工作在OSI模型的第三层——即网络层,例如网际协议。
中继器:
工作范围:物理层
功能:中继器是将一条电缆传输过来的信号经过放大和调整以后再传输给另一个电缆。因此,它是物理层上的网络延长设备。一般而言,中继器连接的双方是相同的物理介质,但是有些也可以完成不同媒介之间的连接。但是中继器只是完成了信号的转换,而不能完成转发。也就是说,中继器不能再传输速度不同的介质之间完成转发。
集线器:
工作范围:物理层
功能:如果每个设备只有一个对外接口,那么意味着只能建立一对一的点到点的通信。为了能够让通信“一对多”,需要将信号复制广播,于是,产生了集线器。集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。
交换机:
工作范围:数据链路层
功能:交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。也就是说,交换机也有一张表,记录的是port-mac。按照传输数据包的层次,交换机可以分为一、二.....七层交换机。
网桥:
工作范围:数据链路层
功能:网桥能够连接两个不同的数据链路,即使他们的传输速度不同。它能够识别数据链路中的数据帧,并将这些数据帧临时存储在内存中,然后在重新生成一个新的数据帧转发给另外一个网段。网桥还具有检错功能。因此,网桥有时候也会被称为2层交换机。(数据链路层设备)有些网桥能够记住曾今通过自己转发的数据帧的MAC地址,并保存在内部的内存表中。这种网桥被称为自学式网桥。
网卡:
工作范围:物理层、数据链路层
功能:又称网络接口控制器,网络适配器(network adapter),网卡(network interface card),或局域网接收器(LAN adapter),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。网卡的作用是负责接收网络上的数据包,通过和自己本身的物理地址相比较决定是否为本机应接信息,解包后将数据通过主板上的总线传输给本地计算机,另一方面将本地计算机上的数据打包后送出网络。
实现与主机总线的网络通讯连接,网卡相当于桥梁设备
实现主机与介质之间的电信号匹配
提供数据缓冲能力
网关:
工作范围:运输层、应用层
功能:网关(Gateway)负责第三层(网络层)以上的数据中继,实现不同体系结构的网络协议转换,它通常采用软件的方法实现,并且与特定的应用服务一一对应。比如:OSI的文件传输服务FTAM和TCP/IP的文件传输服务FTP,尽管二者都是文件传输但是由于所执行的协议不同不能直接进行通信,而需要网关将两个文件传输系统互连,达到相互进行文件传输的目的。
交换机与路由器的区别?
工作层次不同
交换机是工作在OSI/RM体系结构的第二层(数据链路层),而路由器一开始就设计工作在OSI模型的网络层。由于交换机工作在OSI的第二层(数据链路层),所以它的工作原理比较简单,而路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。
数据转发所依据的对象不同
交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。
传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器。
路由器提供了防火墙的服务
路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。 交换机一般用于LAN-WAN的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。路由器用于WAN-WAN之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络,并采用不同协议。相比较而言,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功能,因此得以广泛应用。
IP地址是如何分类的?
IP地址 = 网络号 + 主机号
A、B、C类IP地址的网络号字段分别是1、2、3个字节长,而在网络号的1-3位是类别位,分别是:0、10、110。
A、B、C类IP地址的主机号字段分别为3、2、1个字节。
A、B、C类IP地址是单播地址,D类IP地址(前四位为1110)为多播地址,E类IP地址(前四位1111)保留为以后使用。
A、B、C三类常用的IP地址的指派范围?有哪些特殊的IP地址以及它们的含义?
特殊的IP地址:
网络号全0代表“this,这个”,也就是本网络的意思,当网络号和主机号全为0时则代表本网络上的本主机。网络号为0,主机号为host-id,则代表本网络上的某个主机(主机号为host-id)。这类IP地址只能作为源地址,不能作为目的地址。
网络号和主机号全为1,代表只在本网络上进行广播,路由器不转发,不可以作为源地址,可以作为目的地址。
网络号为net-id,主机号为全1,代表对net-id上所有的主机进行广播。可以作为目的地址,不可以作为源地址。
网络号为127(01111111),保留作为本地环回测试本主机的进程之间的通信只用。主机号可以为非全0或者全1的任何数,可以作为源地址,也可以作为目的地址。
可以指派的IP地址:
A类地址的网络号中:全0和127是不指派的;主机号中:全0代表本主机所连接的单个网络地址,全1代表网络上的所有主机,也是不指派的。
B类IP地址网络号中:128.0.0.0不指派;主机号中:全0和全1也不指派。
C类IP地址网络号中:192.0.0.0不指派;主机号中:全0和全1也不指派。
总结:
网络号全为0:本网络
主机号全为0:代表单个网络地址
主机号全为1:代表某个网络上的所有主机
简述ARP协议的工作原理。
ARP:Address Resolution Protocol,地址解析协议
功能:为了从网络层的IP地址,解析出在数据链路层使用的硬件地址。注意:ARP解决的是同一局域网上的主机和路由器的IP地址和硬件地址的映射问题。
工作原理:
每一台主机都设有一个ARP告诉缓存,里面有本局域网上的各个主机和路由器的IP地址到硬件地址的映射。当A要向本局域网上的B发送IP数据报时,则A先查看ARP高速缓存中有无B的IP地址:
如果有:就在ARP高速缓存中查出该IP地址的硬件地址,把这个硬件地址写入MAC帧,再通过局域网将MAC帧发往此硬件地址。
如果没有:ARP向本局域网广播(请求分组是广播,响应分组是单播)发送一个ARP请求分组,表明自己的IP地址和硬件地址以及要寻找的IP地址。B接收到请求分组后,收下并且向A发送相应分组,其余主机不做相应。A收到B的相应分组后再进行常规的数据传输。
补充:
生存时间:ARP对每一个映射地址的项目都设有生存时间(例如10-20分钟),这是为了防止该局域网中某些主机的硬件地址发生改变的情况。
简述ICMP协议和IGMP协议。
ICMP:
Internet Control Message Protocol,网际控制报文协议。
功能: 为了更加有效的转发IP数据报和提高交付成功的机会,ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
IGMP:
Internet Group Management Protocol,网际组管理协议。
功能: IGMP协议是让连接在本局域网上的多播路由器知道本局域网上是否有主机(严格来讲是主机上的某个进程)参加或者退出了某个多播组。
TCP和UDP的区别。
TCP:传输控制协议,Transmission Control Protocol
UDP:用户数据报协议,User Datagram Protocol
TCP是面向连接的,UDP是无连接的。
TCP在传输数据之前必须建立有效的连接,数据传输后也要释放连接。而UDP在传输前不需要建立连接,远程主机接收到UDP用户数据报之后也不需要给出确认。
TCP提供可靠的全双工通信,UDP尽最大努力通信,不保证可靠。
TCP占用资源多,UDP占用资源少。
运输协议数据单元不同,TCP是TCP报文段,UDP是用户数据报。
TCP是面向字节流的,UDP是面向报文的。
面向字节流:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但是TCP把应用程序交下来的数据只看出一连串的无结构字节流。TCP不知道字节流的具体含义,也不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块之间的大小关系。但是接收方应用程序收到的字节流必须与发送方发送的字节流完全一致。
面向报文:发送方的UDP对应用程序交下来的报文添加首部后直接交付给IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
TCP有拥塞控制,UDP没有拥塞控制
TCP不提供广播和多播服务,UDP支持一对一、多对一、一对多、多对多的交互通信。
TCP如何保证可靠传输?
校验和: TCP在发送报文之前,发送方要计算校验和,收到数据后,接收方也要计算校验和,如果校验和不相等则丢弃。
序列号与确认应答:
序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号。
确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。
序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。
超时重传: 在TCP传输过程中,我们在发送一部分数据后,都会等待对方的ACK确认报文,如果中间出现差错,没有收到ACK报文,这时候需要启动超时重传机制。这种超时重传机制保证了TCP在网络延迟或者报文丢失下的可靠传输。
超时的原因:
接收方没有收到TCP报文段:网络延迟或者丢包;
发送方没有收到ACK报文段:网络延迟或者ACK报文丢失。
连接管理:连接管理就是三次握手与四次挥手的过程(后面有详细解释)
流量控制: 流量控制的目的是让接收方来得及接收数据。这样避免了数据丢包以及网络拥塞等情况。
拥塞控制: 拥塞控制就是防止过多的数据注入到网络中,这样使网络中的路由器或者链路不至于过载。
TCP三次握手的过程?为什么采用三次握手?两次可以吗?
TCP三次握手的过程(A向B发送数据):
A主动打开连接,B被动打开连接。B先进入收听状态,A打算建立TCP连接时,先向B发送连接请求报文段,其中同步位SYN=1,初始序号seq=x,这个报文段不能携带数据,但是要消耗一个序号。接着,A进入同步已发送状态;
B收到请求报文段,如果同意建立连接,则向A发送ACK确认报文段,其中同步位SYN=1,确认号ACK=1,初始序号seq=y,确认号ack=x+1(请求报文段消耗了一个序号),这个ACK报文段也不能携带数据,但是要消耗一个序号。与此同时,B进入到同步收到的状态;
A收到B的确认报文后,还要给B发送确认报文。其中ACK=1,seq=x+1(上一个报文段的ack),ack = y+1(上一个报文段的seq+1,因为消耗了一个序号),这个ACK报文段可以携带数据,但是如果不携带数据则不会消耗序号,下一次A给B发送报文段的初始序号 seq=1。此时A进入已建立连接的状态,B收到确认后也进入已建立连接的状态。
为什么需要最后一次确认?
这是防止已失效的连接请求报文段突然又传送到了B而引发错误。
失效的连接请求:A第一次先发送了一个请求,但是丢失了,于是A再发送一个连接请求,重新建立连接,发送数据并释放连接。
但是有可能出现异常情况,即A发送的连接请求并没有丢失,而是滞留了在网络中。如果在传输数据完成之后,这个请求又发到B,B误以为A还要发送数据,因此发送确认报文,但是A没有运输需求,因此不予理睬。如果没有最后一次确认,B一直等待A的确认,这样会造成的浪费。
采用三报文握手,如果B没有收到A的确认,则可以知道A没有建立连接的需求,就可以避免上述这种情况。
TCP四次挥手的过程?为什么最后有timewait?等待时长一般是多少?
TCP四次挥手的过程:
A和B目前都处于已建立连接的状态,A的应用进程向其TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接。此时,FIN=1,seq=u,u等于前面已发送的最后一个字节的序号加1。这时A进入到FIN-WAIT-1(终止等待1)状态,等待B的确认。FIN报文段即使不携带数据,也要消耗一个序号;
B收到释放连接后立即发出确认,此时,ACK=1,确认号是ack=u+1(前面的seq+1,因为消耗了一个序号),序号seq=v,v等于B前面所有已传送数据的最后一个字节的序号加1。B进入到CLOSE-WAIT(关闭等待)状态,TCP服务器进程向B的高层应用进程告知,此时A到B的连接已经释放,TCP连接处于半关闭状态。但是,B到A这个方向的连接尚未关闭;
A收到B的确认后,就进入到FIN-WAIT2(终止等待2)的状态,等待B发送连接释放报文段;
若B已经没有数据需要发送,则应用进程通知TCP释放连接,这时B发送的报文段:FIN=1,ACK=1,seq=w(可能后面又发送了一些数据),ack=u+1,并且这个报文消耗一个序号。B进入到LAST-ACK(最后确认)的状态,等待A的确认;
A收到B的确认后,必须对此发送确认报文。该报文中:ACK=1,seq=u+1,ack=w+1。然后进入到TIME-WAIT(时间等待)状态。
此时TCP连接并没有完全释放,必须经过时间等待计时器设置的时间2MSL之后,A才进入CLOSED状态。时间MSL叫做最大报文段寿命。
那么,为什么要等待2MSL的时间呢?
保证A最后发送的ACK报文段能够到达B。因为这个报文可能丢失,因此B会重传最后一个确认报文段,A再重新发送确认报文,并且重启计时器,直到A,B都能正常进入到CLOSED状态;
防止上面提到的“已失效的连接请求报文”。这段时间内,这些连接请求报文就可能在网络中消失。
此外,B要比A先进入CLOSED状态
TCP怎么计算网络延迟?
精确的时延计算十分复杂,不过可以通过ping命令进行粗略的计算,通过ping命令得出的平均往返时间除以2,就是我们的网络时延。
TCP怎么进行拥塞控制?(慢启动、拥塞避免、快重传、快恢复)
TCP通过慢启动、拥塞避免、快重传以及快恢复这四个算法来进行拥塞控制(具体的可以参见上面那篇博文):
慢启动:一开始先设置一个比较小的拥塞窗口值cwnd(报文段的倍数),然后进行数据传输,每收到一个报文段的确认,我们就将cwnd+1,这样下来,cwnd总体上是乘以2^n的倍数增长。(慢启动非增长速度慢,只是增长的初始基数比较小)
拥塞避免: 因为慢启动算法的增长比较快,当cwnd = ssthresh(预先设置好的门限值)时,我们启动拥塞避免算法,窗口值开始线性增长。
随着拥塞避免算法的进行,网络出现超时的情况(这时判断为拥塞出现)。这时将cwnd降为一开始的值,重新进行慢开始-拥塞避免,并且此时的门限值设为出现拥塞时的cwnd的一半。
快重传: 快重传的目的是为了让发送方尽早知道某个报文段的丢失。如何知道呢?当我们重复收到某一个报文段的3次确认时,我们就可以判断,它的下一个报文段可能出现了丢失。这时我们启动快重传算法,立即重传丢失的报文段。
快恢复: 上面快重传算法的启动只是因为个别报文段的丢失,我们这时并不判断为网络拥塞,而是启动快恢复算法。我们将cwnd=ssthresh=当前cwnd的一半,并且开始拥塞避免算法。
当然,也有的快恢复算法是将当前拥塞窗口再增大3个报文段的值,因为既然收到了3个重复的ACK,则说明有三个分组已经离开了网络,不在占用网络资源而是停留在对方缓存当中,可以适当将窗口值增大。
TCP对应的协议有哪些?UDP对应的协议有哪些?
面向连接和无连接的区别?
应该与前面TCP和UDP的区别类似。
面向连接在传输之前需要先建立连接,而且传输完成后必须要释放连接。无连接则不需要事先建立连接,直接传输数据。
面向连接一般要保证数据传输的可靠性,有序性。
端口以及对应的服务?
端口号分类:
服务器端使用的端口号。
熟知端口号:0~1023。IANA把一些端口号指派给了TCP/IP最重要的一些程序。当有一些新的应用程序出现后,IANA必须给它指定 一个熟知端口号,否则互联网上的其他应用进程无法和它进行通信。
应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(trap) HTTPS 熟知端口号 21 23 25 53 69 80 161 162 443 登记端口号:1024~49151。这类端口号是为没有熟知端口号的应用程序使用。这类端口号必须在IANA中按照规定的手续进行登记,以防止重复。
客户端使用的端口号:49152~65535。只有在客户端进程运行时才动态选择,因此又叫短暂端口号。这类端口号留给客户进程选择暂时使用,通信结束后就释放,不再占用。