Java面试——网络篇

DNS

域名解析的过程

在浏览器输入某个网址对应的解析过程:

  1. 浏览器首先会搜索自身的DNS缓存是否有对应记录且没有过期,如果有且没有过期则解析到此为止。
  2. 否则,浏览器会尝试读取HOST文件,看看是否有该域名对应的IP地址,如果有则解析成功。
  3. 否则,浏览器会发起一个DNS的系统调用。向本地配置的首选DNS服务器(本地域名服务器)发起域名解析请求。本地域名服务器会首先查找自身缓存,找到对应条目且没有过期的则解析成功。
  4. 否则会通过递归或者迭代两种方式解析。

迭代:
① 本地域名服务器向根域名服务器发送请求
② 返回给本地域名服务器要向哪个顶级域名服务器查找
③ 顶级域名服务器向权限域名服务器发请求。
④返回给本地域名服务器IP地址
⑤ 返回给WIndows系统内核,最后返回给浏览器

递归:
① 本地服务器向根域名服务器发请求
② 根域名服务器向顶级域名服务器发请求
③ 顶级域名服务器返回给根域名服务器
④ 根域名服务器返回给本地域名服务器
⑤ 返回给windows内核,最后返回给浏览器

从输入网址到获取页面的整个过程

  1. 在地址输入网址。浏览器查询DNS,获取域名对应的IP地址:具体包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地HOST文件和向本地DNS服务器进行查询等。对于向本地DNS 服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户端,完成域名解析(此解析具有权威性);如果要查询的域名不包含在本地配置区域资源中,但该服务器已经缓存此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具权威性)。如果本地域名服务器并未缓存该网址映射关系,那么根据其设置发起递归查询或者迭代查询。
  2. 浏览器获得域名对应的IP地址之后就发起三次握手,与目标服务器建立连接。
  3. TCP/IP连接建立起来之后,浏览器向服务器发送HTTP请求
  4. 服务器接收到这个请求之后,就根据请求参数映射到特定的请求处理器进行处理,并将处理结果及相应视图返回给浏览器。
  5. 浏览器解析并渲染视图,若遇到js文件、css文件及图片等静态资源的引用则重复上述步骤并向服务器请求这些资源。
  6. 浏览器根据请求到的资源、数据渲染页面,最终向用户呈现一个 完整的页面。

非对称加密

  1. 非对称加密的工作原理
  • 密钥对的生成:一个用户生成一对密钥,包括公钥和私钥。
  • 公钥加密:公钥可以公开发布,任何人都可以使用公钥对数据进行加密。
  • 私钥解密:只有拥有私钥的用户可以解密用对应公钥加密的数据。
  1. 主要特点
  • 公钥和私钥成对出现:数据用公钥加密后,只能用对应的私钥解密,反之亦然。
  • 安全性高:由于私钥不会公开,只有持有私钥的人才能解密数据,保证了数据的安全性。
  1. 应用
  • 数字签名:用私钥对数据进行签名,接收方用公钥验证签名,确保数据来源的真实性和完整性。
  • 密钥交换:在通信开始时使用非对称加密交换对称加密的密钥,从而在后续通信中使用对称加密传输数据,提高效率。
  • 数据加密:保护敏感信息,确保只有授权方能够访问数据。

数字签名、数字安全证书

数字安全证书是如何保证不被篡改的?
发放数字证书的流程

  1. 公钥基础设施(PKI)
    PKI 是一套用于管理公钥和私钥的系统,包括证书颁发机构(CA,Certificate Authority)、注册机构(RA,Registration Authority)、密钥存储库和密钥管理工具。CA 是可信任的第三方机构,负责签发和管理数字证书。

  2. 数字签名
    数字证书的核心是数字签名,它用于验证证书的完整性和真实性。数字签名的生成和验证过程如下:
    生成证书:

  • 证书持有者生成一对密钥(公钥和私钥)。
  • 证书持有者向CA提交包含其公钥和其他身份信息的证书请求。
  • CA 验证请求者的身份,并将请求者的公钥和身份信息组合成一个证书。

