计算机网络面试题

OSI 的七层模型分别是?各自的功能是什么?

物理层:负责底层链路的数据传输

数据链路层:负责数据的封装,差错检验,以及MAC寻址

网络层:负责数据的路由、转发、分片

传输层:负责端到端的数据传输

会话层:控制应用程序之间的会话能力

表示层:数据格式标识,基本的压缩加密功能

应用层:负责给应用程序提供统一的接口

  • 在四层,既传输层数据被称作段(Segments);
  • 三层网络层数据被称做包(Packages);
  • 二层数据链路层时数据被称为帧(Frames);
  • 一层物理层时数据被称为比特流(Bits)。

为什么需要三次握手?两次不行?

首先客户端和服务器端都处于CLOSED(关闭) 状态,TCP服务器进程首先创建传输控制模块TCB,然后进入LISTEN(收听)状态,客户端也创建传输控制模块TCB,然后客户端进行第一次握手(SYN=1,不能携带数据,消耗掉一个序号),客户端进入SYN-SENT(同步已发送)状态,服务器端收到后,进行第二次握手(SYN=1,ACK=1,不能携带数据,消耗一个序号)然后服务器端进入SYN—RCVD(同步收到)状态,客户端收到后,进行第三次握手(ACK=1,可以携带数据,不携带不消耗序号),客户端进入ESTABLISHED(连接建立)状态,等服务器端收到ACK后也进入了ESTABLISHEN(连接建立)状态。

三此握手是为了确定发送方和接收方的收发能力。防止已失效的连接请求报文段又发送到服务器端

为什么需要四次挥手?三次不行?

开始时,双方都处于ESTABLISHED(连接建立)状态,然后客户端进行第一次挥手,(FIN=1,可以携带数据,不携带消耗一个序号),然后客户端进入FIN-WAIT-1(终止等待1)状态,服务器端收到后,进行第二次挥手,(ACK=1,可以携带数据,不携带不消耗序号),服务器端进入,CLOSE-WAIT(关闭等待)状态,客户端收到后,进入FIN-WAIT-2(终止等待2)状态,然后服务器端进行第三次挥手(FIN=1,可以携带数据,不携带消耗一个序号),然后服务器端进入LAST-ACK(最终确认状态),客户端收到后进行第四次挥手(ACK=1,可以携带数据,不携带不消耗序号),然后进入TIME-WAIT(时间等待)状态,等待2MSL(最长报文段寿命),等时间到了后进入CLOSED(关闭)状态,服务器端收到ACK后也进入CLOSED(关闭)状态

为什么要设置TIME-WAIT状态必须等待2MSL?

①确保服务器端收到ACK

②防止已失效连接请求报文段出现在本连接中

TCP与UDP有哪些区别?各自应用场景?

TCP UDP
可靠传输 不可靠传输,尽最大努力交付
面向连接 无连接
传输的数据有序 不能保证数据有序
不保留数据边界 保留数据边界
传输速度较慢
有流量控制和拥塞控制 没有
重量级协议 轻量级协议
首部20字节 首部8字节
点到点通信 支持一对一,一对多,多对多通信
面向字节流 面向报文

TCP:效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。例如文件传输(准确高要求高、但是速度可以相对慢)FTP、接受邮件SMTP(简单邮件传输协议)、远程登录(telnet)。HTTP,HTTPS 

