计算机网络部分相关面试问题

链接:https://www.nowcoder.com/discuss/161991
来源:牛客网
 

❤1、网络概述

1、TCP协议在哪一层?IP协议在那一层?HTTP在哪一层?

❤2、运输层

1、讲一下TCP的连接和释放连接。

1.TCP整个过程流程图

并且TCP整个过程可以看成是状态机

 

 

2.TCP建立过程(三次握手)

 TCP连接过程:

(1) 服务端通过socket,bind和listen准备好接受外来的连接,此时服务端状态为Listen

(2)客户端通过调用connect来发起主动连接,导致客户端TCP发送一个SYN(同步)字节,告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号,客户端状态为SYN_SENT。

(3)服务器确认(ACK)客户的SYN,并自己也发送一个SYN,它包含服务器将在同一连接中发送数据的初始序列号。

(4)客户端确认服务的ACK和SYN,向服务器发送ACK,客户端状态ESTABLISHED

(5)服务器接收ACK,服务器状态ESABLISHED。

3.TCP关闭过程(四次握手)

 TCP连接中止过程:

(1)某端首先调用close,成为主动关闭端,向另一端发送FIN分节,表示数据发送完毕,此时主动关闭端状态FIN_WAIT_1;

(2)接收到FIN的是被动关闭端,FIN由TCP确认,先向主动关闭端发送ACK,作为一个文件结束符传递给接收端应用进程(放在已排队等候该应用进程接收到的任何其他数据之后),因为FIN的接收意味着接收端应用进程在相应连接无额外数据可接收,接收端状态CLOSE_WAIT;主动关闭端接收到ACK状态变为FIN_WAIT_2;

(3)一段时间后,接收端接收到这个文件结束符的应用进程调用close关闭套接字,向主动关闭端发送FIN,接收端状态为LAST_ACK;

(4)主动关闭端确认FIN,状态变为TIME_WAIT,并向接收端发送ACK,接收端接收到ACK关闭TCP,而主动关闭端一段时间后也关闭TCP;

参考:https://www.cnblogs.com/dj0325/p/8490293.html

2、TCP有哪些应用场景

tcp协议是面向连接的,可靠的数据传输协议,但是它的传输数据速率相比于udp协议比较慢。它适用于对数据传输可靠性要求比较高的场景,例如文本传输之类的。

3、tcp为什么可靠

TCP使用了校验,序号,确认,重传等机制来达到这个目的

4、tcp为什么要建立连接
tcp是提供可靠性连接的,只有支持端到端的连接,才能进行可靠性传输,连接的主要功能在于记录两个端口间的通信状态,不连接则无法记录两个端口通信的状态,则无法知道丢失了哪个数据包,重复收到了哪个数据包,也无法确保数据包之间的到达顺序,还有很多增加可靠性的功能都无法应用。

链接:https://www.nowcoder.com/questionTerminal/c0bba7052fe444c89a1ef1dace646d4b?orderByHotValue=1&page=1&onlyReference=false

5、阐述TCP的4次挥手

6、讲一下浏览器从接收到一个URL到最后展示出页面,经历了哪些过程。

原文连接:https://blog.csdn.net/ZHLittleRed/article/details/82947330#1_DNS_3