签名证书:

  • CA 使用其私钥对证书内容(包括证书持有方的公钥和身份信息)进行数字签名,生成证书的数字签名。
    证书连同数字签名一起发布给证书持有者。
    验证证书:
  • 任何接收到证书的人都可以使用CA的公钥验证证书的数字签名。
  • 验证过程包括对证书内容进行哈希计算,并使用CA的公钥解密证书的数字签名,将解密结果与计算出的哈希值进行比对。如果两者一致,说明证书未被篡改且来自可信的CA。
  1. 防止篡改的技术措施
  • 哈希函数:数字签名使用哈希函数(如SHA-256)生成证书内容的摘要。哈希函数具有抗碰撞特性,确保即使证书内容发生微小变化,生成的哈希值也会完全不同。
  • 非对称加密:CA 使用其私钥对哈希值进行加密生成数字签名,任何篡改证书内容的尝试都会导致数字签名验证失败。
  • 证书链:在PKI体系中,证书可以形成一个链条,每个证书都由上一级CA签名。根证书由根CA签名并广泛预装在操作系统和浏览器中。验证证书时,可以沿着证书链逐级验证,直到根证书,确保整个链条的可信性。
  • 时间戳和失效机制:证书包含有效期,超过有效期后证书自动失效。此外,CA 可以在证书失效前发布证书吊销列表(CRL,Certificate Revocation List)或使用在线证书状态协议(OCSP,Online Certificate Status Protocol)实时检查证书状态。
  1. 证书管理
    证书吊销:如果证书持有者的私钥被泄露或证书内容需要更新,CA 可以吊销证书,并将其加入CRL或通过OCSP标记为吊销。
    证书更新:定期更新证书和重新签名,确保证书使用的加密技术和算法处于安全状态。

通过以上机制,数字安全证书能够有效地防止篡改,确保通信的安全性和真实性。

面试官:讲一下「数字签名」和「数字证书」
计算机网络常问面试问题 3 —— 对称加密、非对称加密以及数字签名和数字证书

HTTPS通信流程(面试版)

ssl/tl协议

字节面试必备:SSL/TLS协议说明

重定向是什么

TCP 和UDP

tcp怎么保证可靠性的

tcp头部字段有哪些

TCP和UDP有什么区别?

TCP(Transfer Control Protocol)
UDP(User Datagram Protocol)

  1. 连接: TCP是一种面向连接的传输控制层协议,UDP是一种无连接的传输层控制协议。
    :TCP的这个连接不是物理意义上的连接,而是逻辑意义上的连接。即在传输数据前要发起三次握手先建立起逻辑连接,然后在传输数据,在传输结束想要断开连接时要发起四次挥手。TCP提供端到端、全双工通讯。采用字节流方式,如果字节流太长,将其分段。
  2. 在可靠性上: TCP 是可靠传输,不丢包,丢包有重传机制。UDP是不可靠传输,其尽最大努力交付,可能丢包。
  3. 在传输速率上:由于TCP要保证可靠传输,所以速率会比较慢。UDP反之,只尽最大努力交付,丢包了也不管,因此速率较快。
  4. 首部占用空间: TCP 由于要保证可靠传输,加入了确认好、ACK、SYN、FIN 等字段,首部占用空间大(固定20字节)。而UDP 首部占用空间较小(8字节)。
  5. 应用场景: 基于TCP可靠传输的特点,TCP适用于浏览器、文件传输、邮件发送等。HTTP都是使用TCP,因为要求传输内容可靠,不出现丢失的情况。而UDP适用于音视频通话、直播 等对实时性要求比较高的场景。
  6. 系统资源占用上: TCP占用系统资源较多。UDP占用系统资源较少、
  7. TCP是面向字节流的,UDP是面型报文的。面向字节流是指发送数据时以字节为单位,一个数据包可以拆分为若干组进行发送,而UDP一个报文只能一次发完。

TCP就好比是打电话,要先拨打拨号震铃等待对方摘机说“喂”,然后才开始说话。支持点对点通讯。
UDP就好比是广播,不需要连接,发送方不管接收方有没有准备好,直接发送信息。即使对方没有接受到,也不会重发。UDP支持一对一、一对多、多对一、多对多。

详细描述TCP三次握手连接的过程

