首页 > 其他分享 >计算机网络 基础面试第二弹

计算机网络 基础面试第二弹

时间:2023-10-07 22:37:00浏览次数:35  
标签:加密 请求 第二 计算机网络 面试 密钥 服务器 连接 客户端

1. TCP三次握手和四次挥手

TCP三次握手的过程如下:

  1. 第一步(SYN):客户端向服务器发送一个带有SYN(同步)标志的TCP包,指示客户端希望建立连接。这个包包含一个随机的初始序列号(ISN)。

  2. 第二步(SYN-ACK):服务器收到客户端的SYN包后,会发送一个带有SYN和ACK(确认)标志的TCP包作为回应。服务器也会为自己选择一个初始序列号,并将客户端的初始序列号加一作为确认号。

  3. 第三步(ACK):客户端收到服务器的SYN-ACK包后,会发送一个带有ACK标志的TCP包作为确认。客户端将服务器的初始序列号加一作为确认号。

TCP四次挥手的过程如下:

  1. 第一步(FIN):当客户端决定关闭连接时,它发送一个带有FIN(结束)标志的TCP包给服务器,表示客户端不再发送数据。

  2. 第二步(ACK):服务器收到客户端的FIN包后,发送一个带有ACK标志的TCP包作为确认。服务器仍然可以发送数据给客户端,因为这个ACK只是确认收到了客户端的FIN。

  3. 第三步(FIN):当服务器也决定关闭连接时,它发送一个带有FIN标志的TCP包给客户端,表示服务器不再发送数据。

  4. 第四步(ACK):客户端收到服务器的FIN包后,发送一个带有ACK标志的TCP包作为确认。这个ACK告诉服务器,客户端已经接收到了服务器的FIN,连接可以安全关闭。

  5.  

2. 为什么TCP需要三次握手而不是二次

  1. 确认双方的发送和接收能力:在进行握手之前,无法确定双方的发送和接收能力是否正常。通过三次握手,客户端和服务器都能确保对方能够接收自己发送的数据。如果只有两次握手,那么无法确认对方是否能够正常接收数据。

  2. 防止已失效的连接请求被接受:考虑这样一种情况,客户端发送了一个连接请求,但由于某种原因在网络中滞留,导致服务器没有收到该请求。如果只有两次握手,那么客户端会以为连接已经建立,但实际上服务器并不知道这个连接,这样会导致资源的浪费。通过三次握手,服务器可以确认客户端的请求是有效的,并避免处理无效的连接请求。

  3. 防止已失效的连接请求被重复打开:考虑这样一种情况,客户端发送了一个连接请求,服务器接收到并发送了确认,但由于网络问题,客户端没有收到服务器的确认。如果只有两次握手,客户端会重新发送连接请求,然后连接就建立了。而实际上,之前的连接请求已经到达服务器并得到了确认,这样就会导致重复打开相同的连接。通过三次握手,可以确保之前的连接已经失效,并避免重复打开连接。

总而言之,通过三次握手,TCP协议能够确保连接的可靠性和一致性,同时避免了因网络问题或延迟而导致的连接建立错误。

3. GET请求和 POST 请求的区别

  1. 数据传输方式:

    • GET请求:通过URL参数传输数据。参数以键值对的形式附加在URL的末尾,例如:http://example.com/path?param1=value1&param2=value2。GET请求将数据作为URL的一部分,因此在请求中可以直接看到传输的数据。
    • POST请求:通过请求体传输数据。数据被封装在请求的消息体中发送给服务器,而不是作为URL的一部分。因此,在请求中无法直接看到传输的数据。
  2. 数据传输安全性:

    • GET请求:由于数据暴露在URL中,因此在传输过程中可能被拦截和截取。这意味着敏感信息(例如密码)不应该以明文形式出现在GET请求的URL中。
    • POST请求:由于数据传输在请求体中,并且在传输过程中不可见,相对来说比GET请求更安全,适合传输敏感信息。
  3. 数据长度限制:

    • GET请求:由于数据通过URL参数传输,URL的长度是有限制的。不同的浏览器和服务器对URL长度的限制不同,但通常存在长度限制,超过限制可能导致截断或请求失败。
    • POST请求:由于数据传输在请求体中,没有明确的长度限制。但是,服务器和应用程序可能有对请求体大小的限制。
  4. 数据语义:

    • GET请求:GET请求通常用于获取资源或从服务器获取数据。它是幂等的,即多次相同的GET请求应该返回相同的结果,不会对服务器产生副作用。
    • POST请求:POST请求通常用于向服务器提交数据,用于创建、更新或修改资源。它可能会对服务器产生副作用,例如在数据库中创建新的记录。
  5. 缓存:

    • GET请求:由于GET请求的幂等性,响应可以被缓存。浏览器或代理服务器可以缓存GET请求的响应,以提高性能和减少网络流量。
    • POST请求:POST请求的响应默认情况下不会被缓存,因为POST请求可能会对服务器产生副作用,每次请求的结果可能不同。