一、浏览器从接收到一个url,到最后的页面展示,经历的过程:

   1、在浏览器地址栏中输入URL

   2、DNS域名解析,获得域名相对应的IP地址。

         当我们在浏览器输入如同www.baidu.com的时候,其实这些网站的名字都是微克简化人们的记忆来命名的 ,计算机其实并不认识这个东西。浏览器只认识IP地址,所以当输入域名地址的时候,浏览器首先会从浏览器缓存中是否存在相应的域名、IP对应关系,如果有则向这个IP地址发送请求,如果没有则向系统缓存--路由缓存中查找,如果都没有,再去DNS服务器中找IP。

    3、浏览器向服务器发起TCP连接,与浏览器建立TCP三次握手

    4、浏览器向服务器发送HTTP请求,请求数据包

        与服务器建立了连接后,就可以向服务器发起请求了。发送HTTP请求的过程就是构建HTTP请求报文,并通过TCP协议发送到服务器指定端口(HTTP协议80/8080,HTTPS协议443)。HTTP请求是由三部分组成:请求行、请求报头和请求正文。

    5、服务器处理收到的请求

        服务器端收到请求后,由web服务器(准确来说应该是HTTP服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了要调度哪些资源文件,再通过相应的这些文件处理用户请求和参数,并调用数据库信息 ,最后将结果通过web服务器返回浏览器客户端。

    6、返回相应结果至浏览器

         HTTP响应报文也是由三部分组成:状态码、响应报头和响应报文。

         状态码是由三位数组成,第一个数字定义了响应的类别,且有5中可能值:  

          ·  1XX:指示信息,表示请求已接受,继续处理。

          ·  2XX:成功,表示请求已被成功接收、理解、接受。

          ·  3XX:重定向,要完成请求必须进行更进一步的操作。

          ·  4XX:客户端错误,请求有语法错误或无法实现。

          ·  5XX:服务器端错误,服务器未能实现合法的请求。

          常见状态码有:200,204,301,302,304,400,401,404,500

    7、关闭TCP连接

        为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。

    8、浏览器解析渲染页面

        浏览器在收到HTML、CSS、JS文件后,就需要进行渲染。 

        浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念:reflow(回流)和repain(重绘)。DOM节点中的各个元素是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为reflow;当盒模型的位置、大小以及其他属性,如颜色、字体等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能的减少reflow和repain。

       JS的解析是由浏览器中的JS解析引擎完成的。

       浏览器在解析过程中,如果遇到请求外部资源时,如图像、JS等。浏览器将重复1-6过程下载该资源。请求过程是异步的,并不会影响HTML文档进行加载,但是当文档加载过程中遇到JS文件,HTML文档会挂起渲染过程,不仅要等到文档中JS文件加载完毕还要等待解析执行完毕,才会继续HTML的渲染过程。原因是因为JS有可能修改DOM结构,这就意味着JS执行完成前,后续所有资源的下载是没有必要的,这就是JS阻塞后续资源下载的根本原因。CSS文件的加载不影响JS文件的加载,但是却会影响JS文件的执行。JS代码执行前浏览器必须保证CSS文件已经下载并加载完毕。

PS:步骤二的具体过程是:

  • 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
  • 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使用系统调用操作系统,获取操作系统的记录(保证最近的DNS查询缓存);
  • 路由器缓存:如果上述两个步骤均不能成功DNS记录,继续搜索路由器缓存;
  • ISP缓存:若上述均失败,继续向ISP搜索。

7、http和https的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

一、HTTP和HTTPS的基本概念

  HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

  HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

  HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

二、HTTPS和HTTP的区别主要如下:

  1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

参考:https://www.cnblogs.com/wqhwe/p/5407468.html

8、http的请求有哪些,应答码502和504有什么区别

Http请求有哪些

HTTP请求方法在不同的HTTP的版本中,有着不同的请求,并且可以根据HTTP的标准,可以使用多种请求。

HTTP1.0有分钟请求,分别是GET, POST 和 HEAD方法,而HTTP1.1在原本基础上,新增加了五种请求方法,分别是OPTIONS, PUT, DELETE, TRACE 和 CONNECT方法。

1.GET

GET可以请求指定的页面,并且返回网站的实体。

2.HEAD

HEAD和GET请求很相似,只不过是不能返回具体的内容,主要是用于获取报头。

3.POST

POST是像之指定的数据进行发送请求,在网站中,可能会有一些表单的和文件的上传,当数据包含在请求当中,POST请求就会导致一些数据的变动和修改。

4.PUT

PUT是指从客户端向服务器传送数据,并且把一部分的数据进行取代。

5.DELETE

DELETE是指送到到服务器要求删除指定的页面。

6.CONNECT

CONNECT是指预留给可以连接改为管道的服务器。

7.OPTIONS

OPTIONS是请求是可以允许客户看服务器的性能。

8.TRACE

TRACE主要是用于测试,并且返回一些服务器的请求。

502和504的区别

502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 
504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

502错误主要从四个方向入手: 
1. max_children 
2. request_terminate_timeout、max_execution_time 
3. 数据库 
4. 网关服务是否启动如php-fpm 
504错误主要查看nginx.conf关于网关如fastcgi的配置。

参考:https://www.cnblogs.com/liluxiang/p/9360944.html

9、http1.1和1.0的区别

http1.0与http1.1的区别

http1.0只能支持短链接,http1.1则可以支持长链接(并不是只支持)。对长链接的支持是因为添加了一些请求头,如host字段、响应码100(continue,允许发送方向服务器发送一个请求头以试探是否有发送权限,与100相对应的响应码是401)、Chunked transfer-coding(发送时将消息划分为几个数据块,结束时以一个空块结尾 )、revalidation(当cache的age超过一定时限,不是直接排抛弃,而是等待重新激活)

 具体如下:

1、HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理

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

HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent  connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).

