八股文之计算机网络

TCP/IP 网络模型有哪几层

该模型用来解决不同设备间的进程通信,就需要网络通信,该模型就应运而生。首先是应用层,我们所接触的App都是在这一层实现的,当不同的设备需要通信时,就需要把数据发给传输层,传输层支持两个传输协议,TCP和UDP,TCP应用广泛因为它具有可靠性,顺序性,能进行流量控制,拥塞控制,适用于长连接,适用于事务性应用,它可以确保数据被不丢失和不被篡改。UDP也有自身的优势,UDP没有TCP的连接建立过程和拥塞控制机制,在传输的过程中延迟较低,在简单的应用场景下更加合适,因为它的头部较小,没有复杂的控制机制,UDP支持广播和多播,适用于实时广播、流媒体等,UDP没有连接的概念,适用于一些短期通信的场景。接下来就是网络层了,传输层就作为应用数据传输的媒介,具体的传输路线由网络层管理,网络层采用的是IP协议,会将传输层的报文作为数据部分,再加上IP头部组装成IP报文,如果IP报文大小超过了MTU(以太网中一般就是1500字节)就会再次进行分片,再这一层需要寻找匹配的网络号和主机号(IP按位与子网掩码,IP按位与子网掩码的取反),IP协议还需要进行路由,当数据包到达一个网络节点,就需要通过路由算法决定下一步怎么走。最后数据到了网络接口层,在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上,以太网在判断网络包目的地时和 IP 的方式不同,必须采用相匹配的方式才能在以太网中将包发往目的地,而 MAC 头部就是干这个用的,所以,在以太网进行通讯要用到 MAC 地址。网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

在浏览器输入一个网址到网页显示,这期间发生了什么

  1. 域名解析(DNS解析):首先,浏览器会将输入的网址中的域名部分发送到DNS(域名系统)服务器,以获取与该域名关联的IP地址。DNS服务器将域名解析为对应的IP地址,以便后续连接到正确的服务器。

  2. 建立TCP连接:浏览器使用获取到的IP地址,通过TCP(传输控制协议)建立与服务器的连接。这涉及一个三次握手的过程,其中浏览器和服务器之间进行通信以确保连接的建立。

  3. 发送HTTP请求:一旦TCP连接建立,浏览器将HTTP请求发送到服务器,请求特定的网页内容。HTTP请求中包含请求的方法(GET、POST等)、请求的资源路径、协议版本等信息。

  4. 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,会根据请求的内容和路径来处理请求,然后准备要返回的HTTP响应。

  5. 服务器发送HTTP响应:服务器将请求处理后的网页内容封装成HTTP响应,并发送回浏览器。HTTP响应中包含响应状态码、响应头部和响应体等信息。

  6. 接收响应:浏览器接收到服务器发送的HTTP响应后,会解析响应内容,其中包括状态码、响应头部和响应体等。

  7. 渲染页面:浏览器根据接收到的响应内容,开始渲染页面。它会解析HTML、CSS和JavaScript等内容,并在页面上显示出来。浏览器会按照文档对象模型(DOM)和渲染树的方式来构建页面的可视化表示。

  8. 加载资源:在渲染页面的过程中,浏览器还会下载页面所需的其他资源,如图片、样式表、JavaScript文件等。这些资源的加载是并行进行的,以提高页面加载速度。

  9. 执行JavaScript:如果页面中包含JavaScript代码,浏览器会执行这些代码,可能会改变页面的内容、交互和样式。

  10. 显示页面:最终,浏览器将渲染好的页面显示在用户的屏幕上,用户可以与页面进行交互,点击链接、填写表单等。

    总的来说,从键入网址到网页显示期间,涉及域名解析、建立TCP连接、发送和接收HTTP请求与响应、解析和渲染页面等多个步骤,这些步骤协同工作,使用户能够快速访问并浏览网页内容。

TCP为什么要三次握手四次挥手,一次握手和一次挥手不可以吗

TCP协议的三次握手和四次挥手是为了确保可靠的连接建立和断开,以应对不同网络环境下可能出现的问题和情况。一次握手和一次挥手是不足以满足这些需求的,下面解释一下为什么需要三次握手和四次挥手:

三次握手(建立连接):

  1. 第一次握手:客户端发送连接请求报文(SYN)给服务器,请求建立连接。

  2. 第二次握手:服务器收到客户端的连接请求后,回复一个确认报文(SYN + ACK),表示收到请求,并同意建立连接。

  3. 第三次握手:客户端收到服务器的确认后,再次回复一个确认报文(ACK),表示连接已建立。

    三次握手的主要目的是确保双方都同意建立连接,以及确认双方的通信能力正常。如果仅有一次握手,不能完全保证双方的通信能力,因此可能会导致不稳定的连接。

四次挥手(断开连接):

  1. 第一次挥手:客户端发送连接释放报文(FIN)给服务器,表示客户端没有数据要发送了,请求断开连接。

  2. 第二次挥手:服务器收到客户端的释放请求后,发送一个确认报文(ACK),表示已收到请求。

  3. 第三次挥手:服务器发送自己的连接释放报文(FIN)给客户端,表示服务器也没有数据要发送了,准备断开连接。

  4. 第四次挥手:客户端收到服务器的释放请求后,发送一个确认报文(ACK),表示已收到请求。

    四次挥手的过程是为了确保双方都完成数据的传输和处理,以及释放连接资源,避免在数据未完全传输或处理完毕时就断开连接,导致数据丢失或错误。

总的来说,三次握手和四次挥手的设计是为了保证连接的可靠性和数据的完整性,在不同网络环境下能够应对各种可能的问题,确保通信的稳定和可靠。

你说到数据安全,你可以说说对称加密和非对称加密吗?

  1. 对称加密:在对称加密中,同一个密钥被用于加密和解密数据。这意味着发送方和接收方都必须共享同一个密钥。常见的对称加密算法包括DES(Data Encryption Standard)、AES(Advanced Encryption Standard)等。对称加密的优点是加解密速度较快,但密钥的管理和分发相对复杂,容易受到安全威胁。

  2. 非对称加密:非对称加密使用一对密钥,分别是公钥和私钥。发送方使用接收方的公钥来加密数据,而接收方使用自己的私钥来解密数据。反之亦然。非对称加密算法的常见代表是RSA(Rivest-Shamir-Adleman)。非对称加密能够提供更好的安全性,因为私钥不需要与其他人共享,但相对来说加解密速度较慢。

https为什么安全,怎么实现的

HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密和身份验证来保护网络通信的协议,它在传输数据时使用了SSL(Secure Sockets Layer)或TLS(Transport Layer Security)加密协议,从而提供了更高的安全性。HTTPS的安全性体现在以下几个方面:

  1. 数据加密: 在HTTPS中,传输的数据会通过加密算法进行加密,使得未经授权的第三方无法解读和窃取数据内容。这防止了数据在传输过程中被拦截和篡改。

  2. 身份验证: HTTPS使用了数字证书来对服务器进行身份验证,确保你与服务器通信的是预期的合法服务器,而不是恶意的中间人。这样可以防止“中间人攻击”等安全威胁。

实现HTTPS安全的过程如下:

  1. 获取SSL/TLS证书: 网站管理员需要从权威的证书颁发机构(Certificate Authorities,CA)处获取SSL/TLS证书。证书中包含了网站信息、公钥等,证明了服务器的身份。
  2. 配置服务器: 服务器需要配置支持HTTPS协议,一般是在Web服务器(如Apache、Nginx)上进行配置。配置的过程包括指定证书、私钥、加密算法等信息。
  3. 建立安全连接: 当客户端(浏览器)向服务器发起连接请求时,服务器会返回证书。浏览器通过证书中的公钥加密一个随机生成的对称密钥,并将其发送给服务器。
  4. 握手过程: 服务器收到客户端发送的对称密钥后,使用自己的私钥进行解密,得到了对称密钥。接下来的通信会使用这个对称密钥来进行加解密。此外,服务器和客户端会交换一些用于后续通信的加密参数。
  5. 安全通信: 一旦握手成功,客户端和服务器之间的通信就会使用对称密钥进行加密,从而保障数据的隐私和完整性。

需要注意的是,虽然HTTPS提供了更高的安全性,但也并非绝对安全。不正确的配置、失效的证书、被劫持的域名等都可能影响HTTPS的安全性。因此,维护证书的有效性、正确配置服务器以及及时更新证书等都是保障HTTPS安全的重要步骤。