4. 浏览器输入URL处理过程

  1. URL解析:浏览器会解析输入的URL,将其分解成不同的组成部分。这些部分包括协议(如HTTP或HTTPS)、主机名(如example.com)、端口号(如果指定了特定端口,默认为80或443)、路径(如/page)和查询参数(如?param1=value1)等。

  2. DNS解析:浏览器将主机名(例如example.com)发送给DNS(域名系统)服务器,以获取对应的IP地址。DNS服务器会返回一个或多个IP地址,浏览器会选择其中一个作为目标服务器的IP地址。

  3. 建立TCP连接:使用目标服务器的IP地址和指定的端口号,浏览器尝试建立与服务器的TCP连接。这涉及到三次握手过程,确保客户端和服务器之间的可靠连接。

  4. 发起HTTP请求:一旦建立了TCP连接,浏览器会构建HTTP请求消息。该消息包括请求方法(如GET或POST)、路径、查询参数、请求头(如User-Agent、Accept等)和请求体(对于POST请求)。然后,浏览器将该请求消息发送给服务器。

  5. 服务器处理请求:服务器接收到浏览器的请求后,会根据请求的路径和参数执行相应的处理逻辑。这可能涉及到读取文件、调用后端API、查询数据库等操作。

  6. 服务器发送响应:服务器根据请求的处理结果生成HTTP响应消息。响应消息包括状态码(如200表示成功、404表示未找到等)、响应头(如Content-Type、Content-Length等)和响应体(包含实际的数据或HTML内容等)。服务器将响应消息发送回浏览器。

  7. 接收和解析响应:浏览器接收到服务器的响应后,会根据响应头中的信息进行处理。这可能包括处理Cookie、缓存响应、解压缩响应等操作。同时,浏览器会解析响应体中的数据,如HTML内容、CSS样式表、JavaScript代码等。

  8. 渲染页面:一旦浏览器解析完响应体中的HTML、CSS和JavaScript,它会开始渲染页面。这包括将HTML解析为DOM树、应用CSS样式、执行JavaScript代码、加载和显示图像等操作。

  9. 关闭TCP连接:当浏览器完成页面渲染后,它会关闭与服务器的TCP连接。这是通过四次挥手过程完成的,确保双方都知道连接已经关闭。

5. HTTPS 实现原理

HTTPS(HyperText Transfer Protocol Secure)是在传输层上基于TLS/SSL协议的安全版本的HTTP协议。它使用加密和身份验证机制,确保在客户端和服务器之间传输的数据的保密性和完整性。下面是HTTPS的实现原理:

  1. 客户端发起连接请求:当用户在浏览器中输入HTTPS的URL时,浏览器会向服务器发起连接请求。这个请求是通过默认的HTTPS端口(通常为443)发送的。

  2. 服务器证书:服务器在回应客户端的连接请求时,会将自己的公钥和数字证书一起发送给客户端。数字证书是由受信任的证书颁发机构(CA)颁发的,用于验证服务器的身份。

  3. 客户端验证证书:客户端收到服务器的证书后,会验证证书的合法性。它会检查证书的有效性、是否由受信任的CA签发、是否过期等。如果证书验证通过,客户端可以继续与服务器建立安全连接;否则,会出现警告或错误提示。

  4. 客户端生成会话密钥:如果服务器的证书验证通过,客户端会生成一个随机的会话密钥,用于后续的对称加密通信。会话密钥是一个对称密钥,意味着它在客户端和服务器之间共享。

  5. 客户端发送加密请求:客户端会使用服务器的公钥对会话密钥进行加密,然后将加密后的会话密钥发送给服务器。这样,只有服务器能够解密会话密钥,确保了会话密钥的安全传输。

  6. 服务器解密会话密钥:服务器收到客户端发送的加密会话密钥后,使用自己的私钥对其进行解密,恢复得到原始的会话密钥。

  7. 客户端和服务器建立加密通信:客户端和服务器现在都拥有相同的会话密钥,它们使用对称加密算法来加密和解密通过网络传输的数据。这样,客户端和服务器之间的通信就变得安全起来,第三方无法轻易地获取或篡改传输的数据。

通过以上步骤,HTTPS实现了数据的加密和服务器身份的验证。它提供了端到端的安全性,确保敏感信息在传输过程中不被窃取或篡改。同时,HTTPS还可以防止中间人攻击,因为第三方无法轻易地解密和篡改通过SSL/TLS协议加密的数据。

