计算机网络
计算机网络
0、nginx方向代理的好处?
提高访问速度
因为nginx本身可以进行缓存,如果访问的同一接口,并且做了数据缓存,nginx就直接可把数据返回,不需要真正地访问服务端,从而提高访问速度。
进行负载均衡
所谓负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器。
保证后端服务安全
因为一般后台服务地址不会暴露,所以使用浏览器不能直接访问,可以把nginx作为请求访问的入口,请求到达nginx后转发到具体的服务中,从而保证后端服务的安全。
1、TCP的三次握手和四次挥手?
TCP协议是7层网络协议中的传输层协议,负责数据的可靠传输。
在建立TCP连接时,需要通过三次握手来建立,过程是:
(1)客户端向服务器端发送一个SYN;
(2)服务端接收到SYN后,给客户端发 送一个SYN_ACK;
(3)客户端接收到SYN_ACK后,再给服务端发送一个ACK。
在断开TCP连接时,需要通过四次挥手来断开,过程是:
(1)客户端向服务端发送FIN;
(2)服务端接收FIN后,向客户端发送ACK,表示我接收到了断开连接的请求,客户端可以不发数据了,不过服务端这边可能还有数据正在处理;
(3)服务端处理完所有数据后,向客户端发送FIN,表示服务端现在可以断开连接;
(4)客户端接收到服务端的FIN,向服务端发送ACK,表示客户端也会断开连接。
2、ISO七层模型?
(1)物理层: 是网络的最底层,主要关注物理传输媒介和数据的传输方式等。主要作用是提供原始的比特流传输,确保数据在传输媒介上的可靠传输。网线、集线器、中继器、转接器等。
(2)数据链路层: 负责将物理层传输的数据帧组织成逻辑上的数据帧,并提供了点对点通信的逻辑连接。它还负责流量控制、错误检测和纠正,以及介质访问控制。
对应的硬件有:网关、二级交换机、网桥、无线接入点等。
(3)网络层: 处理数据在不同主机之间的路由和转发,决定数据如何在网络中传输。它负责寻址、路由选择、分段和重组,以及网络拓扑的管理。路由器、三层交换机、防护墙等。
(4)传输层: 提供了端到端的通信,负责数据的分段、传输控制和流量控制。常见的传输层协议有TCP和UDP。
(5)会话层: 管理不同主机之间的会话或对话,为应用程序提供数据交换的逻辑结构。它处理会话的建立、维护和结束,以及数据同步和检查点的管理。
(6)表示层: 负责数据的格式转换、加密和压缩,以确保数据在不同主机之间的传输和解释。它处理数据的语法和语义转换,以便应用程序能够正确解释数据。
(7)应用层: 应用层是最高层,提供了用户与网络之间的接口,为应用程序提供网络服务。它包含了各种网络应用协议,如 HTTP、FTP、SMTP、DNS 等,用于实现各种网络应用,例如网页浏览、电子邮件、文件传输等。
3、GET和POST的区别?
(1)GET:数据会附加在URL的查询字符串中,即放在URL的后面,通过?分隔,参数名和参数值用&连接。
POST:数据会包含在请求的消息体中,而不会直接暴露在URL中。
(2)GET:由于数据放在URL中,所以受到浏览器和服务器对URL长度的限制,通常较短,约为2048个字符。
POST:没有特定的数据长度限制,可以发送较大的数据量。
(3)GET:默认情况下,GET请求可能会被浏览器缓存,重复请求相同URL时,可能会返回缓存的响应。
POST:POST请求默认不会被浏览器缓存。
(4)GET:适用于获取数据,不会对服务器端数据产生影响,比如查询数据、获取资源。
POST:适用于提交数据,可能对服务器端数据产生影响,比如提交表单、上传文件等。
4、Http和Https的区别?
HTTP:是互联网上应用最广泛的一种网络通信协议,基于TCP,可以使浏览器工作更为高效,减少网络传输。
HTTPS:是HTTP的加强版,可以认为是HTTP+SSL(Secure Socket Layer)。在HTTP的基础上增加了一系列的安全机制。一方面保证数据传输安全,另一方面对访问者增加了验证机制。是目前现行架构下,最为安全的解决方案。
主要区别:
(1)HTTP的连接是简单无状态的,HTTPS的数据传输是经过证书加密的,安全性更高。
(2)HTTP是不收费的,HTTPS需要申请证书,而证书通常是需要收费的,并且费用一般不低。
(3)他们的传输协议不同,所以他们使用的端口也是不一样的,HTTP默认是80端口,而HTTPS默认是443端口。
HTTPS的缺点:
(1)HTTPS的握手协议比较费时,所以会影响服务的响应速度以及吞吐量。
(2)HTTPS也并不是完全安全的。因为他的证书体系其实并不是完全安全的。并且HTTPS在面对DDOS这样的攻击时,几乎不起任何作用。
(3)证书需要费钱,并且功能越强大的证书费用越高。
5、HTTPS的工作流程?
(1)客户端请求: 用户在浏览器中输入一个 HTTPS 的 URL,浏览器会向服务器发起一个 HTTPS 请求。
(2)服务器证书: 服务器将自己的数字证书发送给客户端,该证书包含了服务器的公钥以及一些其他信息,如证书的颁发机构、有效期等。
(3)客户端验证证书: 客户端接收到服务器的证书后,会首先验证证书的合法性。它会检查证书是否由受信任的证书颁发机构签名,以及是否在有效期内。如果证书无效或不被信任,浏览器会弹出警告。
(4)密钥协商: 如果证书有效并通过验证,客户端会生成一个随机的对称密钥,并使用服务器的公钥进行加密,然后将加密后的密钥发送给服务器。
(5)服务器解密: 服务器接收到客户端发送的加密密钥后,使用自己的私钥进行解密,得到对称密钥。
(6)数据加密: 一旦双方都拥有了相同的对称密钥,后续的通信将使用该密钥进行加密和解密。客户端和服务器之间传输的数据会使用对称加密算法(如AES)进行加密。
(7)数据传输: 客户端和服务器之间传输加密后的数据,即使被截获,也无法轻易解密。
(8)数据解密: 服务器接收到加密数据后,使用对称密钥进行解密,得到原始数据。
(9)响应数据: 服务器将响应数据加密后发送给客户端,客户端使用对称密钥解密,得到原始数据。
6、Cookie和Session的区别?
当服务器tomcat第一次接收到客户端的请求时,会开辟一块独立的session空间,建立一个session对象,同时会生成一个session id,通过响应头的方式保存到客户端浏览器的cookie当中。以后客户端的每次请求,都会在请求头部带上这个session id,这样就可以对应上服务端的一些会话的相关信息,比如用户的登录状态。
当服务端从单体应用升级为分布式之后,cookie+session这种机制要怎么扩展?
(1)session黏贴:在负载均衡中,通过一个机制保证同一个客户端的所有请求都会转发到同一个tomcat实例当中。问题:当这个tomcat实例出现问题之后,请求就会被转发到其他实例,这时候用户的session信息就丢了。
(2)session复制:当一个tomcat实例上保存了session信息后,主动将session复制到集群中的其他实例。问题:复制是需要时间的,在复制过程中,容易产生session信息丢失。
(3)session共享:就是将服务端的session信息保存到一个第三方中,比如Redis。
7、TCP如何保证传输的可靠性?
(1)基于数据块传输:应用数据被分割成TCP认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。
(2)对失序数据包重新排序以及去重:TCP为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重。
(3)校验和 : TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
(4)超时重传 : 当发送方发送数据之后,它启动一个定时器,等待目的端确认收到这个报文段。接收端实体对已成功收到的包发回一个相应的确认信息(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设为已丢失
(5)流量控制 : TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议(TCP利用滑动窗口实现流量控制)。
(6)拥塞控制 : 当网络拥塞时,减少数据的发送。
8、TCP如何实现流量控制?
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。
为什么需要流量控制? 这是因为双方在通信的时候,发送方的速率与接收方的速率是不一定相等的,如果发送方的发送速率太快,会导致接收方处理不过来。如果接收方处理不过来的话,就只能把处理不过来的数据存在 接收缓冲区里。如果缓存区满了发送方还在狂发数据的话,接收方只能把收到的数据包丢掉。出现丢包问题的同时又疯狂浪费着珍贵的网络资源。因此,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。
TCP为全双工通信,双方可以进行双向通信,客户端和服务端既可能是发送端又可能是服务端。因此,两端各有一个发送缓冲区与接收缓冲区,两端都各自维护一个发送窗口和一个接收窗口。接收窗口大小取决于应用、系统、硬件的限制(TCP 传输速率不能大于应用的数据处理速率)。通信双方的发送窗口和接收窗口的要求相同。
TCP 发送窗口可以划分成四个部分:
(1)已经发送并且确认的 TCP 段(已经发送并确认);
(2)已经发送但是没有确认的 TCP 段(已经发送未确认);
(3)未发送但是接收方准备接收的 TCP 段(可以发送);
(4)未发送并且接收方也并未准备接受的 TCP 段(不可发送)。
TCP 接收窗口可以划分成三个部分:
(1)已经接收并且已经确认的 TCP 段(已经接收并确认);
(2)等待接收且允许发送方发送 TCP 段(可以接收未确认);
(3)不可接收且不允许发送方发送 TCP 段(不可接收)。
接收窗口的大小是根据接收端处理数据的速度动态调整的。 如果接收端读取数据快,接收窗口可能会扩大。 否则,它可能会缩小。
9、TCP的拥塞控制怎么实现的?
TCP发送方维持一个拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
TCP的拥塞控制采用了四种算法,即慢开始、 拥塞避免、快重传和快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
(1)慢开始: 是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为 1,每经过一个传播轮次,cwnd加倍。
(2)拥塞避免: 是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的cwnd加 1。
(3)快重传与快恢复: 在TCP/IP中,快速重传和恢复是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。
10、从输入URL到页面展示到底发生了什么??
(1)DNS解析。
(2)建立TCP连接。
(3)发送HTTP请求。
(4)服务器处理请求并返回HTTP报文。
(5)浏览器解析渲染页面。
(6)连接结束。
11、HTTP到Server如何处理的,在disptchserverlt之前tomcat容器怎么处理的?
-
Tomcat容器之前的处理:在 Tomcat 容器之前,通常还有一些服务器软件或代理服务器,如 Apache HTTP Server、Nginx 等。这些服务器可以用于负载均衡、反向代理、SSL 加密等,然后将请求转发给 Tomcat 或其他后端服务器。
-
Tomcat处理请求:一旦请求到达 Tomcat 服务器,Tomcat 就会使用其内部的 Servlet 容器来处理请求。具体流程如下:
a. Request 对象创建:Tomcat 会解析客户端请求,创建一个 HttpServletRequest 对象,包含了请求的信息(如 URL、HTTP 方法、请求参数等)。
b. 选择 Servlet:根据请求的 URL 路径,Tomcat 决定要调用哪个 Servlet 来处理请求。这个选择是根据部署的 Web 应用中的配置和映射关系来进行的。
c. Servlet 处理:选定的 Servlet 被实例化并调用其
service
方法,将 HttpServletRequest 和 HttpServletResponse 对象传递给它。Servlet 可以读取请求参数、执行业务逻辑、生成响应等。d. 生成响应:Servlet 处理完请求后,生成一个 HttpServletResponse 对象,设置响应的状态码、头部信息和内容。这个响应会包含服务器生成的数据,如 HTML、JSON 等。
e. Response 返回:Tomcat 将生成的响应返回给客户端,客户端浏览器会显示或处理响应内容。
-
Tomcat 容器之后的处理:一旦 Tomcat 生成了响应并返回给客户端,如果在前面有代理服务器,它可能会将响应转发给客户端。客户端浏览器会解析响应并显示内容。
12、服务器端如何实现请求调用?
(1)接收请求:服务器首先需要监听指定的端口,等待客户端发起连接请求。一旦有客户端连接,服务器就会接收到一个连接对象。
(2)解析请求:服务器需要解析客户端发送的请求消息,通常包括请求的类型(GET、POST等)、请求的路径、请求参数等信息。
(3)处理请求:根据请求的内容,服务器端会执行相应的业务逻辑或调用相应的功能模块来处理请求。这可能包括数据库查询、计算、文件操作等。
(4)生成响应:服务器根据处理请求的结果,生成相应的响应消息,通常包括响应的状态码、响应头部信息以及响应体(即返回给客户端的数据)。
(5)发送响应:将生成的响应消息发送给客户端,使其能够获取到相应的结果。
(6)关闭连接:在完成响应后,服务器会关闭与客户端的连接,释放相关资源。
13、HTTP状态码有哪些?
14、DNS的作用是什么?
DNS域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS要解决的是域名和IP地址的映射问题。目前DNS的设计采用的是分布式、层次数据库结构,DNS是应用层协议,它可以在UDP或TCP协议之上运行,端口为53 。
15、DNS的工作流程?
DNS 的查询解析过程分为两种模式:迭代和递归。
(1)用户发起域名查询:用户在浏览器中输入一个域名(如www.example.com),浏览器会首先检查本地缓存中是否有该域名对应的IP地址。
(2)本地缓存查找:如果本地缓存中有对应的IP地址,则直接返回给浏览器,不需要进行后续的查询过程。
(3)递归查询:如果本地缓存中没有对应的IP地址,本地DNS服务器会向根域名服务器发送一个递归查询请求,询问根域名服务器该域名的解析情况。
(4)根域名服务器响应:根域名服务器收到查询请求后,会根据域名的顶级域名(TLD)返回一个指向TLD域名服务器的响应。
(5)TLD域名服务器查询:本地DNS服务器接收到根域名服务器的响应后,会向TLD域名服务器发送一个查询请求,询问该域名的权威域名服务器是哪一个。
(6)权威域名服务器查询:TLD域名服务器返回一个指向权威域名服务器的响应。本地DNS服务器接着向权威域名服务器发送一个查询请求,询问该域名对应的IP地址。
(7)权威域名服务器响应:权威域名服务器收到查询请求后,会返回域名对应的IP地址。
(8)本地DNS服务器缓存:本地DNS服务器将从权威域名服务器获得的IP地址存储在缓存中,以备下次查询时使用。
(9)返回IP地址给用户:本地DNS服务器将获得的IP地址返回给用户的浏览器。
(10)浏览器发起连接:浏览器使用获得的IP地址建立与目标服务器的连接,然后请求相应的网页或资源。
16、DNS服务器有哪些?
DNS服务器自底向上可以依次分为以下几个层级(所有DNS服务器都属于以下四个类别之一):
(1)根DNS服务器。根DNS服务器提供TLD服务器的IP地址。目前世界上只有13组根服务器,我国境内目前仍没有根服务器。
(2)顶级域DNS服务器(TLD 服务器)。顶级域是指域名的后缀,如com
、org
、net
和edu
等。国家也有自己的顶级域,如uk
、fr
和ca
。TLD 服务器提供了权威DNS服务器的IP地址。
(3)权威DNS服务器。在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。
(4)本地DNS服务器。每个ISP(互联网服务提供商)都有一个自己的本地 DNS 服务器。当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,它起着代理的作用,并将该请求转发到 DNS 层次结构中。严格说来,不属于 DNS 层级结构。
17、PING命令的工作原理是什么?
PING基于网络层的ICMP(互联网控制报文协议),其主要原理就是通过在网络上发送和接收ICMP报文实现的。
ICMP报文中包含了类型字段,用于标识 ICMP 报文类型。ICMP 报文的类型有很多种,但大致可以分为两类:
-
查询报文类型:向目标主机发送请求并期望得到响应。
-
差错报文类型:向源主机发送错误信息,用于报告网络中的错误情况。
PING用到的 ICMP Echo Request(类型为 8 ) 和 ICMP Echo Reply(类型为 0) 属于查询报文类型 。
-
PING 命令会向目标主机发送ICMP Echo Request。
-
如果两个主机的连通性正常,目标主机会返回一个对应的ICMP Echo Reply。
(1)UDP在传送数据之前不需要先建立连接。而TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。
(2)TCP是面向字节流的,UDP是面向报文的。
(3)TCP首部开销(20~60字节)比UDP首部开销(8字节)要大。
(4)由于使用TCP进行传输的时候多了连接、确认、重传等机制,所以TCP的传输效率要比UDP低很多。
(5)TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多通信。
(6)远地主机在收到UDP报文后,不需要给出任何确认,并且不保证数据不丢失,不保证是否顺序到达。TCP提供可靠的传输服务,TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制。通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器