在这里插入图片描述三次握手的过程:

  1. 客户端向服务端发送连接请求数据包。其中包括客户端初始序列号seq(client) = x,表明传输数据给服务端的第一个数据字节的序号是x。数据包中同步标志位SYN =1,ACK=0,表示这是一个连接请求数据报文。发送报文后,客户端有CLOSED状态进入SYN-SENT状态。
  2. 服务端在接受了客户端的连接请求报文之后,由LISTEN 进入SYN-RCVD状态。并向客户端发送连接确认数据包。其中包括服务器端序列号seq(server)=y,表明传输给客户端的第一个数据字节的序号是y。数据包中还包括标识位SYN=1,ACK=1.表明这是一个TCP响应数据报文,以及对客户端报文初始序列号的确认号,ack(server)=seq(client)+1=x+1,表明下一次希望收到客户端的序号是从x+1开始。
  3. 客户端在接收到服务端的连接确认报文之后,由SYN-SENT状态进入ESTABLISHED状态。并向服务端发送确认数据包。表明客户端接收到了服务端的连接确认。该数据包,ACK=1,seq(client)=x+1,ack(client)=seq(server)+1=y+1。
  4. 服务端在接受到客户端的确认数据包之后,进入ESTABLISHED 状态。连接正式建立,双方可以互发消息了。

为什么要建立三次连接,两次不行吗?

不行。
假设client第一次发起的连接请求因为网络延时,在client释放连接之后才到达server。本来这是一个失效的连接请求,但server在收到此失效请求时,误认为这是client发起的一个新的连接请求。于是向client
发出确认请求报文,同意建立连接。如果采用两次握手,那么只要server发出确认,连接就建立了。而对于client来说,并没有想连接服务端的意愿,因此不会理睬server的确认也不会向server发送数据。但是server 却认为新的连接已经建立,一直等待client发送数据过来。这样server的很多资源就被拜拜浪费了。而采用“三次”握手可以防止 上述现象的发生。例如,server由于收不到确认,就知道client并没没有要求建立连接。

第三次握手失败了 怎么处理

server:此时server处于SYN-RCVD状态,若等不到client的ACK,server会重新发送SYN+ACK包.一般是每个3秒重发之前的SYN+ACK。默认重发5次,如果重发5次SYN+ACK都等不到client的ACK,就会发送RST包,强制关闭连接。

client端,会出现两种情况:

  1. 在server进行超时重发的过程中,如果client向server发送数据,数据头部是ACK为1的,那么服务器收到数据之后会读取ACK number,进入ESTABLISHED状态
  2. 在server进入closed状态之后,如果client向服务器发送数据,服务器会以RST包应答。

如果已经建立连接,但客户端出现故障怎么办?

服务器每收到一次客户端的请求后都会重新复位一个计时器,时间通常是设置为2小时,若两小时还没收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍没有反应,服务器就认为客户端出现了故障,紧接着就关闭连接了

详细描述TCP释放连接的过程

TCP释放连接,是四次挥手的过程:

在这里插入图片描述

  1. client向server发起断开连接请求FIN数据包,该数据包中终止标志位FIN=1,用来关闭客户到服务器的数据传输。序列号seq=u,ack=v。然后由ESTABLISHED状态进入FIN-WAIT-1状态
  2. server接收到client的FIN数据包后,向client发送ACK确认包。ACK=1,序列号seq=v,ack=u+1。然后由ESTABLISHED状态进入CLOSE-WAIT状态。client接收到server的ACK包后由FIN-WAIT-1进入FIN-WAIT-2状态。
  3. server向client发送断开连接请求FIN数据包,该数据包中终止标志位FIN=1,用来关闭服务器到客户端的数据和传输。序列号seq=w,ack=u+1。然后由CLOSE-WAIT进入LAST-ACK状态。
  4. client接收到server的FIN数据包之后,向server发送ACK确认包。ACK=1,序列号seq=u+1,ack=w+1。然后由FIN-WAIT-2进入TIME-WAIT状态,等待2ML时间后关闭连接。
  5. server在接受到client的ACK确认包之后,由LAST-ACK进入CLOSE状态。

