计算机网络常问面试题

发布于:2024-04-20 ⋅ 阅读:(17) ⋅ 点赞:(0)

一.HTTPS是如何保证安全传输的

https通过使⽤对称加密、⾮对称加密、数字证书等⽅式来保证数据的安全传输。

  1. 客户端向服务端发送数据之前,需要先建⽴TCP连接,所以需要先建⽴TCP连接,建⽴完TCP连接后,服务端会先给客户端发送公钥,客户端拿到公钥后就可以⽤来加密数据了,服务端到时候接收到数据就可以⽤私钥解密数据,这种就是通过⾮对称加密来传输数据
  2. 不过⾮对称加密⽐对称加密要慢,所以不能直接使⽤⾮对称加密来传输请求数据,所以可以通过⾮对称加密的⽅式来传输对称加密的秘钥,之后就可以使⽤对称加密来传输请求数据了
  3. 但是仅仅通过⾮对称加密+对称加密还不⾜以能保证数据传输的绝对安全,因为服务端向客户端发送公钥时,可能会被截取
  4. 所以为了安全的传输公钥,需要⽤到数字证书,数字证书是具有公信⼒、⼤家都认可的,服务端向客户端发送公钥时,可以把公钥和服务端相关信息通过Hash算法⽣成消息摘要,再通过数字证书提供的私钥对消息摘要进⾏加密⽣成数字签名,在把没进⾏Hash算法之前的信息和数字签名⼀起形成数字证书,最后把数字证书发送给客户端,客户端收到数字证书后,就会通过数字证书提供的公钥来解密数字证书,从⽽得到⾮对称加密要⽤到的公钥
  5. 在这个过程中,就算有中间⼈拦截到服务端发出来的数字证书,虽然它可以解密得到⾮对称加密要使⽤的公钥,但是中间⼈是办法伪造数字证书发给客户端的,因为客户端上内嵌的数字证书是全球具有公信⼒的,某个⽹站如果要⽀持https,都是需要申请数字证书的私钥的,中间⼈如果要⽣成能被客户端解析的数字证书,也是要申请私钥的,所以是⽐较安全了。
    客户但与服务端建立https连接的具体过程如下图所示:
    需要注意的是服务端发送给客户端服务器证书,就相当于发送给客户端服务器的公钥,客户端可以用公钥再加密自己生成的会话密钥和非对称公钥发送给服务端。
    在这里插入图片描述

二、HTTP与HTTP的区别

HTTP代表“超文本传输”协议,它是一种用于在网络上传输网页、图片和其他资源的协议。当你在浏览器中输入一个网址或者点击一个链接时,你的计算机会向服务器发送一个HTTP请求,然后服务器会回复一个HTTP响应,将网页内容发送给你的浏览器,然后浏览器会把这些内容呈现出来。
然而虽然HTTP在传输数据时非常快捷,但它的安全性相对较低。这就是为什么有了HTTPS协议,它代表“超文本安全传输协议”。它是通过使⽤对称加密、⾮对称加密、数字证书等⽅式来保证数据的安全传输。
因此,总结一下:
● HTTP是一种用于在网络上传输数据的协议,但不够安全。
● HTTPS在HTTP的基础上加入了安全性,通过加密数据来保护你的隐私和安全。
● HTTPS需要SSL证书来验证网站身份,确保你正在与正确的网站通信。

综上所述,HTTPS是一种更加安全的协议,适用于涉及敏感信息和隐私保护的网站和在线交流。

三、当你在浏览器输入网址并点击,之后会使用到哪些网络协议

在浏览器中输入网址并点击后,涉及到的计算机网络协议主要包括以下几个:

DNS(Domain Name System):您输入的网址首先会被解析成相应的IP地址。DNS协议负责将域名解析为IP地址,使您的计算机能够找到正确的服务器。

HTTP(Hypertext Transfer Protocol)/HTTPS(HTTP Secure):一旦浏览器获得了服务器的IP地址,它会向该IP地址发送HTTP或HTTPS请求。HTTP是一种用于在网络上传输超文本数据的应用层协议,而HTTPS是HTTP的安全版本,通过加密通信内容来确保安全传输。

TCP(Transmission Control Protocol):HTTP/HTTPS协议是建立在TCP之上的。TCP协议负责在客户端和服务器之间建立可靠的连接,并确保数据的可靠传输。它提供了流量控制、拥塞控制等功能。

IP(Internet Protocol):IP协议负责在网络上寻址和路由,将数据包从源主机传输到目标主机。它定义了数据包的格式和传输规则。

TLS/SSL(Transport Layer Security/Secure Sockets Layer):如果您访问的是HTTPS网站,那么在HTTP之上会使用TLS/SSL协议进行加密通信,确保数据的机密性和完整性。

这些协议共同组成了互联网通信的基础,使您能够通过浏览器访问网站并获取所需的信息。在请求和响应过程中,还会涉及到其他一些协议和技术,如ARP(Address Resolution Protocol)用于解析IP地址到MAC地址、HTTP/2、WebSocket等。

思考:有了ip地址为什么还需要MAC地址?
这是因为ip地址是在网络层使用的,用于实现网络间的通信和路由,而MAC地址是在数据链路层使用的,用于实现局域网内部的寻址和数据传输。

四、TCP三次握手为什么是三次,不是两次?

第三次握手的目的一是为了能够确认连接双方的状态,建立稳定可靠的连接;二是为了避免失效消息到达后长期占用服务器资源造成资源浪费。
在这里插入图片描述第一次握手:客户端向服务端发送请求报文段SYN=1,包含一个序列号seq=x,进入SYN_SENT状态
第二次握手:服务端再接收到客户端的请求报文后,会初始化自己的序列号,然后向客户端发送一个确认应答报文
SYN=1,ACK=1,seq=y,确认序号ack=x+1,同时进入SYN_RCVD状态
第三次握手:客户端接收来自服务端的确认报文,返回对该报文的确认ACK=1,seq=x+1,ack=y+1,进入ESTABLISHED状态
补充:SYN、ACK、FIN都是标志位,SYN表示建立一个连接,ACK表示确认接收到数据,FIN表示终结一个连接

五、TCP为什么需要四次挥手,而不是三次?

在这里插入图片描述

  • TCP协议是全双工通信,这意味着客户端和服务器端都可以向彼此发送数据,所以关闭连接是双方都需要确认的共同行为。
  • 服务端通常需要等待完成数据的发送和处理, 所以服务端的ACK和FIN⼀般都会分开发送,从而比三次握手导致多了⼀次。
    四次握手具体过程:
    1.客户端认为数据发送完毕,向服务器端发送连接释放请求报文FIN。
    2.服务器端收到连接释放请求后,向客户端发送ACK确认应答报文,进入CLOSE-WT状态。此时客户端到服务器端的连接被释放,不再接收客户端的数据。由于TCP是双工的,所以服务器端还能像客户端发送数据。
    3.服务器端处理和发送完数据后,向客户端发送连接释放请求FIN,进入LAST-ACK状态。
    4.客户端接收到连接释放请求后,返回确认应答报文ACK,进入TIME-WT状态,等待2倍的MSL,期间没有收到服务器端的数据报文,进入CLOSED状态,服务器端接收到确认应答后,也进入CLOSED状态。

之所以等待2MSL的时间,是因为2MSL是TCP报文的生存时间。不等待2MSL时间,若连接关闭后,立马建立新连接,就可能收到之前迟到的报文段,误以为是发给自己的。