面试题-网络协议
简述 TCP 三次握手以及四次挥手的流程。为什么需要三次握手以及四次挥手?
TCP 三次握手流程
- 第一次握手:
- 客户端发送一个SYN(同步序列编号)报文到服务器,请求建立连接。客户端进入SYN_SEND状态。
- 服务器收到这个报文后,会回复一个SYN-ACK(同步确认)报文,确认收到了客户端的初始序列号,并且发送自己的初始序列号。服务器进入SYN_RCVD状态。
- 第二次握手:
- 客户端接收到服务器的SYN-ACK报文后,会再次发送一个ACK(确认)报文,确认它已经收到了服务器的数据。客户端进入ESTABLISHED状态,即连接建立成功。
- 第三次握手:
- 服务器接收到客户端的ACK报文后,同样进入ESTABLISHED状态,表示连接已经建立。
TCP 四次挥手流程
- 第一次挥手:
- 一方(通常是客户端)首先发送一个FIN(结束)报文,表明它完成了数据传输,可以关闭连接。发送方进入FIN_WAIT_1状态。
- 第二次挥手:
- 收到FIN报文的一方(通常是服务器)回复一个ACK报文,确认收到了对方的结束信号。发送方进入FIN_WAIT_2状态。
- 第三次挥手:
- 发送完ACK报文的一方(通常是服务器)发送一个FIN报文,表明它也完成了数据传输,可以关闭连接。发送方进入LAST_ACK状态。
- 第四次挥手:
- 收到FIN报文的一方(通常是客户端)回复一个ACK报文,确认收到了对方的结束信号。发送方进入TIME_WAIT状态,等待足够的时间以确保对方收到了自己的ACK报文。
为什么需要三次握手和四次挥手?
三次握手的原因:
- 防止旧的重复连接请求:三次握手可以防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。
- 确认双方的发送能力和接收能力:通过三次握手,双方可以相互确认对方的发送能力和接收能力,从而确保连接的可靠性。
- 同步序列号和确认号:三次握手过程中,双方交换了各自的初始序列号和确认号,这对于后续数据传输的顺序性和确认机制至关重要。
四次挥手的原因:
- 确保双方都能正常关闭连接:四次挥手确保了无论哪一方首先提出关闭连接,另一方都能得到通知并进行相应的处理。
- 防止半关闭状态:在TCP中,如果只进行两次挥手,可能会导致一种“半关闭”状态,即某一方已经关闭连接,但另一方仍然可以发送数据。四次挥手可以彻底关闭连接,避免这种情况。
综上所述,TCP三次握手和四次挥手的设计是为了确保连接的可靠性、安全性和效率,防止资源浪费和连接混乱问题。
从输入URL到展现页面的全过程涉及多个步骤和技术环节。以下是详细的解析:
用户在浏览器地址栏中输入一个网址(URL),并按下回车键或点击“进入”按钮。
浏览器首先需要将域名转换为IP地址,这一过程称为DNS解析。DNS解析会查找域名对应的IP地址,以便建立连接。
一旦获得了目标服务器的IP地址,浏览器会与服务器建立一个TCP连接。这一步骤包括三次握手过程,确保双方都准备好进行数据传输。
浏览器通过已建立的TCP连接向服务器发送HTTP请求,请求访问特定的网页资源。
服务器接收到请求后,根据请求内容进行相应的处理,如查询数据库、执行业务逻辑等,最终生成HTML文档及其他资源文件(如CSS、JavaScript、图片等)。
服务器处理完请求后,将生成的HTML文本内容以及其他资源文件通过网络传输回浏览器。
浏览器接收到服务器返回的数据后,开始解析HTML文档,将其构建成DOM树(Document Object Model)。这一步骤涉及到解析标签、属性和文本内容等。
浏览器根据DOM树计算CSS属性,并构建渲染树(rendering tree)。然后,浏览器进行布局计算、绘制和展示,最终呈现完整的页面给用户。
页面内容加载完成后,用户可以看到完整的网页。如果页面中还包含JavaScript脚本或其他外部资源,浏览器会继续加载这些资源直至所有资源都加载完成。
整个过程需要浏览器进程、网络进程和渲染进程之间的协作完成。浏览器进程负责用户交互和子进程管理,网络进程负责发起HTTP请求和处理响应数据,而渲染进程则负责解析HTML、构建DOM树、计算CSS属性并最终渲染页面。
通过以上步骤,从输入URL到展现页面的全过程被详细阐述了出来。这个过程不仅涉及到网络协议和DNS解析,还包括了浏览器的渲染技术和页面加载优化策略。
DNS 查询服务器的基本流程是什么?DNS 劫持是什么?
DNS查询服务器的基本流程如下:
- 本地缓存查询:当用户在浏览器中输入一个域名时,浏览器会首先查询本地缓存,看是否存在该域名的解析结果。如果存在,则直接返回结果。
- 递归查询:如果本地缓存中没有该域名的解析结果,浏览器会将请求发送到本地DNS服务器。该DNS服务器会进行递归查询,即从根域名服务器开始,逐步向下一级域名服务器查询,最终找到目标域名所在的IP地址,并将解析结果返回给用户设备。
- 迭代查询:另一种查询方式是迭代查询,服务器只需指引请求者如何获取答案,而不需要自己完成整个查询过程。
- 权威域名服务器查询:在递归查询过程中,DNS客户端会接触到多个DNS服务器,包括根域名服务器、顶级域名服务器和权威域名服务器。权威域名服务器负责提供最终的IP地址解析结果,并将其保存在其缓存中,以便未来快速访问。
- 返回结果:最终,DNS客户端会收到权威域名服务器的解析结果,并将此结果返回给用户设备,从而完成整个DNS解析过程。
DNS劫持(DNS Hijacking)是一种常见的网络攻击方式,其基本原理和步骤如下:
- 攻击手段:攻击者通过某些手段取得某域名的解析控制权,篡改该域名的解析结果,使得对该域名的访问由原IP地址转入到修改后的指定IP地址。
- 劫持过程:攻击者可以通过以下几种方式实现DNS劫持:
- 伪造DNS响应:攻击者伪造DNS响应,将用户重定向到恶意网站。
- 篡改DNS设置:攻击者覆盖计算机的TCP/IP设置,将个人查询重定向到域名服务器DNS。
- 利用缺陷:攻击者利用DNS协议的缺陷,对用户的DNS进行篡改,将域名由正常IP指向攻击者控制的IP。
- 目的:通过DNS劫持,攻击者可以窃取用户信息、实施钓鱼攻击或破坏用户访问特定网站的能力。
综上所述,DNS查询服务器的基本流程包括本地缓存查询、递归查询和迭代查询等步骤。而DNS劫持则是通过各种手段篡改DNS解析结果,导致用户访问被劫持的网站,从而达到攻击者的恶意目的。
TCP 怎么保证可靠传输
TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,广泛应用于互联网和局域网中,以确保数据在网络中的可靠传输。TCP通过多种机制来保证数据的完整性、顺序性和可靠性传输。以下是TCP保证可靠传输的主要机制:
校验和用于检测数据包在传输过程中是否发生了错误。如果接收方发现校验和不匹配,则可以判断数据包在传输过程中被损坏或篡改。
TCP使用序列号来对每个数据包进行编号,并要求接收方在确认应答中返回这些序列号。只有当接收方成功接收到一个数据包时,它才会发送一个确认应答。这种机制确保了数据包按顺序到达。
重传机制:
- 超时重传:如果发送方在一定时间内没有收到确认应答,它会重新发送该数据包。
- 快速重传:当接收方连续收到三个重复的数据包时,它会立即发送一个重传请求(RST),告知发送方重传这些数据包。
- SACK( selective acknowledgment):在快速重传的基础上,接收方可以返回最近收到的报文段的序列号范围,告诉发送方哪些数据包已经成功接收,从而避免重传已成功接收的数据包。
滑动窗口控制用于动态调整发送方和接收方的缓冲区大小,以优化网络带宽的利用率。发送方根据接收方的反馈调整其发送速率,避免因发送速率过快导致接收方处理不过来而引发数据丢失。
流量控制通过滑动窗口机制来平衡发送方和接收方的流量,确保接收方能够及时处理接收到的数据。发送方根据接收方的窗口大小逐步增加发送速率,避免因发送速率过快导致接收方处理不过来。
拥塞控制通过控制发送方的发送速率来避免网络过载。TCP采用慢启动、快速重传和拥塞调整等策略来动态调整网络中的数据传输速率,确保网络的稳定性和可靠性。
TCP通过三次握手建立连接,四次挥手释放连接,确保连接的建立和释放是可靠的。
通过以上机制,TCP能够在不可靠的网络环境中提供可靠的数据传输服务,确保数据的完整性、顺序性和正确性。
简述 HTTPS 的加密与认证过程
HTTPS(Hypertext Transfer Protocol Secure)是一种在HTTP基础上增加了安全层的协议,用于实现数据传输的加密和身份认证。其主要目的是保护客户端和服务器之间的通信安全,防止数据被窃听或篡改。以下是HTTPS的加密与认证过程的详细描述:
加密过程
客户端向服务器发送HTTPS请求。
服务器将其公钥证书发送给客户端。
客户端接收到服务器的公钥证书后,会对证书进行校验,包括验证证书的有效期、证书颁发机构(CA)的可信度以及证书所有者的身份等。
如果证书验证通过,客户端会生成一个随机的对称密钥,并使用服务器的公钥对该对称密钥进行加密,然后将加密后的对称密钥发送给服务器。
服务器接收到加密后的对称密钥后,使用自己的私钥进行解密,得到对称密钥,并与客户端建立加密通道。
在此之后,客户端和服务器之间的所有通信都使用这个对称密钥进行加密和解密,以确保数据传输的安全性。
认证过程
服务器生成自己的私钥和公钥,将公钥和相关信息(如域名)发送给认证机构。
认证机构验证服务器的身份,并生成自己的私钥和公钥,对服务器的公钥进行数字签名,然后颁发数字证书给服务器。
客户端在建立连接时,会从服务器获取数字证书,并使用内置的根公钥对证书进行验证,确保证书的真实性和有效性。
在某些情况下,HTTPS还支持双向认证,即客户端也需要提供自己的公钥证书供服务器验证,以确保客户端的身份。
通过以上步骤,HTTPS不仅实现了数据传输的加密,还通过数字证书实现了身份认证,从而确保了通信双方的安全性。
TCP 与 UDP 在网络协议中的哪一层,他们之间有什么区别
TCP(传输控制协议)和UDP(用户数据报协议)都是位于OSI模型中的传输层的协议。它们在网络协议中扮演着重要的角色,分别提供不同的服务和特性。
主要区别
- 连接性:
- TCP:面向连接的协议。在传输数据之前,需要通过三次握手建立连接,在数据传输结束后,需要通过四次挥手来终止连接。
- UDP:无连接的协议。发送数据前不需要建立连接,接收数据也不需要确认,从而使得数据传输更快,但也因此缺乏可靠性。
- 可靠性:
- TCP:提供可靠的服务,确保数据无差错、不丢失、不重复且按序到达。它通过拥塞控制、流量控制等机制来保证数据的准确传输。
- UDP:尽最大努力交付,不保证数据的可靠性。如果数据包丢失或乱序,UDP不会进行重传或重新排序。
- 首部开销:
- TCP:首部较大,包含多个字段,如序号、确认号、窗口大小等,这些字段用于实现可靠性和流量控制,因此首部开销较大。
- UDP:首部较小,只包含一个简单的校验和字段,因此首部开销较小,使得UDP在某些情况下比TCP更快。
- 应用场景:
- TCP:适用于对数据准确性要求高的应用,如网页浏览、文件传输、数据库管理等。
- UDP:适用于对实时性要求高、对可靠性要求相对较低的应用,如视频会议、在线游戏、实时音视频传输等。
- 支持的服务对象数量:
- TCP:通常是一对一的两点服务,一条连接只有两个端点。
- UDP:支持一对一、一对多、多对一、多对多的通信模式,可以与多个服务器端建立通信。
总结
TCP和UDP在传输层中各自有着不同的特点和应用场景。TCP提供面向连接的可靠服务,适合对数据准确性要求高的应用;而UDP提供无连接的不可靠服务,适合对实时性要求高的应用。选择哪种协议取决于具体的应用需求和性能要求。
简述对称与非对称加密的概念
对称加密和非对称加密是现代密码学中两种基本的加密方式,它们在密钥管理、加密速度和应用场景上有显著的区别。
对称加密
对称加密,也称为私钥加密,是指使用同一个密钥进行数据的加密和解密。这种方法的特点是算法公开、加密和解密速度快,适合于大数据量的加密处理。对称加密的一个主要缺点是密钥的管理和分发是一个挑战,因为发送方和接收方必须事先共享同一个密钥,这可能存在安全风险,如密钥泄露或未经授权的访问可能导致数据泄露。常见的对称加密算法包括AES、DES等。
非对称加密
非对称加密,又称为公钥加密,是指使用一对密钥(公钥和私钥)进行数据的加密和解密。公钥用于加密数据,而私钥用于解密数据。这种方法的优点是可以安全地公开各自的公钥,而不需要像对称加密那样在通信之前要先同步秘钥。然而,非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。常见的非对称加密算法包括RSA、ECC等。
总结
对称加密和非对称加密各有优缺点,选择哪种加密方式应根据具体需求决定。对称加密适用于大数据量的加密处理,速度快,但需要协商和管理密钥;而非对称加密适用于需要高度保护敏感信息的场景,安全性高,但速度较慢。