UDP:效率要求相对高,对准确性要求相对低的场景。例如:QQ聊天、在线视频、(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、SNMP(简单网络管理协议),DSN,DHCP,TFTP,RIP

 

 

 

 

 

 

 

 

 图片出处:TCP与UDP有哪些区别?各自应用场景?-帅地玩编程 (iamshuaidi.com)

HTTP1.0,1.1,2.0 的版本区别

HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

HTTP1.0 其实也可以强制开启长链接,例如接受Connection: keep-alive 这个字段

HTTP1.1引入了持久连接。所谓的持久连接即TCP连接默认不关闭,可以被多个请求复用。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。或者客户端在最后一个请求时,主动告诉服务端要关闭连接。

HTTP/1.1版还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率

HTTP/2 采用了多路复用。即在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。(可以先处理短的进程再处理长的),能这样做有一个前提,就是HTTP/2进行了二进制分帧,即 HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码,而这个负责拆分、组装请求和二进制帧的一层就叫做二进制分帧层。除此之外,还有一些其他的优化,比如做Header压缩(压缩会话过程)、服务端推送(提前发送)等。

POST和GET有哪些区别?各自应用场景?

使用场景:GET 用于获取资源,而 POST 用于传输实体主体。

  GET  POST 
使用场景 获取资源 传输实体主体
参数 以查询字符串出现在 URL 中,如果存在中文等字符就需要先进行编码 存储在实体主体中,参数支持标准字符集
安全性 安全(HEAD、OPTIONS也是安全的) 不安全(因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。)(PUT、DELETE也是不安全的)
幂等性,(同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的) 不是

可缓存

多数情况下不是

XMLHttpRequest

 Header 和 Data 会一起发送 浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。
     

 

 

 

 

 

 POST和GET有哪些区别?各自应用场景?-帅地玩编程 (iamshuaidi.com)

HTTP 哪些常用的状态码及使用场景?

1xx:表示目前是协议的中间状态,还需要后续请求

2xx:表示请求成功

3xx:表示重定向状态,需要重新请求

4xx:表示请求报文错误

5xx:服务器端错误

 

101 切换请求协议,从 HTTP 切换到 WebSocket

200 请求成功,有响应体

301 永久重定向:会缓存

302 临时重定向:不会缓存

304 协商缓存命中

403 服务器禁止访问

404 资源未找到

400 请求错误

500 服务器端错误

503 服务器繁忙

HTTP状态码301和302的区别,都有哪些用途?

301重定向(301 Move Permanently),指页面永久性转移,表示为资源或页面永久性地转移到了另一个位置,对于同一资源页面多条路径的301重定向有助于URL权重的集中。302重定向是页面暂时性转移,搜索引擎会抓取新的内容而保存旧的网址并认为新的网址只是暂时的,常被用于网页劫持

 

 

 

在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?

在 HTTP 中响应体的 Connection 字段指定为 keep-alive

HTTP 如何实现长连接?在什么时候会超时?

HTTP1.0通过在头部(请求和响应头)设置 Connection: keep-alive,,从HTTP1.1协议以后,连接默认都是长连接、

HTTP 一般会有 httpd 守护进程,里面可以设置 keep-alive timeout,当 tcp 链接闲置超过这个时间就会关闭,也可以在 HTTP 的 header 里面设置超时时间

HTTP 如何实现长连接?在什么时候会超时?-帅地玩编程 (iamshuaidi.com)

TCP 如何保证有效传输及拥塞控制原理

TCP可靠体现在:有状态、可控制,,TCP通过编号确保数据按序到达,无差错,如果出现丢包或者网络状况不佳,则会跳转自己的行为,减少发送的速度或者重发。

拥塞控制:慢开始(从发送窗口从1开始,收到确认后增加窗口值(收到几个ACK增加几个),呈指数增加)到达设置的阈值时开始拥塞避免算法,开始逐步加一(呈现线性变化),出现超时时,阈值=窗口值减半,窗口值等于一开始执行慢开始算法,当收到3个重复ACK时,执行快重传和快恢复算法,阈值=窗口值减半,窗口值=阈值,开始执行拥塞避免算法。

IP地址有哪些分类?

 

 

 A类可用网络号:1-126(127用于本地环回测试)保留地址:10.0.0.0-10.255.255.255

B类可用网络号:128-191                     保留地址:172.16.0.0-172.31.255.255

C类可用网络号:192-233                     保留地址:192.168.0.0 192.168.255.255

GET请求中URL编码的意义

服务端在接收到数据后进行遍历该字节流是可能发生我们的本意是只有一个键值对,但是服务端却会解析成两个键值对,这样就产生了歧义,所以用对参数进行URL编码解决这个问题

什么是SQL 注入?举个例子?

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

SELECT * FROM user_table WHERE username=’’or 1 = 1-- and password=“(--注释的意思)

应对的方法:参数绑定;使用正则表达式过滤传入的参数

什么是SQL 注入?举个例子?-帅地玩编程 (iamshuaidi.com)

谈一谈 XSS 攻击,举个例子?

XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

反射性XSS攻击 (非持久性XSS攻击):每次攻击需要用户的点击

持久性XSS攻击 (留言板场景):XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。

解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

谈一谈 XSS 攻击,举个例子?-帅地玩编程 (iamshuaidi.com)

讲一下网络五层模型,每一层的职责?

物理层:负责底层链路的数据传输

数据链路层:负责数据的封装,差错检验、MAC寻址

网络层:负责数据路由的选择、转发,分片

传输层:负责端到端的数据传输

应用层:给上层应用提供统一的接口

讲一下网络五层模型,每一层的职责?-帅地玩编程 (iamshuaidi.com)

简单说下 HTTPS 和 HTTP 的区别

1、端口不同:Http是80,HTTPS是443;

2、资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;

3、开销:Https通信需要证书,而证书一般需要向认证机构购买;

4、HTTP是明文传输,HTTPS添加了SSL,是加密的

对称加密与非对称加密的区别

 

简单说下每一层对应的网络协议有哪些?

 

 

 

 

ARP 协议的工作原理?

 

 

 

TCP 的主要特点是什么?

 

 

 

UDP 的主要特点是什么?

 

 

 

TCP 和 UDP 分别对应的常见应用层协议有哪些?

 

 

 

 

 

 TCP 和 UDP 分别对应的常见应用层协议有哪些?-帅地玩编程 (iamshuaidi.com)

为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

为了保证 A客户端发送的最后一个 ACK 报文段能够到达 服务器端

防止已失效的连接请求报文段出现在本连接中。

保活计时器的作用?

 

 

 

TCP 协议是如何保证可靠传输的?

①数据包校验,检测数据传输过程中的任何变化,如果出错,则丢弃等超时重传。

②对失序的数据包重新排序

③丢弃重复数据

④应答机制,每收到报文后进行确认

⑤超时重传

⑥流量控制:通过滑动窗口

谈谈你对停止等待协议的理解?

一个分组发送完后,等待对方的确认,确认收到后,再发下一个分组

 

 

 

谈谈你对 ARQ 协议的理解?

 

 

 

谈谈你对滑动窗口的了解?

发送方有发送窗口,接收方有接收窗口,

 

 

 

谈下你对流量控制的理解?

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

谈下你对 TCP 拥塞控制的理解?使用了哪些算法?

拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。

拥塞控制:慢开始(从发送窗口从1开始,收到确认后增加窗口值(收到几个ACK增加几个),呈指数增加)到达设置的阈值时开始拥塞避免算法,开始逐步加一(呈现线性变化),出现超时时,阈值=窗口值减半,窗口值等于一开始执行慢开始算法,当收到3个重复ACK时,执行快重传和快恢复算法,阈值=窗口值减半,窗口值=阈值,开始执行拥塞避免算法。

什么是粘包?

一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包

原因:①TCP传输的是字节流没有边界②TCP 的首部没有表示数据长度的字段

TCP 粘包是怎么产生的?

发送方:数据块过小时或合并发送

接收方:收到后会放在缓存里面,当处理速度<接收速度时会发生

 

 

 

怎么解决拆包和粘包?

  1. 特殊字符控制;

     

  2. 在报头首都添加数据包的长度。

 

forward 和 redirect 的区别?

直接转发方式(Forward):客户端和浏览器只发出一次请求

间接转发方式(Redirect):实际是两次 HTTP 请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个 URL 发出请求,从而达到转发的目的。

 

 

 

HTTP 方法有哪些?

get :获取资源

head :获取报文首部,不返回实体主体

post :传输实体主体

put :上传文件

patch:对资源进行部分修改

option:查询指定的URL支持的方法

CONNECT:要求在与代理服务器通信时建立隧道

TRACE:追踪路径。

Delete:删除文件,

在浏览器中输入 URL 地址到显示主页的过程?

首先DSN解析回去域名对应的IP地址,然后通过TCP建立连接,然后发送HTTP请求,服务器响应请求并返回HTTP报文,浏览器接收报文后,渲染页面,连接结束

DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地址:具体过程包括浏览器搜索自身的 DNS 缓存、搜索操作系统的 DNS 缓存、读取本地的 Host 文件和向本地 DNS 服务器进行查询等。

对于向本地 DNS 服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询

TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手;

发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求;

服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

浏览器解析渲染页面:浏览器解析并渲染视图,若遇到对 js 文件、css 文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

连接结束

DNS 的解析过程?

主机向本地域名服务器查询一般是递归查询:本地域名服务器查不到,会向根域名服务器进行查询,而不是让主机自己进行下一步查询,返回结果要么是查询的IP地址,要么是报错

本地域名服务器向根域名服务器查询的迭代查询,要么给出查询的IP地址,要么给出下一步

 

 

 

谈谈你对域名缓存的了解?

为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

谈谈你对域名缓存的了解?-帅地玩编程 (iamshuaidi.com)

谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?

在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。

而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

HTTPS 的工作过程?

首先客户端发送自己支持的加密规则给服务器,表示要开始连接了,服务器端选择加密算法和hash算法以及自己的身份信息以证书的形式发送给浏览器,客户端收到证书后,首先要检查证书的合法性,如果通过了,浏览器就会生成一组随机数并用证书里面的公钥进行加密,用约定好的 hash 算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器。服务器收到后用私钥解析出密码,用密码解析握手消息,验证 hash 值是否和浏览器发来的一致,还要使用密钥加密消息;如果计算的 hash 值一致,握手成功。

 

 

HTTP 和 HTTPS 的区别?

 

 

 

 

HTTPS 的优缺点?

 

 

 

什么是数字签名?

为了避免数据在传输过程中被替换,比如黑客修改了你的报文内容,但是你并不知道,所以我们让发送端做一个数字签名,把数据的摘要消息进行一个加密,比如 MD5,得到一个签名,和数据一起发送。然后接收端把数据摘要进行 MD5 加密,如果和签名一样,则说明数据确实是真的。

什么是数字证书?

称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但是数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥其实是假的。所以为了保证发送方的公钥是真的,CA 证书机构会负责颁发一个证书,里面的公钥保证是真的,用户请求服务器时,服务器将证书发给用户,这个证书是经由系统内置证书的备案的。

Cookie 和 Session 有什么区别?

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

UDP 如何实现可靠传输?

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

         实现确认机制、重传机制、窗口确认机制。

发送:包的分片、包确认、包的重发

         接收:包的调序、包的序号确认

         目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。

UDP 如何实现可靠传输?-帅地玩编程 (iamshuaidi.com)

Keep-Alive 和非 Keep-Alive 有什么区别?

非:每次传输都要建立TCP连接,传输完毕后就关闭

是:一个TCP连接可以复用,进行多次数据传输,当 TCP 连接在传送完最后一个 HTTP 响应,该连接会保持 keepalive_timeout 秒,之后就开始关闭这个链接。

HTTP 长连接短连接使用场景是什么

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况例如: 数据库的连接用长连接

而像 WEB 网站的 http 服务一般都用短链接,因为长连接对于服务端来说会耗费一定的 资源

DNS 为什么用 UDP

提高响应速度

 

 

 

 

 

简单说下怎么实现 DNS 劫持

DNS 劫持即域名劫持,是通过将原域名对应的 IP 地址进行替换从而使得用户访问到错误的网站或者使得用户无法正常访问网站的一种攻击方式

 

 

 

URI和 URL之间的区别

URL,即统一资源定位符 (Uniform Resource Locator ),URL 其实就是我们平时上网时输入的网址,它标识一个互联网资源,并指定对其进行操作或获取该资源的方法。

而 URI 则是统一资源标识符,URL 是 URI 的一个子集,两者都定义了资源是什么,而 URL 还定义了如何能访问到该资源。

RI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。简单地说,只要能唯一标识资源的就是 URI,在 URI 的基础上给出其资源的访问方式的就是 URL。

TIME_WAIT 状态会导致什么问题,怎么解决

 

 

 

 

 

 

 

有很多 TIME-WAIT 状态如何解决

服务器可以设置 SO_REUSEADDR 套接字选项来通知内核,如果端口被占用,但 TCP 连接位于 TIME_WAIT 状态时可以重用端口。如果你的服务器程序停止后想立即重启,而新的套接字依旧希望使用同一端口,此时 SO_REUSEADDR 选项就可以避免 TIME-WAIT 状态。

也可以采用长连接的方式减少 TCP 的连接与断开,在长连接的业务中往往不需要考虑 TIME-WAIT 状态,但其实在长连接的业务中并发量一般不会太高。

简单说下 SYN FLOOD 是什么

SYN Flood 又称 SYN 洪水攻击,也是拒绝服务攻击的一种,是一种曾经很经典的攻击方式。攻击者利用TCP协议的安全缺陷,不断发送一系列的SYN请求到目标系统,消耗服务器系统的资源,从而导致目标服务器不响应合法流量请求。

简单说下 SYN FLOOD 是什么-帅地玩编程 (iamshuaidi.com)

ICMP 有哪些应用?

ICMP 主要有两个应用,一个是 Ping,一个是 Traceroute。

ing 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。

TCP 最大连接数限制

在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。

全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。

服务器端最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

TCP 最大连接数限制-帅地玩编程 (iamshuaidi.com)

IP地址和MAC地址有什么区别?各自的用处?

简单着说,IP 地址主要用来网络寻址用的,就是大致定位你在哪里,而 MAC 地址,则是身份的唯一象征,通过 MAC 来唯一确认这人是不是就是你,MAC 地址不具备寻址的功能。

IPV4 地址不够如何解决

NAT(地址转换协议)IPV6

posted @ 2022-04-23 23:56  小白糖  阅读(136)  评论(0)    收藏  举报