6. 对称加密和非对称加密区别

  1. 密钥数量:

    • 对称加密:对称加密使用相同的密钥进行加密和解密。这意味着加密和解密双方需要共享相同的密钥。因此,对称加密只需要一个密钥。
    • 非对称加密:非对称加密使用一对密钥,分别是公钥和私钥。公钥用于加密数据,私钥用于解密数据。这意味着加密和解密使用的是不同的密钥。因此,非对称加密需要两个密钥。
  2. 加密和解密速度:

    • 对称加密:对称加密算法通常比非对称加密算法更快速和高效,因为加密和解密使用相同的密钥,算法较为简单。
    • 非对称加密:非对称加密算法相对较慢,因为加密和解密使用不同的密钥,算法较为复杂。
  3. 密钥分发:

    • 对称加密:在对称加密中,密钥需要在加密和解密双方之间进行安全地分发。这可能存在安全性问题,因为如果密钥在传输过程中被窃取,加密的数据也将不再安全。
    • 非对称加密:非对称加密中,公钥可以公开分发,而私钥必须保持机密。这样,无需在加密和解密双方之间共享私钥,提供了更好的密钥管理和分发的安全性。
  4. 安全性:

    • 对称加密:对称加密算法在加密和解密过程中使用相同的密钥,因此,如果密钥被泄露,加密的数据将容易受到攻击。对称加密的安全性依赖于密钥的保密性。
    • 非对称加密:非对称加密使用不同的密钥进行加密和解密,并且私钥必须保持机密。即使公钥被泄露,攻击者也无法轻易获取私钥,因此非对称加密提供了更高的安全性。

标签:加密,请求,第二,计算机网络,面试,密钥,服务器,连接,客户端
From: https://www.cnblogs.com/beyond-tester/p/17747625.html

相关文章

  • 2023-2024-1 20231416 《计算机基础与程序设计》第二周学习总结
    计算机科学概论:  计算系统由硬件 软件和数据组成 是一种动态实体 动态即代表具有一定的灵活度 而实体代表其拥有一定的份量 而计算系统的分层也如同洋葱一般层层覆盖 信息隐藏和抽象两个概念也拥有很高的相似度 只不过抽象更注重于外部 信息隐藏更注重程序内部 计算机......
  • 2023-2024-1 20231411 《计算机基础与程序设计》第二周学习总结
    作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第一周作业这个作业的目标初步熟悉课本以及对所学内容有所思考作业正文https://www.cnblogs.com/123lyx/p/17747569.html教材学习内容总......
  • 2023-2024-1 20231312 《计算机基础与程序设计》第二周学习总结
    作业信息|这个作业属于哪个课程|<班级的链接>2023-2024-1-计算机基础与程序设计||这个作业要求在哪里|<作业要求链接>2023-2024-1计算机基础与程序设计第二周作业||这个作业的目标|<计算机科学概论第1章并完成云班课测试《C语言程序......
  • 企业场景面试题
    面试时,在询问一些技术场景问题的时候,通常以如下的问题。这些是每一个项目都需要面对的问题,能够回答这些问题才能够说明有过实际的开发经验,同时从回答种也可以看出我们的真实实力水平......
  • 2023-2024-1 20231403 《计算机基础与程序设计》 第二周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第二周作业)这个作业的目标学习两本课本的第一章内容作业正文https://www.cnblogs.com/lsrmy/p/17747323.html教材学习内......
  • 2023-2024-1 20231306《计算机基础与程序设计》第二周学习总结
    这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第二周作业这个作业的目标数字化、信息安全、自学教材计算机科学概论第1章和《C语言程序设计》第1章并完成云班课测试作业正文https://i.cnblogs.co......
  • 2023-2024-1 20231320 《计算机基础与程序设计》第二周学习总结
    2023-2024-120231320《计算机基础与程序设计》第二周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第一周作业)这个作业的目标<自学《计算机基础与......
  • CountDownLatch、CyclicBarrier、Semaphore面试讲解
    @TOC<hrstyle="border:solid;width:100px;height:1px;"color=#000000size=1">这三个也是面试常问的,作为线程通信的方法1.CountDownLatch(CDL)主要是用于一个线程等待其他完成后才继续执行。主要方法:await()、countDown()CountDownLatchcdl=newCountDownLatch(2);//第一......
  • 面试官:我有一记 Framework 连环炮;看看你能撑到第几步?
    近期在面试中遇到了很多关于Handler、Binder机制的问题,相信很多人在面试或晋升考核中也遇到了类似的问题。如果你对技术原理和底层逻辑没有深入了解,那么你通过面试的机会就会显著下降。本文将介绍Handler、Binder机制的学习手册,解决大家对底层逻辑、技术原理、源码解析、面试真题等......
  • 记录在广州两个月的Android面试插曲和感想
    前言一晃眼9月份了,入职快两个月闲着才想着写一份面经,从今年4月份离的职,中间休息加上学习一个半月(好不容易有闲时间就有些懈怠了)剩下一个半月的时间,通过内推+BOSS直聘,前前后后约到了10几家面试,终于拿到了一个满意的offer,仍然是一家做海外APP的公司。离职上家公司位于广州天河区,是一......