在1.0时的会话方式:
 1. 建立连接
 2. 发出请求信息
 3. 回送响应信息
 4. 关掉连接

 HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。

请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。  HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。

2.HTTP 1.1增加host字段

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

 HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

3、100(Continue) Status(节约带宽)

HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。

4、HTTP/1.1中引入了Chunked transfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。

5、HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。

参考:https://www.cnblogs.com/dj0325/p/8490293.html

10、说说ssl四次握手的过程

ssl四次握手简述
1、client请求; 
2、server生成随机数1,并返回数字证书和公钥; 
3、client生产随机数2,该随机数用服务器公钥加密,防止被窃听,并返回给服务器 
4、server用私钥解密随机数2,随后生成随机数3,然后用三个随机数生成“对话密钥”(session key),并返回给客户端,用来加密接下来的整个对话过程 

ssl四次握手示意图
参考:https://blog.csdn.net/xc578579786/article/details/55049745

11、304状态码有什么含义?

链接:https://www.nowcoder.com/questionTerminal/84a818609d6a42308dff09be2cd456aa?orderByHotValue=0&mutiTagIds=640&page=1&onlyReference=false
304状态码是告诉浏览器可以从缓存中获取所请求的资源。当浏览器请求某一文件时,发现自己缓存的文件有Last-Modified,就会在httpRequest里面添加消息头If-Modified-Since 和If-Non-Match,服务器在收到reqeust时,和服务器本地文件对比,如果没有更新,则仅仅返回一个响应头Head(状态码304,而没有响应体),客户端在收到这个响应时,就会从本地缓存加载请求的资源。

 

❤3、网络层

1、arp协议,arp攻击

arp攻击就是arp欺骗。

使用别人的IP地址和自己的MAC地址向目标主机发送ARP包

欺骗成功后,目标发给别人IP地址的数据,都会发到你对应的MAC地址的设备上。

2、icmp协议

ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息。

ICMP Redirect重定向消息用于支持路由功能。如图所示,主机A希望发送报文到服务器A,于是根据配置的默认网关地址向网关RTB发送报文。网关RTB收到报文后,检查报文信息,发现报文应该转发到与源主机在同一网段的另一个网关设备RTA,因为此转发路径是更优的路径。所以RTB会向主机发送一个Redirect消息,通知主机直接向另一个网关RTA发送该报文。主机收到Redirect消息后,向RTA发送报文,RTA会将报文转发给服务器A。

ICMPEcho消息常用于诊断源和目的之间的网络连通性,还可以提供其他信息,如报文往返时间等。

ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。比如,如果网络中发生了环路,导致报文在网络中循环,最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。又比如如果目的不可达,则中间的网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。
参考:https://blog.csdn.net/boke14122621/article/details/70176395

