题目来自面试/笔试第一弹 —— 计算机网络面试问题集锦
参考计算机网络体系结构综述(上) 计算机网络体系结构综述(下) 《计算机网络(第七版)》谢希仁
开放系统互连(OSI)参考模型是理论上的标准,TCP/IP参考模型是事实上的标准。
OSI模型将体系结构在功能上分为7层,每层完成特定的网络功能。
应用层:为用户的应用进程提供网络通信服务。
表示层:数据的编码,压缩和解压缩,加密和解密。
会话层:是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持和终止通信。
传输层:负责向两台主机中进程之间的通信提供通用的数据传输服务。通用指多种应用可以使用同一个运输层服务,因此运输层有复用和分用的功能。(把来自会话层的完整报文分割成数据段,构造协议数据单元,交给网络层进行传输)。
网络层:负责为分组交换网上的不同主机提供通信服务。转发,将分组从路由器的输入端口转移到合适的输出端口;路由,通过路由算法确定分组从源到目的经过的路径;连接建立,不是所有网络都需要,某些网络的重要功能,如虚电路。
数据链路层:将IP数据报加头加尾构成帧,通常头部加物理地址等信息,尾部加差错检测等信息。通过差错控制、流量控制等方法,实现数据在不可靠的物理线路上的可靠传递。
物理层:在物理介质上正确、透明地传送比特流(由1、0转化为电流强弱进行传输,到达目的地后再转换为1、0)。
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:
端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
开销:Https通信需要证书,而证书一般需要向认证机构购买;
Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
均是将数据提交到远程服务器。
|
get |
post |
功能 | 常用于向服务器查询某些信息 | 用于向服务器发送应该被保存的数据 |
数据存储位置 |
URL后面,?分割URL和数据,&相连参数 |
请求体 |
数据大小 |
不超过2000字符 |
无限制 |
应用场景 |
非敏感数据和小数据 |
敏感数据和大数据,更安全 |
1××:表示通知信息,如请求已被接受或正在处理。
2××:请求成功。
3××:重定向,要完成请求必须进行进一步处理。
4××:客户端错误,请求不合法。
5××:服务器端错误,服务器失效无法完成请求。
状态码 |
描述 |
原因短语 |
200 |
请求成功。一般用于GET和POST方法 |
OK |
301 |
资源移动。所请求资源已移动,浏览器自动跳转到新的URL |
Moved Permanently |
304 |
未修改。所请求资源未修改,浏览器读取缓存数据 |
Not Modified |
400 |
请求语法错误,服务器无法理解 |
Bad Request |
404 |
未找到资源,可以设置个性“404页面” |
Not Found |
500 |
服务器内部错误 |
Internal Server Error |
(1)TCP对应的应用层协议
HTTP:超文本传送协议,浏览器如何向Web服务器请求文档,服务器如何把文档传送给浏览器。默认端口号80。
SMTP:简单邮件传送协议,邮件服务器之间传递消息所使用的协议,客户端是发送消息的服务器,服务器是接收消息的服务器。端口号25。
POP3:邮件读取协议,用于从服务器获取邮件。端口号110。
FTP:文件传送协议。端口号21。
Telnet:远程终端协议。用户可在其所在地登录到远程的另一台主机上,可将击键传到远程主机,也能将远程主机的输出返回到用户屏幕。支持BBS的服务器将23号端口打开,对外提供服务。
(2)UDP对应的应用层协议
DNS:域名解析,将域名地址转换为IP地址。端口号53。
SNMP:简单网络管理协议,管理网络设备。端口号161。
TFTP:简单文件传输协议。端口号69。
https://www.jianshu.com/p/23b388f8e5aa
(1)DNS域名解析,获取IP地址
在浏览器缓存、hosts文件、路由器缓存中查找url对应的IP地址。
如果没有找到,则发起一个DNS请求到本地域名服务器,在其缓存中进行查找。
如果没有,本地DNS服务器向根DNS服务器发起请求,根DNS服务器返回顶级DNS服务器的地址;本地DNS服务器向顶级DNS服务器发起请求,顶级DNS服务器返回权限DNS服务器的地址;本地DNS服务器向权限DNS服务器发起请求,权限DNS服务器查询到域名对应的IP后,将IP地址返回给本地DNS服务器;本地DNS服务器接收后将其保存到缓存中,以备下次查询。本地DNS服务器将IP地址返回给客户主机浏览器。
(2)浏览器向Web服务器发送HTTP请求
浏览器以一个随机的端口(1024~65535)向服务器的Web程序端口(HTTP协议使用80/8080端口,HTTPS使用443端口)发起TCP连接请求。三次握手后,建立TCP连接。
建立连接后,发送一个HTTP请求,包含请求行、请求头、请求正文。
(3)服务器处理请求,返回HTTP响应
后端服务器从固定的端口接收到TCP报文后,对HTTP协议进行解析,然后将相应的数据封装为HTTP Request对象,供上层使用。
HTTP响应,包括状态行、响应头、响应正文。
(4)浏览器显示页面信息
用户请求的HTML文档通过浏览器的网络层到达渲染引擎后,渲染工作开始。
浏览器把HTML代码解析成一个DOM树,根节点是document对象,每个标签都是一个节点,包括display:none的标签和JS动态添加的元素等。(遇到对js、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源)
浏览器把所有样式解析成样式结构体,去掉浏览器不能识别的样式。
DOM树和样式结构体组合后构建render树,其中的每个节点都有样式,render树不包括display:none的节点、head节点等。根据CSS2的标准,render树中的每个节点都称为Box。
render树构建完毕后,浏览器根据render树绘制页面。
1:应用进程将待解析的域名放在DNS请求报文中,以UDP数据报的形式发送给本地域名服务器,本地域名服务器查找到相应域名的IP地址后(主机向本地域名服务器的查询一般都是采用递归查询),就将该域名的IP地址信息放入应答报文中返回给客户进程。
2:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他域名服务器继续发送查询请求报文(本地域名服务器向根域名服务器的查询通常采用迭代查询)。
3:当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器查询”。然后让本地域名服务器进行后续的查询。
二者均是传输层协议。
TCP | UDP |
面向连接 | 无连接 |
点对点(一对一) | 支持一对一、一对多、多对一、多对多的通信模式 |
可靠的 | 不可靠,尽最大努力交付 |
拥塞控制、流量控制 | 没有拥塞控制 |
面向字节流 | 面向报文 |
首部开销大(20个字节) | 首部开销小(8个字节) |
全双工、发送方/接收方缓存 |
(1)TCP连接建立过程中采用“三次握手机制”
第一次握手:客户端发出连接请求报文段,其中将SYN标志位置为1表示要建立连接,选择一个初始序列号seq=x,不携带数据但消耗一个序号。之后TCP客户进程进入SYN-SENT(同步已发送)状态。
第二次握手:服务器收到连接请求报文段后,如同意建立连接,向客户端发送确认。在确认报文段中将SYN位和ACK位都置1,确认号是ack=x+1,选择一个初始序号seq=y,不携带数据但消耗一个序号。TCP服务器进程进入SYN-RCVD(同步收到)状态。
第三次握手:TCP客户进程收到服务器的确认后,检查ack是否是x+1,ACK是否是1。如果正确,向服务器发送确认报文段,其中ACK置1,确认号ack=y+1,序号seq=x+1,可以携带数据,但如果不携带数据则不消耗序号。服务器检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器进入ESTABLISHED(已建立连接)状态。
(2)TCP连接释放过程中采用“四次挥手机制”
第一次挥手:客户端的应用进程发出连接释放报文段,停止发送数据。FIN置1,序号seq=u,是前面已经传送过的数据的最后一个字节的序号加1,不携带数据但消耗一个序号。客户端进入FIN-WAIT-1(终止等待1)状态,等待服务器的确认。
第二次挥手: 服务器收到连接释放报文段后发出确认。ACK置1,确认号ack=u+1,序号seq=v,是服务器前面已经传送过的数据的最后一个字节的序号加1。服务器进入CLOSE-WAIT(关闭等待)状态。从客户端到服务器的连接释放了。
客户端收到来自服务器端的确认后,进入FIN-WAIT-2(终止等待)状态,等待服务器发出连接释放报文段。
第三次挥手:若服务器已经没有要向客户端发送的数据,发出连接释放报文段。FIN置1,序号seq=w,确认号ack=u+1。服务器进入LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手:客户端收到服务器的连接释放报文段后,发出确认。ACK置1,确认号ack=w+1,序号seq=u+1。进入TIME-WAIT(时间等待)状态,经过2MSL后,进入CLOSED状态。
服务器只要收到客户端发出的确认,就进入CLOSED状态。
客户端最后还要发送一次确认,主要是为了防止已失效的连接请求报文段突然又送到了服务器,产生错误。
假定客户端发出连接请求报文段,在某个网络结点长时间滞留,延误到连接释放以后的某个时间才到达服务器。这是一个早已失效的报文段,但服务器收到后会误以为客户端又发出一次新的连接请求,于是向客户端发出确认报文段,同意建立连接。假定不采用第三次握手,新的连接就建立了。
由于现在客户端并没有发出建立连接的请求,因此不会理睬服务器的确认,但服务器却误以为新的连接已经建立,一直等待客户端发数据,服务器的资源被浪费。但如果采用三次握手的方法,客户端不会向服务器发出确认,就不会建立连接。
数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
丢弃重复数据:对于重复数据,能够丢弃重复数据;
应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。
拥塞控制是防止过多数据注入网络中,使网络中的路由器或链路不致过载。LastByteSent-LastByteAcked<=CongWin(拥塞窗口),拥塞窗口动态调整改变发送速率。
慢启动:TCP连接建立时,拥塞窗口为1。可用带宽可能远远高于初始,希望速率快速增长(指数型),每个RTT收到每个ACK将拥塞窗口翻倍。
拥塞避免:当拥塞窗口达到丢包事件前值的1/2时(ssthresh变量),将指数型增长切换为线性增长,即每个RTT将拥塞窗口增加1。
快重传、快恢复:收到3个重复ACKs,说明发生丢包,收到失序的报文段。此时不用等到超时,立即重传对方未收到的报文段。将拥塞窗口设置为丢包前拥塞窗口的1/2,然后线性增长。
超时事件:直接将拥塞窗口设为1,然后指数增长,达到ssthresh后再线性增长。
IP地址就是给互联网上的每一台主机或路由器的每个接口分配一个在全世界范围内的唯一的32位的标识符,方便在互联网上寻址。
IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用,为特殊地址。
每个IP地址包括两个标识码,即网络号和主机号。同一个物理网络上的所有主机都使用同一个网络号,网络上的一个主机(包括工作站、服务器和路由器等)有一个主机号与其对应。IP地址特点如下:
A类地址:以0开头,第一个字节范围0~127;
B类地址:以10开头,第一个字节范围128~191;
C类地址:以110开头,第一个字节范围192~223;
D类地址:以1110开头,第一个字节范围为224~239;
E类地址:以1111开头。
特殊IP地址,不能用于标识具体的IP接口。
NetID |
HostID |
作为IP分组源地址 |
作为IP分组目的地址 |
用途 |
全0 |
全0 |
可以 |
不可以 |
在本网范围内表示本机,在路由表中用于表示默认路由(相当于表示整个Internet网络) |
全0 |
特定值 |
不可以 |
可以 |
表示本网内某个特定主机 |
全1 |
全1 |
不可以 |
可以 |
本网广播地址(路由器不转发)受限 |
特定值 |
全0 |
不可以 |
不可以 |
网络地址,表示一个网络 |
特定值 |
全1 |
不可以 |
可以 |
直接广播地址,对特定网络上的所有主机进行广播 |
127 |
非全0或非全1的任何数 |
可以 |
可以 |
用于本地软件环回测试,称为环回地址 |
私有(Private)IP地址,只用于内部网络。
Class |
NetIDs |
Blocks |
A |
10 |
1 |
B |
172.16to172.31 |
16 |
C |
192.168.0to192.168.255 |
256 |
物理地址是数据链路层和物理层使用的地址,IP地址是网络层和以上各层使用的地址,是一种逻辑地址。ARP协议用于IP地址与物理地址的对应。
1:对于每台主机,其ARP缓存区都有一个ARP列表,存储着网络中IP地址和MAC地址的对应关系
2:当源主机向目的主机发送数据时,首先检查自己的ARP列表中是否有目的主机IP地址对应的MAC地址,如果有,直接发送信息
3:如果没有,就向本网段的所有主机广播发送ARP数据包,数据包中包括源主机IP地址,MAC地址及目的主机IP地址
4:本地网络的所有主机收到该ARP数据包后,首先检查目的主机IP地址是否和自身IP地址相同,若不同,忽略该数据包;若相同,将源主机IP地址和MAC地址加入到自身ARP列表中,如果列表中已存在该对应关系,则覆盖,然后发送一个ARP响应包给源主机,告知它就是源主机想找的MAC地址。
5:源主机接到ARP相应包后,首先将目的主机MAC地址加入到其ARP列表,并利用此信息发送消息。若源主机一直没有收到ARP响应包,表示ARP查询失败。
RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。
工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址,并将其装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。
NAT协议:网络地址转换(NAT,Network AddressTranslation)属接入广域网(WAN)技术,
是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
DHCP协议:动态主机设置协议(Dynamic Host ConfigurationProtocol, DHCP)
是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DNS协议:DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
10:交换机、路由器、网关、网桥的概念及各自用途?
交换机用于局域网,利用主机的 MAC 地址进行数据传输,而不需要关心 IP 数据包中的 IP 地址,它工作于数据链路层。
路由器识别网络是通过 IP 数据包中 IP 地址的网络号进行的,所以为了保证数据包路由的正确性,每个网络都必须有一个唯一的网络号。路由器通过 IP 数据包的 IP 地址进行路由选择的(将数据包递交给哪个下一跳路由器),路由器工作于网络层。
网关就是连接两个网络的设备,能在不同协议间移动数据。作用于网络层以上。
网桥是一个局域网与另一个局域网之间建立连接的桥梁。属于数据链路层的一种设备。
4.路由设备与相关层
物理层:中继器(Repeater,也叫放大器),集线器。
数据链路层:网桥,交换机。
网络层:路由器。
网关:网络层以上的设备。
5.常见的路由选择协议,以及它们的区别
常见的路由选择协议有:RIP协议、OSPF协议。
RIP协议:底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。
OSPF协议:底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。