您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

计算机网络面试题(网络搜集版,持续更新)

● 请回答OSI七层模型和TCP/IP四层模型,每层列举2个协议
● OSI七层模型及其包含的协议如下:
作用 传输单位 协议
物理层 通过媒介传输比特 bit IEE802.3 CLOCK RJ45
数据链路层 将比特组装成帧和点到点的传递 帧 MAC VLAN PPP
网络层 负责数据包从源-宿的传递、网际互连 包 IP ARP ICMP
传输层 负责主机中两个进程之间的通信 报文 TCP UDP
会话层 建立、管理和终止会话 SPDU RPC NFS socket
表示层 对数据进行翻译、加密和压缩 PPDU JPEG ASII
应用层 确定进程之间通信的性质
以满足用户的需要 APDU FTP HTTP DNS

● HTTP1.0与HTTP2.0区别
HTTP1.0的缺陷 HTTP2.0的优势
每个请求都需单独建立连接 多路复用
每个请求和响应都需要完整的头信息 压缩头信息
数据未加密 请求划分优先级
支持服务器端主动推送

● 请回答一下HTTP和HTTPS的区别,以及HTTPS有什么缺点?
HTTP协议和HTTPS协议区别如下:
HTTP 超文本传输协议、 HTTPS 超文本传输安全协议
1)HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性
2)HTTPS在TCP三次握手阶段之后,还需要进行SSL 的handshake,协商加密使用的对称加密密钥
3)HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书
4)端口不同:HTTP协议端口是80,HTTPS协议端口是443

● HTTPS优点:
HTTPS传输数据过程中使用密钥进行加密,所以安全性更高
HTTPS协议可以认证用户和服务器,确保数据发送到正确的用户和服务器

● HTTPS缺点:
HTTPS握手阶段延时较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加
HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高

● 请你来说一说http协议
HTTP协议是超文本传输协议,是用于,HTTP是一个基于TCP/IP通信协议,属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

● HTTP协议特点
1、简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2、灵活:
HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3、无连接:
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4、无状态:
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S及C/S模式。
6、默认端口80
7、基于TCP协议

● HTTP过程概述:
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
请求的方法 URL 协议版本 请求头部 请求数据
协议版本 成功、错误代码 服务器信息 响应头部 响应数据

● HTTP 请求/响应的步骤如下:
客户端连接到Web服务器 -> 发送HTTP请求 -> 服务器接受请求并返回HTTP响应 -> 释放TCP连接- > 客户端浏览器解析HTML内容

1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.baidu.com。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

● 举例:
(● 搜索baidu,会用到计算机网络中的什么层?每层是干什么的)
在浏览器地址栏键入URL,按下回车后会经历以下流程:(URL统一资源定位器,指网络地址)
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容;

● 请你说一说HTTP返回码1
● HTTP协议的响应报文由状态行、响应头部和响应包体组成,其响应状态码总体描述如下:
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

● 常见状态代码、状态描述的详细说明如下。
200 OK:客户端请求成功。
206 partial content服务器已经正确处理部分GET请求,实现断点续传或同时分片下载,该请求必须包含Range请求头来指示客户端期望得到的范围
300 multiple choices(可选重定向):被请求的资源有一系列可供选择的反馈信息,由浏览器/用户自行选择其中一个。
301 moved permanently(永久重定向):该资源已被永久移动到新位置,将来任何对该资源的访问都要使用本响应返回的若干个URI之一。
302 move temporarily(临时重定向):请求的资源现在临时从不同的URI中获得,
304:not modified :如果客户端发送一个待条件的GET请求并且该请求以经被允许,而文档内容未被改变,则返回304,该响应不包含包体(即可直接使用缓存)。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
t Found:请求资源不存在,举个例子:输入了错误的URL。

● 请你说一下http协议会话结束标志怎么截出来?
看tcp连接是否有断开的四部挥手阶段。

