网络层:常见的面试题和答案 蔚落 2024-04-20 12:11 59阅读 0赞 #### 1、什么是IPv4和IPv6?它们有什么区别? #### 答:IPv4是32位的IP地址格式,而IPv6是128位的IP地址格式。IPv4地址空间有限,而IPv6地址空间更大,可以提供更多的地址。 #### 2、说说 HTTP 和HTTPS 的区别? #### * HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。 * HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。 * HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 * HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。 #### 3、什么是NAT(网络地址转换)?它的作用是什么? #### 答:NAT是一种将私有IP地址转换为公共IP地址的技术,用于解决IP地址不足的问题。它的作用是实现多个设备共享一个公共IP地址。 #### 4、计算机模型分层结构有哪些 #### 答:计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。 ![在这里插入图片描述][87184e3fbb29433ab92b30f3b65fca2a.png] 当前介绍一下五层协议相关内容: * 应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。 * 传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。 * 网络层:选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。 * 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。 * 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。 #### 5、说说 WebSocket与socket的区别 #### 答:Socket是一套标准,它完成了对TCP/IP的高度封装,屏蔽网络细节,以方便开发者更好地进行网络编程。Socket其实就是等于IP地址 + 端口 + 协议。 * WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决http不支持持久化连接的问题。 * Socket一个是网编编程的标准接口,而WebSocket则是应用层通信协议。 #### 6、说说TCP 和 UDP 区别? #### * TCP 基于连接,UDP 基于无连接。 * TCP 要求系统资源较多,UDP 较少。 * UDP 程序结构较简单。 * TCP 保证数据正确性,UDP 可能丢包。 * TCP 保证数据顺序,UDP 不保证。 #### 7、说说对称加密和非对称加密的区别和原理吗? #### 答:对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即 如何安全地将密钥发给对方 ; 而非对称加密是指使用一对非对称密钥,即 公钥 和 私钥 ,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。 由于非对称加密的方式不需要发送用来解密的私钥,所以可以 保证安全性 ;但是和对称加密比起来,它比较 慢 ,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。 #### 8、什么是路由选择协议?举例说明一种常用的路由选择协议。 #### 答:路由选择协议是一种用于动态确定路由器之间最佳路径的协议。例如,OSPF(开放最短路径优先)是一种常用的内部网关协议(IGP)。 #### 9、客户端和服务器之间最多能建立多少个连接? #### 答:65535 。 服务器的 ip ,端口号 ,客户端的 ip 都是确定的。能变的只有客户端的端口号。加网卡 ,保证四元组唯一,理论上能是客户端和服务器之间建立10 万以上的连接。 #### 10、Http常见的状态码有哪些? #### <table> <thead> <tr> <th>编码</th> <th>类别</th> <th>原因</th> </tr> </thead> <tbody> <tr> <td>1XX</td> <td>Informational(信息性状态码)</td> <td>接受的请求正在处理</td> </tr> <tr> <td>2XX</td> <td>Success(成功状态码))</td> <td>请求正常处理完毕</td> </tr> <tr> <td>3XX</td> <td>Redirection(重定向状态码)</td> <td>需要进行附加操作以完成请求</td> </tr> <tr> <td>4XX</td> <td>Client Error(客户端错误状态码)</td> <td>服务器无法处理请求</td> </tr> <tr> <td>5XX</td> <td>Server Error(服务器错误状态码)</td> <td>服务器处理请求出错</td> </tr> </tbody> </table> * 200 OK:表示从客户端发送给服务器的请求被正常处理并返回成功。 * 301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL。 * 302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL。 * 400 Bad Request:表示请求报文存在语法错误。 * 403 Forbidden:服务器拒绝该次访问(访问权限问题)。 * 404 Not Found:表示服务器上无法找到请求的资源(也可以在服务器拒绝请求但不想给拒绝原因时使用)。 * 500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时。 * 503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求。 #### 11、什么是ARP(地址解析协议)?它的作用是什么? #### 答:ARP是一种用于将IP地址解析为物理MAC地址的协议。它的作用是在局域网中建立IP地址和MAC地址的对应关系。 #### 12、说一说你对 DNS 的理解? #### 答:DNS (Domain Name System)是互联网中的重要基础设施,负责对域名的解析工作,为了保证高可用、高并发和分布式,它设计成了树状的层次结构。 * 由根DNS服务器、顶级域 DNS 服务器和权威 DNS 服务器组成。 * 解析顺序是首先从浏览器缓存、操作系统缓存以及本地 DNS 缓存 (/etc/hosts)逐级查找,然后从本地 DNS 服务器、根 DNS、顶级 DNS 以及权威 DNS层层递归查询。 * 可以基于域名在内网、外网进行负载均衡。 * 传统的 DNS 有很多问题(解析慢、更新不及时),HTTPDNS通过客户端 SDK 和服务端配合,直接通过 HTTP 调用解析 DNS 的方式,可以绕过传统 DNS 这些缺点,实现智能调度。 #### 13、说说cookies和session的区别 #### * cookies数据保存至客户端,session数据保存在服务端; * cookies可以减轻服务器压力,但是不安全,容易进行cookies欺骗; * session安全点,但是会占用服务器资源 #### 14、解释一下IP协议和ICMP协议的作用。 #### 答:IP协议是一种网络层协议,负责将数据包从源主机传输到目标主机。ICMP协议是基于IP协议的一种协议,用于发送错误报告和网络状态信息。 #### 15、HTTP 的请求方法的方法有哪些? #### * GET 获取资源 (幂等) * POST 新增资源 * HEAD 获取 HEAD 元数据 (幂等) * PUT 更新资源 (带条件时幂等) * DELETE 删除资源 (幂等) * CONNECT 建立 Tunnel 隧道 * OPTIONS 获取服务器支持访问资源的方法 (幂等) * TRACE 会显服务器收到的请求,可以定位问题。(有安全风险) #### 16、讲讲GET和POST的区别? #### * POST请求更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,GET请求的是静态资源,则会缓存,如果是数据,则不会缓存) * POST请求发送的数据更大(GET请求有url长度限制,http协议本身不限制,请求长度限制是由浏览器和web服务器决定和设置) * POST请求能发送更多的数据类型(GET请求只能发送ASCII字符) * 传参方式不同:GET请求参数通过url传递,POST请求放在request body中传递 * GET请求的是静态资源,则会缓存,如果是数据,则不会缓存 * GET请求产生一个TCP数据包;POST请求产生两个TCP数据包(GET请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据;POST请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据) #### 17、什么是Http协议无状态协议?怎么解决Http协议无状态协议 #### 答:无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息。状态协议解决方法:通过cookie或者session会话保存。 #### 18、讲讲TCP的粘包和拆包? #### 答:TCP是面向流,没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。 为什么会产生粘包和拆包呢? * 要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包; * 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包; * 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包; * 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。即TCP报文长度-TCP头部长度>MSS。 解决方案: * 发送端将每个数据包封装为固定长度 * 在数据尾部增加特殊字符进行分割 * 将数据分为两部分,一部分是头部,一部分是内容体;其中头部结构大小固定,且有一个字段声明内容体的大小。 #### 19、什么是DoS、DDoS、DRDoS攻击? #### * DOS: (Denial of Service),指的是拒绝服务,一切能引起DOS行为的攻击都被称为DOS攻击。最常见的DoS攻击就有计算机网络宽带攻击、连通性攻击。 * DDoS: (Distributed Denial of Service),指的是分布式拒绝服务。是指处于不同位置的多个攻击者同时向一个或几个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。常见的DDos有SYN Flood、Ping of Death、ACK Flood、UDP Flood等。 * DRDoS: (Distributed Reflection Denial of Service),指的是分布式反射拒绝服务,该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,从而形成拒绝服务攻击。 #### 20、什么是CSRF攻击,如何避免 #### 答:CSRF,跨站请求伪造(英文全称是Cross-site request forgery),是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 怎么解决CSRF攻击呢? * 检查Referer字段。 * 添加校验token。 #### 21、什么是XSS攻击? #### XSS,跨站脚本攻击(Cross-Site Scripting)。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS攻击一般分三种类型:存储型 、反射型 、DOM型XSS 如何解决XSS攻击问题? * 对输入进行过滤,过滤标签等,只允许合法值。 * HTML转义 * 对于链接跳转,如<a href=“xxx” 等,要校验内容,禁止以script开头的非法链接。 * 限制输入长度 #### 22、讲讲Tcp三次握手过程? #### 答:所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示: ![在这里插入图片描述][9b922a74a85e4f5e8a426422a0f0faa3.png] * 第一次握手: Client将标志位SYN置为1,随机产生一个值seq=X,并将该数据包发送给Server,Client进入SYN\_SENT状态,等待Server确认。 * 第二次握手: Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=X+1,随机产生一个值seq=Y,并将该数据包发送给Client以确认连接请求,Server进入SYN\_RCVD状态。 * 第三次握手: Client收到确认后,检查ack是否为Y+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=Y+1,并将该数据包发送给Server,Server检查ack是否为Y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。 #### 23、讲讲TCP四次挥手过程? #### 答:四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示: ![在这里插入图片描述][cff09dcacb2a4dd6947fc4e7a603126b.jpeg] 因为 TCP 是全双工,所以每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。 * 第一次挥手: Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN\_WAIT状态。 * 第二次挥手: Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE\_WAIT状态。 * 第三次挥手: Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST\_ACK状态。 * 第四次挥手: Client收到FIN后,Client进入TIME\_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 [87184e3fbb29433ab92b30f3b65fca2a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/62fc41891ec8457bb1e8c882ecbffe2c.png [9b922a74a85e4f5e8a426422a0f0faa3.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/80914052b5bc482a96681be5db0635c1.png [cff09dcacb2a4dd6947fc4e7a603126b.jpeg]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/92025f4abd83457d8a927fe6ae0612aa.jpeg
还没有评论,来说两句吧...