为什么不能把服务器发送ACK和FIN合并起来变成三次(CLOSE-WAIT的意义是什么?)

TCP是全双工通讯。client向server发送FIN请求,只能说明client没有数据要发送给server了。可是server可能还有数据要发送给client。因此需要等待server将该发给client的数据都发送完了,没有数据要发送了,才能发送FIN请求。所以最恰当的做法是,先回复ACK,表示server已经收到了client的断开连接请求。

如果第二次挥手时,服务端的ACK没有送达客户端,会怎么样?

客户端没有收到ACK请求,客户端会重新发起第一次挥手的FIN请求。

客户端TIME-WAIT状态的意义是什么?

第四次挥手时,客户端发送而给服务端的ACK可能丢失,TIMW-WAIT状态就是 用来重发可能丢失的ACK的。如果server没有收到ACK,就会重发FIN,如果client在2*MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止server没有收到ACK而不断重发(如果没有TIME-WAIT而是直接进入CLOSED的话,client已经关闭而server还一直发送FIN,造成资源浪费)。MSL是指一个片段在网络中的最大存活时间,2MSL就是一个发送和一个回复所需额最大时间。如果直到2MSL,client都没有再次收到FIN,那么client推断ACK已经被server成功接收,则关闭连接。

HTTP

请求报文包括哪些内容

请求行
请求头
请求体(POST请求才有)

Get请求没有请求体
在这里插入图片描述
POST 请求

在这里插入图片描述

响应报文包括哪些内容?

状态行、响应首部字段、响应体

一次完整的HTTP请求经历那几个 步骤

  1. 三次握手建立TCP连接
  2. web浏览器向服务器发送请求行
    一旦建立TCP连接,web浏览器就会向浏览器发送请求命令。如 GET /hello/ HTTP/1.1
  3. web浏览器发送请求头
    浏览器发送其请求命令之后,还要以头信息形式向Web服务器发送一些别的信息,之后浏览器发送一空白行来通知服务器,它已经结束了该头信息的发送
  4. 服务器响回送状态行
    浏览器向服务器发出请求后,服务器会向客户端回送应答,HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码
  5. 服务器回送响应头
    服务器向用户 发送关于自己的数据的文档
  6. 服务器向浏览器发送数据
    服务器向浏览器发送头信息后,会 发送一个空白行来表示头信息的发送到此为止。诘责以contentType字段所描述的格式发送用户所请求的实际数据。
  7. 关闭TCP连接

Socket和HTTP的区别和应用场景

  1. socket连接是所谓的长连接,理论上客户端和服务器一旦建立连接将不会主动断掉。而HTTP就是所谓的短连接,即客户端向服务器发送一次请求,服务器响应后连接可会断开等待下次连接。
  2. HTTP适用场景:网站、互联网服务。 socket适用场景:网络游戏、直播、在线视频。

https如何保证消息完整

请描述HTTPS和HTTP的区别

HTTPS 就是在HTTP基础上加上加密处理(一般是SSL安全通信线路)+认证+完整性保护。

  1. 端口不一样: HTTP是80端口,HTTPS是443端口。
  2. HTTP是超文本传输协议,信息是明文传输,HTTPS是安全性的SSL加密传输协议
  3. HTTPS需要申请CA 证书,而证书是需要收费。HTTP无需证书,是免费的。
  4. HTTPS和HTTP使用的是完全不同的连接方式,HTTP连接很简单是无状态的;HTTPS协议是SSL+HTTP协议构建的可进行传输加密、身份认证的网络协议,比HTTP协议安全。

HTTPS的缺点:
5. HTTPS的建立连接的过程比较费时,因为还牵扯到证书加密和认证。所以会影响服务的响应速度以及吞吐量。
6. HTTPS也并不是完全安全的,它的证书 体系起始并不是完全安全的(存在 伪造的可能)并且HTTPS在面对 DDOS这样的攻击时,几乎起不到任何作用,反而会增加服务开销。

HTTP版本的对比

HTTP1.版本特性:

  • 早先的1.0HTP版本,是一种无状态,无连接的应用层协议
  • HTTP1.0规定浏览器和服务器保持短暂的连接,浏览器每次请求都需要与服务器建立一次TCP连接,服务器处理完成后立即断开TCP(无连接),服务器不跟踪每个客户过去的请求(无状态)。