● SSL安全套接层
主要任务是提供私密性,信息完整性和身份认证
(1)SSL建立的第一阶段:Handshake phase(握手阶段):
1.协商加密算法
2.认证服务器
3.建立用于加密和MAC(Message Authentication Code)用的密钥
(2)SSL建立第二阶段:Secure data transfer phase(安全的数据传输阶段):
在已经建立的SSL连接里安全的传输数据。

● TCP保证可靠性:
(1)序列号、确认应答、超时重传
(2)窗口控制与高速重发控制/快速重传(重复确认应答)
(3)拥塞控制

● TCP建立连接和断开连接的过程:
三次握手:
首先客户端发送seq=c的SYN数据包
服务器端响应一个seq=s,ack=c+1的SYN+ACK数据包
最后客户端回复一个seq=c+1,ack=s+1的ACK数据包,三次握手完成
三次握手原因:
三次握手是为了防止,客户端的请求报文在网络滞留,客户端超时重传了请求报文,服务端建立连接,传输数据,释放连接之后,服务器又收到了客户端滞留的请求报文,建立连接一直等待客户端发送数据。
服务器对客户端的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果客户端并没有收到服务器的回应呢?此时,客户端仍认为连接未建立,服务器会对已建立的连接保存必要的资源,如果大量的这种情况,服务器会崩溃。

四次挥手:
1.客户端发送fin0给服务器
2.服务器收到fin0,回复ack(fin0+1)
3.服务器发送fin1
4.客户端收到fin1,回复ack(fin1+1)

● 为什么需要四次握手
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

● 请你说一说TCP拥塞控制?以及达到什么情况的时候开始减慢增长的速度?
拥塞控制是防止过多的数据注入网络,使得网络中的路由器或者链路过载。流量控制是点对点的通信量控制,而拥塞控制是全局的网络流量整体性的控制。发送双方都有一个拥塞窗口——cwnd。

1、慢开始
最开始发送方的拥塞窗口为1,由小到大逐渐增大发送窗口和拥塞窗口。每经过一个传输轮次,拥塞窗口cwnd加倍。当cwnd超过慢开始门限,则使用拥塞避免算法,避免cwnd增长过大。
2、拥塞避免
每经过一个往返时间RTT,cwnd就增长1。
在慢开始和拥塞避免的过程中,一旦发现网络拥塞,就把慢开始门限设为当前值的一半,并且重新设置cwnd为1,重新慢启动。(乘法减小,加法增大)
3、快重传
接收方每次收到一个失序的报文段后就立即发出重复确认,发送方只要连续收到三个重复确认就立即重传(尽早重传未被确认的报文段)。
4、快恢复
当发送方连续收到了三个重复确认,就乘法减半(慢开始门限减半),将当前的cwnd设置为慢开始门限,并且采用拥塞避免算法(连续收到了三个重复请求,说明当前网络可能没有拥塞)。
采用快恢复算法时,慢开始只在建立连接和网络超时才使用。

● 滑动窗口
滑动窗口的分类
滑动窗口分为三类:停止等待、后退N帧、选择重传。他们之间主要的区别就是:发送窗口和接收窗口大小的区别。

停止等待协议:

发送窗口大小 = 1, 接收窗口大小= 1
后退N帧协议

发送窗口大小 > 1,接收窗口大小 = 1
选择重传协议

发送窗口大小 > 1, 接收窗口大小 > 1

达到什么情况的时候开始减慢增长的速度?

采用慢开始和拥塞避免算法的时候

  1. 一旦cwnd>慢开始门限,就采用拥塞避免算法,减慢增长速度
  2. 一旦出现丢包的情况,就重新进行慢开始,减慢增长速度

采用快恢复和快重传算法的时候

  1. 一旦cwnd>慢开始门限,就采用拥塞避免算法,减慢增长速度
  2. 一旦发送方连续收到了三个重复确认,就采用拥塞避免算法,减慢增长速度