3、讲一下路由器和交换机的区别?

交换机实际就是多接口的网桥

(1)外形上

交换机通常端口比较多,路由器端口少体积小,(路由器一般都集成了交换机的功能,LAN口就是作为交换机的端口来使,

WAN用于连接外网的端口。

(2)工作层次不同

交换机在数据链路层(实现数据帧的转发),而路由器在网络层(肩负着网络互连的作用)。

(3)数据的转发对象不同

交换机是根据MAC地址转发数据帧,而路由器是根据IP地址来转发数据报。IP地址决定最终数据要到达某一台主机,而MAC地址是决定下一跳将要交给哪一台设备(一般是交换机或者路由器),IP地址是软件实现的,可以描述主机所在的网络,MAC地址是硬件实现的,每一个网卡在出厂时都会将全世界唯一的MAC地址固化在ROM中,因此MAC不可改,IP可改

(4)分工不同

交换机主要是用于组建局域网,而路由器则负责让主机连接外网,多台主机可以通过网线连接到交换机,这时候就组建好了局域网,就可以通过网线连接到交换机,这时就组建好了局域网,就可以将数据发给局域网中的其他主机,然而通过交换机组建的局域网是不能访问外网的,这时就需要路由器为我们来打开外网大门,局域网的所有主机使用的都是私网的IP,所以必须通过,路由器转换为公网IP之后才能访问外网

(5)冲突域和广播域

交换机分割冲突域,但不分割广播域,而路由器分割广播域。由交换机连接的网段,仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,这时会导致广播风暴和安全漏洞。而连接在路由器上的网段会被分配到不同的广播域。路由器不会转发广播数据。交换机会转发广播数据给局域网中的所有主机,值得说明的是单播的数据包在局域网中会被交换机唯一的送到目标主机,其他主机不会接受到数据,这是区别于原始的集线器的。

❤4、应用层

1、DNS寻址过程

链接:https://www.nowcoder.com/questionTerminal/39df6c8a182647a9b3688a4bfb9f5a97?toCommentId=2550034
来源:牛客网

1、客户机发出查询请求,在本地计算机缓存查找,若没有找到,就会将请求发送给dns服务器

2、先发送给本地dns服务器,本地的就会在自己的区域里面查找,若找到,根据此记录进行解析,若没有找到,就会在本地的缓存里面查找

3、本地服务器没有找到客户机查询的信息,就会将此请求发送到根域名dns服务器

4、根域名服务器解析客户机请求的根域部分,它把包含的下一级的dns服务器的地址返回到客户机的dns服务器地址

5、客户机的dns服务器根据返回的信息接着访问下一级的dns服务器

6、这样递归的方法一级一级接近查询的目标,最后在有目标域名的服务器上面得到相应的IP信息

7、客户机的本地的dns服务器会将查询结果返回给我们的客户机

8、客户机根据得到的ip信息访问目标主机,完成解析过程

2、负载均衡反向代理模式优点及缺点

优点:(1)反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升静态网页的访问速度,提供有益的性能;
(2)由于网络外部用户不能直接访问真实的服务器,具备额外的安全性(同理,NAT负载均衡技术也有此优点)。

其缺点主要表现在以下两个方面:
(1)反向代理是处于OSI参考模型第七层应用的,所以就必须为每一种应用服务专门开发一个反向代理服务器,这样就限制了反向代理负载均衡技术的应用范围,现在一般都用于对web服务器的负载均衡。
(2)针对每一次代理,代理服务器就必须打开两个连接,一个对外,一个对内,因此在并发连接请求数量非常大的时候,代理服务器的负载也就非常大了,在最后代理服务器本身会成为服务的瓶颈。
一般来讲,可以用它来对连接数量不是特别大,但每次连接都需要消耗大量处理资源的站点进行负载均衡,如search等。
参考:https://blog.csdn.net/weixin_43321444/article/details/93308210

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值