前言 如今计算机网络基本可以说是中、大厂面试必问的内容 但是现在好多文章的答案并不够全面深刻,有的则过于详细,不利于面试 以下是借鉴资料和他人文章,总结常见计算机网络面试题,希望为大家带来帮助1、计算机网络分层体系结构(五层举例) 应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。 传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。 网络层:选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。2、三次握手 3、四次挥手 4、为什么不是两次握手 5、四次挥手中为什么等待2MSL 6、HTTP和HTTPS区别http协议是免费使用的,而https协议需要到CA机构申请证书,需要缴纳费用http是超文本传输协议,信息是明文传输,https则是具有安全性的ssltls加密传输协议,信息是密文http的连接很简单,是无状态的;https协议是由SSLTLSHTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全和http通信相比,https通信会由于加减密处理消耗更多的CPU和内存资源http和https使用的端口也不一样,前者是80,后者是4437、对称加密与非对称加密 对称加密: 对称加密是指加密和解密使用同一个密钥的方式,一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。 非对称加密: 使用一对非对称密钥加密,即公钥和私钥,公钥可以随意发布,任何人都能获得,但私钥只有自己知道 发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以叫作非对称加密8、什么是数字证书 9、HTTPS工作流程 HTTPS协议是安全的,因为HTTPS协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但是HTTPS在内容传输使用的是对称加密,在证书验证阶段使用非对称加密 所以HTTPS加密方式是:对称加密非对称加密混合 证书验证阶段: 1)浏览器发起HTTPS请求; 2)服务端返回HTTPS证书; 3)客户端验证证书是否合法,如果不合法则提示告警。 数据传输阶段: 1)当证书验证合法后,在本地生成随机数; 2)通过公钥加密随机数,并把加密后的随机数传输到服务端; 3)服务端通过私钥对随机数进行解密; 4)服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输。10、HTTP常见状态码 200OK:表示从客户端发送给服务器的请求被正常处理并返回成功301MovedPermanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;302Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;400BadRequest:表示请求报文存在语法错误;403Forbidden:服务器拒绝该次访问(访问权限问题)404NotFound:表示服务器上无法找到请求的资源(也可以在服务器拒绝请求但不想给拒绝原因时使用)500InterServerError:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;503ServerUnavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求; 相关视频推荐 《tcpip详解卷一》:150行代码拉开协议栈实现的篇章 为什么不推荐做mcu与qt开发,clinux后台服务器开发很香吗? 学习地址:CCLinux服务器开发后台架构师【零声教育】学习视频教程腾讯课堂 需要CCLinux服务器架构师学习资料加群812855908获取(资料包括CC,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCPIP,协程,DPDK,ffmpeg等),免费分享 11、HTTP长连接和短连接,流水线是什么 长连接和短连接: HTTP1。0默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。 HTTP1。1起默认使用长连接。要使用长连接,客户端和服务器的HTTP响应头部的Connection要设置为keepalive,才能支持长连接。 HTTP长连接,指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立和断开的消耗。 流水线: 默认情况下,HTTP请求是按顺序发的,下一个请求只有在当前请求收到响应之后才会被发出,有点像停止等待协议。而在收到下一个请求之前,可能需要很长时间。流水线就是在一个HTTP长连接下连续发出请求,不用等待响应返回,减少延迟。12、GET和POST区别和应用 GET产生的URL地址可以在书签收藏,而POST不可以。 GET请求会被浏览器主动缓存,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的(通常URL不大于2048个字符),而POST没有。 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。 GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 GET参数通过URL拼接传递,POST参数通过请求体传递 GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把请求头和请求体一并发送出去;而对于POST,浏览器先发送请求头,服务器响应100continue,浏览器再发送请求体。13、TCP和UDP区别和应用 TCP是可靠传输,UDP是不可靠传输; TCP面向连接,UDP无连接,即发送数据之前不需要建立连接 TCP传输数据有序,UDP不保证数据的有序性; TCP面向字节流,把数据看成一连串字节流,UDP是面向报文的 TCP传输速度相对UDP较慢; TCP有流量控制和拥塞控制,UDP没有; TCP是重量级协议,UDP是轻量级协议; TCP首部20字节,UDP首部8字节; TCP连接只能是一对一的(端到端);UDP支持一对一、一对多、多对一和多对多的通信方式。14、浏览器输入URL到页面返回详细过程 输入网址输入要访问的网址,即URL 缓存解析浏览器获取URL后,先去缓存中查找资源,从浏览器缓存系统缓存路由器缓存中查看;如果有就从缓存中显示界面,不再发送请求;如果没有,则发送http请求; 域名解析发现缓存中没有资源,发送http请求;在发送http请求之前,需要进行DNS解析(域名解析);DNS解析:域名到IP地址的转换过程,域名的解析工作由DNS服务器完成,解析后可以获取域名相应的IP地址; tcp连接三次握手在域名解析后,浏览器向服务器发起了http请求,tcp连接;因为tcp协议时面向连接的,所以在传输数据前必须建立连接,即三次握手;tcp连接建立后,浏览器开始向服务器发送http请求报文 收到请求服务器收到浏览器发送的请求信息,返回响应 页面渲染浏览器收到服务器发送的响应,显示页面内容。15、什么是Cookie和Session,二者区别 区别: 16、什么是ARP协议 17、什么是XSS攻击 XSS攻击原理是攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。 例如: XSS攻击类似于SQL注入攻击,SQL注入攻击中以SQL语句作为用户输入,从而达到查询修改删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。18、DNS解析过程 浏览器搜索自己浏览器的DNS缓存 若没有,则搜索本地操作系统中的DNS缓存和hosts文件 若没有,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则依次向根域名服务器、顶级域名服务器、权限域名服务器发起查询请求,最终返回IP地址给本地域名服务器 本地域名服务器将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来 操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来 浏览器得到域名对应的IP地址19、谈谈IP地址和MAC地址 20、TCP流量控制(滑动窗口机制) 21、TCP拥塞控制 拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。 拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。 为了进行拥塞控制,TCP发送方要维持一个拥塞窗口(cwnd)的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。TCP的拥塞控制采用了四种算法,即:慢开始、拥塞避免、快重传和快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如:主动队列管理AQM),以减少网络拥塞的发生。 慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。 拥塞避免:拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的cwnd加1。 快重传与快恢复:在TCPIP中,快速重传和快恢复(FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。 没有FRR,如果数据包丢失了,TCP将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和快恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。22、TCP如何保证可靠传输 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据; 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层; 丢弃重复数据:对于重复数据,能够丢弃重复数据; 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒; 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段; 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。23、HTTP请求转发和重定向的区别 24、什么是DHCP协议 DHCP(动态主机配置协议)是一个局域网的网络协议。 指的是由服务器控制一段IP地址范围,给用户提供了即插即用的联网方式,用户不需要再手动配置IP地址等信息 该协议自动为用户分配TCPIP参数信息,如:IP地址,子网掩码,网关等信息。25、什么是SQL注入 SQL注入就是将原本的SQL语句的逻辑结构改变,使得SQL语句的执行结果和原本开发者的意图不一样; 比如说我们通过账号密码进行登录,首先需要进行查询判断: selectfromtuserwherename张三andpassword123456 如果我们把or11作为拼接在密码末尾传入进来,执行查询的时候sql会变成 selectfromtuserwherename张三andpassword123456or11 密码永远都是成立的,所以,前面无论密码正确与否都会成功登录 我们使用预编译语句就可以避免这个问题,例如:JDBC中的PrepareStatement或MyBatis中{} 将sql预编译,传参数的时候,不会改变sql语句结构,就可以避免注入。26、URL和URI区别 URL,统一资源定位符,URL其实就是我们平时上网时输入的网址,它标识一个互联网资源,并指定对其进行操作或获取该资源的方法。例如https:leetcodecn。comproblemsetall这个URL,标识一个特定资源并表示该资源的某种形式是可以通过HTTP协议从相应位置获得。 URI,统一资源标识符,URL是URI的一个子集,两者都定义了资源是什么,而URL还定义了如何能访问到该资源。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。简单地说,只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL。 通俗理解:URI表示的是一个抽象的地址,URL表示的是一个详细的地址。抽象的地址:辽宁省大连市(这是一个抽象的地址,相当于URI)详细的地址:辽宁省大连市高新园区软件园B2(这是一个详细的地址,相当于URL)为什么URL是URI的子集,高新园区软件园B2(URL)属于辽宁省大连市(URI)那么https:www。csdn。net是一个URI(URI只指明了服务器的地址,没有具体到文件是什么类型)那么https:www。csdn。netimagelogo。gif就是一个URL(他具体到了logo文件的位置并且logo文件是gif类型的)27、粘包与拆包 产生原因:要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包;要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。即TCP报文长度TCP头部长度MSS。 解决策略:消息定长。发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。设置消息边界。服务端从网络流中按消息边界分离出消息内容。在包尾增加回车换行符进行分割,例如FTP协议。将消息分为消息头和消息体,消息头中包含表示消息总长度(或者消息体长度)的字段。更复杂的应用层协议。28、什么是阻塞和非阻塞,同步和异步 阻塞和非阻塞:调用者在事件没有发生的时候,一直等待事件发生,不能处理其他任务是阻塞。调用者在事件没有发生的时候,可以去处理别的事务这是非阻塞。 同步和异步:调用者循环查看事件有没有发生,这种情况是同步。调用者不用自己去查看事件有没有发生,而是等待注册在时间上的回调函数自己通知自己,这是异步。29、HTTP版本区别(1。0,1。1,2。0) HTTP1。0:HTTP1。0仅提供了最基本的认证,用户名和密码都未加密(明文) HTTP1。0仅支持短连接,每次发送数据都会经过TCP三次握手和四次挥手,效率低 HTTP1。0只使用了header的ifmodifiedSince和Expires作为缓存失效的标准 HTTP1。0不支持端点续传,每次发送数据都会发送全部数据 HTTP1。0认为每台计算机都只能绑定一个IP地址,不支持虚拟网络 HTTP1。1:HTTP1。1使用了摘要算法进行身份验证 HTTP1。1默认使用长连接:只需要建立一次连接,可以传输多次数据,传输完成之后,只需要一次切断即可。通过请求头的Connection:keepalive设置 HTTP1。1支持端点续传:通过请求头的Range实现 HTTP1。1使用了虚拟网络:在一台物理服务器上可以存在多个虚拟主机,共享一个IP地址 HTTP2。0:HTTP2。0支持头部压缩:利用HPACK算法进行压缩,由于HTTP1。1头部经常出现Cookie、Accept、Sever、Range等字段可能会占用几百到几千字节,而body有时只有几十字节(头重身轻) HTTP2。0使用二进制格式:HTTP2。0选择了更靠近TCPIP的二进制格式,抛弃了ASCII码,提高了解析效率 HTTP2。0强化安全:HTTP2。0一般都跑在HTTPS上 HTTP2。0多路复用:一个连接上可以有多个请求30、IP地址的分类