● 请你说说TCP/IP数据链路层的交互过程
网络层等到数据链层用mac地址作为通信目标,数据包到达网络层准备往数据链层发送的时候,首先会去自己的arp缓存表(存着ip-mac对应关系)去查找该目标ip的mac地址,如果查到了,就将目标ip的mac地址封装到链路层数据包的包头。如果缓存中没有找到,会发起一个广播:who is ip XXX tell ip XXX,所有收到的广播的机器看这个ip是不是自己的,如果是自己的,则以单拨的形式将自己的mac地址回复给请求的机器

● 请你说一说IP地址作用,以及MAC地址作用
MAC地址是一个硬件地址,用来定义网络设备的位置,主要由数据链路层负责。而IP地址是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

● 请问tcp握手为什么两次不可以?为什么不用四次?
两次不可以:tcp是全双工通信,两次握手只能确定单向数据链路是可以通信的,并不能保证反向的通信正常
不用四次:
本来握手应该和挥手一样都是需要确认两个方向都能联通的,本来模型应该是:
1.客户端发送syn0给服务器
2.服务器收到syn0,回复ack(syn0+1)
3.服务器发送syn1
4.客户端收到syn1,回复ack(syn1+1)
因为tcp是全双工的,上边的四部确认了数据在两个方向上都是可以正确到达的,但是2,3步没有没有上下的联系,可以将其合并,加快握手效率,所有就变成了3步握手。

● 请你来说一下TCP拥塞控制?
发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。

● TCP和UDP的区别和各自适用的场景
TCP:传输控制协议
服务对象 连接 可靠性 拥塞控制 首部开销 报文长度 场景
TCP 点对点 面向连接 √ √ 20个字节 动态长度 文件传输
UDP 一对一,一对多,多对一,多对多 无连接 × × 8 保留上面传下来报文的边界 视频、实时通信

● 请你说说传递到IP层怎么知道报文该给哪个应用程序,它怎么区分UDP报文还是TCP报文?
根据端口区分;
看ip头中的协议标识字段,17是udp,6是tcp

● 请问你有没有基于做过socket的开发?具体网络层的操作该怎么做?(其实也是问网络编程的基本步骤)
服务端:socket-bind-listen-accept
客户端:socket-connect

● 请问server端监听端口,但还没有客户端连接进来,此时进程处于什么状态?
这个需要看服务端的编程模型,如果如上一个问题的回答描述的这样,则处于阻塞状态,如果使用了epoll,select等这样的io复用情况下,处于运行状态

● 请你来说一下GET和POST的区别

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
区别:
参数位置 参数长度 安全 编码方式 浏览历史记录 TCP数据包
GET URL 有限制 × url 请求参数会被完整保留 1个
POST request body 无 √ 多种 不会被保留 2个

● 请你来说一下socket编程中服务器端和客户端主要用到哪些函数

● 请你来介绍一下udp的connect函数
connect()可以用来指明目的地址/端口;
sendto()=connect()+send()
一般来说,UDP客户端在建立了插口后会直接用sendto()函数发送数据,需要在sendto()函数的参数里指明目的地址/端口。如果一个UDP客户端在建立了插口后首先用connect()函数指明了目的地址/端口,然后也可以用send函数发送数据,因为此时send函数已经知道对方地址/端口,用getsockname()也可以得到这个信息。

● 请你来说一下数字证书是什么,里面都包含那些内容
数字证书是在一个身份和该身份的持有者所拥有的公/私钥对之间建立了一种联系,由认证中心(CA)或者认证中心的下级认证中心颁发的。

● DNS和子网以及子网掩码的概念
DNS:域名系统,用于TCP/IP网络,提供域名与IP地址的解析服务
IP地址:IP 是32位二进制数据,通常以十进制表示,并以点分割,IP 地址是一种逻辑地址,用来标识网络中一个个主机,IP 有唯一性
子网掩码:用来判断任意两台计算机的 IP 地址是否属于同一子网络的根据,最为简单的理解就是两台计算机各自的 IP 地址与子网掩码进行 and 运算后,得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的

● Ip的主要格式,可以重复使用ip吗 ,10和192开头的ip为啥不用域名
IPv6的128位地址每16位划分为一段,总共8段,每段用冒号隔开
A类地址:0开头 B类:10 C类:110 D类:1110


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进