HTTP1.1版本特性:

  • 默认持久连接,节省通信量。只要客户端、服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求。但是同一 时间一个连接只能对应一个请求。针对同一个域名,大多数浏览器允许同时最多6个并发请求链接。

HTTP2.0版本特性:

  • 二进制分帧。 HTTP2.0采用二进制格式传输数据,而非HTTP1.0的文本格式。二进制格式在协议的解析和优化上带来更多的优势和可能。
  • 多路复用。客户端和服务器可以将HTTP消息分解为互不依赖的帧,然后交错发送,最后再在一端将他们重新组装起来。
  • 首部压缩。 HTTO2.0使用HPACK压缩 请求头和响应头。可以极大减少头部开销,进而提高性能。
  • 优先级。
  • 服务器推送。 服务器可以对一个客户端请求发送多个响应。 除了最初的响应之外,服务器还可以向客户端推送额外资源而无需客户端额外明确地请求。

常见状态码

3XX重定向

301 Moved Permanently
永久性重定向,该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI

302 Found
临时重定向,该状态码表示请求的资源已经分配了新的URI,希望用户本次使用新的URI访问。和301类似,但是该状态码表示资源不是永久性被移动,只是短暂的

303 See other
该状态码表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源

304 Not Modified
该状态码表示客户端发送附带条件的请求时,服务端允许访问资源,但未满足条件的情况。虽然被划分在3XX中,但是和重定向没有任何关系。

4XX客户端错误

400 Bad Request
该状态码表示请求报文中存在语法错误,需要修改请求的内容后再次发送请求

401 Unauthorized
该状态码表示发送的请求需要HTTP认证信息或者用户认证失败

403 Forbidden
该状态码表示请求资源的访问被服务器拒绝了

404 Not Found
该状态码表示服务器上无法找到请求的资源

405 Method Not Allowed
该状态码表示请求的方法不被允许

5XX服务器错误

500 Internal Server Error
该状态码表示服务器在执行请求时发生了错误,也可能是web应用存在BUG和某些临时的故障

503 Service Unavailable
该状态码表示服务器暂时处于超负荷或正在停机维护,现在无法处理请求。

转发与重定向

请求转发

转发是在服务器内部完成的操作,服务器接收到客户端的请求后,将请求处理权交给另一个资源(如Servlet、JSP或HTML页面)来处理。转发后的URL不会改变,客户端不会察觉到请求被转发。

servlet中实现步骤

  1. 通过request对象获取请求转发器对象 —— getRequestDispatcher(String path)
  2. 使用RequestDispatcher对象进行转发 —— forward(ServletRequest request , ServletResponse response)
RequestDispatcher dispatcher = request.getRequestDispatcher("destination.jsp");
dispatcher.forward(request, response);

特点:

  1. 浏览器地址栏路径没有不发生变化
  2. 只能转发到当前服务器内部资源
  3. 转发是一次请求

重定向

重定向是服务器向客户端发送一个新的URL请求,客户端浏览器接收到这个响应后,会自动发起新的请求到新的URL。
重定向后URL会改变,客户端可以看到新的URL。
设置重定向的方式

  1. 方式一:
  • 设置状态码为302
  • 设置响应头
  1. 方式二
  • 使用sendRedirect(String s 跳转资源路径)方法
response.sendRedirect("newPage.jsp");

特点:
1.地址栏发生变化
2.重定向可以访问其他战点(服务器)的资源
3.重定向是两次请求

面试题:forward与redirect的区别(转发与重定向的区别):
1.转发是一次请求,而重定义是两次请求
2.转发时地址栏不会发生变化,而重定向地址栏会发生变化
3.转发只能访问该服务器内部资源,而重定向可以访问其他服务器的资源

主流的权限校验框架

暂时就写这么多了,后面再一边刷题一边总结吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
华为Java面试题集第一部分:基础知识 基础知识: 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。 2. Java的接口和C++的虚类的相同和不同处。 由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。 3. 垃圾回收的优点和原理。并考虑2种回收机制。 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值