网络面试题手册
UDP 和 TCP 有什么区别?
TCP(传输控制协议)和UDP(用户数据报协议)都是互联网协议套件中的传输层协议,它们在网络中传输数据有着本质的区别:连接性:TCP 是面向连接的协议。在数据传输之前,它需要建立连接。一个TCP连接需要经过三次握手过程,确保双方准备好进行数据传输。UDP 是无连接的协议。它不需要预先建立连接,数据可以直接发送给接收方,不必等待建立连接。可靠性:TCP 提供可靠的数据传输服务。通过序列号、确认应答、重传控制、流量控制和拥塞控制等机制,确保数据的正确性和顺序性。UDP 不保证数据的可靠传输。它发送的数据包可能会丢失或者顺序错乱,且没有内建的机制来纠正这些错误。速度和效率:TCP 由于其确保数据准确性和顺序性的机制,通常比UDP慢。这些机制使TCP非常可靠,但也增加了通信的开销。UDP 由于缺少复杂的控制机制,能够提供更快的数据传输速度,适用于对实时性要求高的应用,如视频会议和在线游戏。数据流:TCP 提供字节流服务。通过TCP连接发送的数据是按照字节流方式进行传输的,接收方会按照发送时的顺序来接收数据。UDP 提供数据报服务。每个UDP用户数据报是独立传输的,每个数据报都有明确的边界。头部开销:TCP 的头部开销比UDP大。TCP头部至少20字节,包含许多用于保障可靠传输的信息。UDP 的头部开销小,仅有8字节,适合传输小量数据。用例示例:TCP 的典型应用包括Web浏览(HTTP/HTTPS)、电子邮件(SMTP/POP/IMAP)和文件传输(FTP)等,这些应用都需要数据的准确传输。UDP 常用于流媒体传输(如视频和音频流)、在线游戏、语音通话(VoIP)等,这些应用更注重速度而非每个数据包的完整性。总结来说,TCP和UDP各有优缺点,适用于不同的网络应用场景。TCP通过复杂的机制保证数据的可靠性,适合需要高可靠性的应用。UDP则因其低延迟特性,适用于需要快速数据传输但可以容忍一定数据丢失的应用。
阅读 57·2024年8月5日 12:53
HTTP 协议 1.0 和 1.1 和 2.0 有什么区别?
HTTP(超文本传输协议)是 Web 上交换数据的基础协议,随着 Web 技术的发展,HTTP 也经历了多个版本的迭代。下面我会详细介绍 HTTP 1.0、1.1 和 2.0 这三个版本的区别:HTTP 1.0无状态连接:HTTP 1.0 是无状态的,也就是说每次请求都需要建立一个新的TCP连接,完成数据传输后连接就会关闭。这种方式在每次请求都需要经历 TCP 连接的建立和断开过程,导致性能上的不足。限制性能:由于每次请求都要建立新的连接,所以并发多个请求会导致大量的延迟和性能问题。无宿主名(Host)字段:HTTP 1.0 不支持 Host 头部。这意味着同一个物理服务器上无法托管多个域名的网站。HTTP 1.1持久连接:HTTP 1.1 默认采用持久连接(也称为“keep-alive”),允许在一个TCP连接上发送和接收多个HTTP请求/响应,从而减少了TCP连接的开销。管线化:HTTP 1.1 引入了请求的管线化,理论上客户端可以在收到前一个响应之前发送下一个请求,减少了请求的延迟。但实际上,由于某些浏览器和服务器的实现问题,这个特性并未广泛使用。新增头部字段:例如 Host(它允许在同一物理服务器上虚拟托管多个域名)、Etag(实体标签,可以协助缓存验证)、Accept-Encoding(指定客户端可以接收的内容编码类型)等。缓存控制:更复杂和灵活的缓存控制机制,使得客户端和服务器可以更有效地协商数据的缓存,减少不必要的数据传输。分块传输编码:允许服务器开始发送响应而不需要先知道全部内容的总大小。HTTP 2.0二进制协议:HTTP/1.x 是文本协议,而 HTTP/2 是二进制协议,提供了更高效的解析和网络传输。多路复用:在同一个连接上并行交错地发送多个请求和响应,而不会互相影响,极大地提高了传输效率和减少了延迟。流优先级:可以为 HTTP/2 连接上的流设置优先级,允许更重要的资源先被发送。服务器推送:服务器可以对一个客户端请求发送多个响应,允许服务器主动推送资源给客户端,进一步提升页面加载效率。头部压缩:HTTP/2 引入了 HPACK 压缩格式,用于减小头部大小,以减少传输延迟。举例来说,一个明显的性能改进是在使用HTTP/2时浏览一个网站:由于多路复用和头部压缩等特性,相比于 HTTP/1.1,网页的加载时间可以显著减少,尤其是在网络条件较差或加载资源较多的场景下。此外,HTTP/2 的服务器推送功能允许服务器预先推送静态资源,比如 CSS 或 JavaScript 文件,这可以进一步提高加载速度,因为浏览器不必等待解析 HTML 再去请求这些资源。
阅读 36·2024年8月5日 12:51
HTTP和TCP的区别
HTTP (超文本传输协议)和TCP (传输控制协议)都是网络协议,用于在互联网上发送和接收数据,但它们在网络通信中具有不同的角色。在解释二者的区别之前,请先简要理解每个协议的基本概念。 HTTP (超文本传输协议)HTTP是应用层协议,被设计用来获取web服务器上的信息。它基于请求/响应模型,在客户端-服务器编程模型中,HTTP客户端发送请求到服务器,服务器处理这些请求并返回响应。这些请求和响应都以文本形式发送,通常为HTML格式。 TCP (传输控制协议)TCP是传输层协议,用于在网络中建立可靠的、有序的和错误检测机制的数据传输通道。TCP通过确认数据包已正确接收并通过流量控制和拥塞控制来保证数据的顺利传输。 HTTP和TCP之间的主要区别协议类型:HTTP是应用层协议,对网络通信的具体应用进行了规范(如在web浏览器和服务器之间如何通信)。而TCP是传输层协议,用于确保数据从发送方到接收方的可靠传输。连接类型:HTTP连接是无状态的,这意味着服务器不保存关于客户端请求的任何信息。TCP连接是有状态的,这意味着服务器保存连接状态信息(如发送和接收的数据包)。数据传递方式:HTTP用于传输超文本,如HTML文档。TCP在传输层中进行数据传输,这的数据可能来自应用层的各种协议(如HTTP、FTP等)。数据可靠性:HTTP依赖于TCP来确保数据的可靠性。实际上,大多数HTTP通信都是通过TCP进行的。使用场景:HTTP广泛用于网页请求,包括许多用于数据传输的web服务。而TCP用于许多网络通信场景,包括电子邮件(SMTP、POP、IMAP协议)、文件传输(FTP协议)和web浏览(HTTP)等。
阅读 45·2024年6月24日 16:43
Proxy 的代理原理,以及 Proxy 是如何使用的?
代理原理:Proxy,也称为代理服务器,其基本原理是作为客户端和服务器之间的中介角色。当客户端请求网页或其他网络服务时,代理服务器会接收这个请求,然后代表客户端向真正的服务器发送请求。代理服务器收到服务器的响应后,再将数据转发给客户端。这个过程实现了数据的中转,可以用于多种用途,如内容缓存、过滤请求、负载均衡、隐私保护等。使用Proxy的方式:Proxy 的使用可以根据不同的需求和场景分为几种方式:客户端配置:在客户端(如浏览器、操作系统)中设置代理服务器的地址和端口,使得所有通过客户端发出的请求都经过代理服务器。例如,在浏览器的网络设置中,可以填入代理服务器的IP地址和端口,之后浏览器发出的所有请求都会通过这个代理服务器。系统级别的代理:在操作系统中设置代理,那么所有的网络请求都可以被代理。在Windows系统中,可以通过“Internet选项”设置全局代理。在UNIX-like系统中,可以设置环境变量http_proxy和https_proxy。应用级别的代理:某些应用程序允许用户配置代理,仅该应用程序的数据流量会通过代理服务器。例如,可以在Telegram客户端中单独设置代理。透明代理:客户端不需要做特别配置,所有的网络流量都会自动通过代理服务器,通常是由网络管理员在网络的出口处设置。这通常用在企业或学校网络中,用于监控和过滤流量。反向代理:对于服务端而言,反向代理服务器接收来自客户端的请求,然后转发到内部服务器,并将服务器的响应返回给客户端。反向代理常用于负载均衡、SSL终结和缓存静态内容。例如,Nginx和Apache都可以配置为反向代理。编程中使用Proxy:在编写软件时,可以使用编程语言提供的库通过代理发送请求。例如,在Python中,可以使用requests库并配置proxies参数来发送请求。示例:假设我们有一台位于美国的代理服务器,其IP地址是12.34.56.78,端口是8080。如果我们在中国,并希望通过这台美国的代理服务器来访问一个通常在中国无法访问的网站,我们可以这样做:在浏览器设置中,我们输入代理服务器的IP地址和端口。我们尝试访问目标网站,如https://www.example.com.浏览器不会直接连接到example.com,而是将请求发送到代理服务器12.34.56.78的8080端口。代理服务器接收到请求后,将其代理到example.com.example.com将响应发送回代理服务器。代理服务器再将这些信息转发回我们的浏览器。通过这种方式,我们就可以访问原本无法访问的网站,同时也隐藏了我们的真实IP地址。
阅读 93·2024年6月24日 16:43
TCP 建立连接的详细过程
TCP(传输控制协议)建立连接的过程通常被称为三次握手(Three-way handshake)。这个过程确保客户端和服务器之间建立一个可靠的会话。三次握手的基本步骤如下:SYN(同步)步骤:客户端开始连接过程,向服务器发送一个带有SYN(同步序列编号)标志的TCP段,说明客户端愿意建立连接,并且提供了自己的初始序列号(ISN),用来同步序列号。SYN-ACK(同步确认)步骤:服务器收到客户端的SYN请求后,若同意建立连接,将发送一个TCP段给客户端,这个TCP段同时设置了SYN和ACK(确认)标志。ACK标志确认了客户端的初始序列号,而服务器的SYN标志则提供了服务器的初始序列号。ACK(确认)步骤:客户端收到服务器的SYN-ACK响应后,再次发送一个TCP段给服务器,这次的TCP段只设置了ACK标志,确认了服务器的初始序列号。这样,三次握手就完成了,双方都确认了对方的初始序列号,可以开始数据传输。让我用一个简单的例子来说明这个过程:假设Alice想要通过TCP与Bob的服务器建立连接:Alice -> Bob: Alice发送一个TCP段,其中SYN标志被置为1,初始序列号设为100(假设的值)。Bob -> Alice: Bob收到了Alice的请求后,发送一个TCP段作为回应,这个段中SYN和ACK标志都被置为1,确认号设为Alice的初始序列号+1,即101,同时Bob提供自己的初始序列号,设为300。Alice -> Bob: Alice收到Bob的响应后,发送一个TCP段,其中ACK标志被置为1,确认号设为Bob的初始序列号+1,即301。完成上述步骤后,Alice和Bob之间的TCP连接就正式建立了,他们可以开始安全可靠的数据交换。这个三次握手的机制是TCP可靠性的核心,确保了双方都准备好接收和发送数据,并且可以处理序列号,以追踪数据包的传输顺序和确认。
阅读 29·2024年6月24日 16:43
WebSocket和HTTP协议有什么区别?
WebSocket 和 HTTP 都是网络协议,它们在 Web 应用中承担着数据交换的角色,但是它们在设计上有着根本的差别,满足不同的应用场景。HTTP 协议HTTP(HyperText Transfer Protocol)是一种无状态的请求/响应协议,通常用于客户端和服务器之间的传统网页数据传输。它在 1991 年被发明,用来在互联网上传输超文本(HTML 文档),并随着时间进化到现在的 HTTP/1.1 和 HTTP/2 版本。特点:无状态: 每次请求之间相互独立,服务器不保存之前的请求信息。请求/响应模式: 客户端发送请求,服务器响应该请求,完成一次交互。短连接: 传统的 HTTP/1.1 协议在每次请求完成后都会关闭连接(虽然现在有持久连接的选项Connection: keep-alive)。不双向: 客户端发起请求,服务器响应,服务器不能主动向客户端发送消息。例子:一个典型的 HTTP 交互场景是,用户在浏览器中点击一个链接,浏览器发送一个 HTTP GET 请求到服务器,服务器处理请求并返回一个 HTML 页面,浏览器接收并显示给用户。WebSocket 协议WebSocket 是一个相对较新的协议,它在 2011 年成为国际标准。WebSocket 协议旨在通过单个长期连接提供全双工通信渠道,以支持实时和双向交互。特点:全双工: 客户端和服务器都可以随时向对方发送消息,无需等待响应。长连接: 一旦客户端和服务器之间的 WebSocket 连接打开,它将保持打开状态,直到任何一方显式关闭。低延迟: 数据包头部信息少,减少了发送消息的开销,适合需要快速通信的场景。例子:在一个实时聊天应用中,服务器可以在接收到一条新消息时立即将其推送给所有连接的客户端,而客户端也可以随时发送消息给服务器。所有这些通信都是在同一个 WebSocket 连接上完成的,并且可以非常迅速地进行。总结总得来说,WebSocket 通常用于需要服务器和客户端进行实时、双向和交互式通信的应用(如在线游戏、实时聊天室和协作工具),而 HTTP 更适合于传统的请求/响应模式的应用,比如网页浏览等。WebSocket 与 HTTP 的主要区别在于其持久的连接和低延迟的通信能力。虽然它们可以在相同的端口上运行(WebSocket 常常在 HTTP 的基础上握手建立连接,然后升级到 WebSocket 协议),但它们的设计目标和优化点大相径庭。
阅读 61·2024年6月24日 16:43
谈一谈 HTTP 是如何数据传输
HTTP (HyperText Transfer Protocol) 是用于分布式、协作式、超媒体信息系统的应用层协议。它是互联网上数据通信的基础。其数据传输流程大致如下:建立连接:客户端到服务器的连接:当用户通过浏览器或应用程序请求一个网页时,浏览器首先需要与服务器建立连接。在HTTP/1.1协议中,每次请求通常都会创建一个新的TCP连接,而在HTTP/2中,多个请求可以在同一个连接上复用。发送请求:组建HTTP请求:客户端(如浏览器)会创建一个HTTP请求消息,这个消息包括请求行(包括请求方法如GET或POST,请求的资源路径,以及HTTP版本),请求头部(包括各种元数据如Accept, User-Agent, Host等),以及请求正文(通常在POST请求中携带数据)。发送请求到服务器:客户端将这个请求通过TCP连接发送给服务器。服务器处理请求:服务器解析请求:服务器接收请求消息,并解析请求行和头部,确定请求的资源和操作。处理请求:服务器根据请求类型,调用相关的服务或脚本,如数据库查询、文件读取等,来处理这个请求。发送响应:组建HTTP响应:服务器处理完请求后,会创建一个HTTP响应消息,包括状态行(HTTP版本,状态码,状态文本),响应头部(包括内容类型、内容长度、缓存控制等元数据)和响应正文(请求的资源内容)。发送响应到客户端:服务器通过TCP连接将响应消息发送回客户端。客户端接收响应:解析响应:客户端收到响应后,会解析状态码以了解请求是否成功,以及如何处理返回的数据。显示内容:如果是网页请求,浏览器会解析响应正文中的HTML、CSS和JavaScript内容,并在屏幕上渲染显示网页。关闭连接:断开连接:在HTTP/1.0中,通常每个请求/响应之后连接即关闭。而在HTTP/1.1中,引入了持久连接(keep-alive),允许在一个连接上发送、接收多个请求/响应。不过,最终这个连接也会在一定时间后或按照客户端或服务器的需求被关闭。例子:假设您在浏览器的地址栏输入了一个URL http://example.com 并按下了回车键:建立连接:浏览器通过DNS解析获得 example.com的IP地址,然后向这个地址的80端口发起TCP连接(HTTP默认端口)。发送请求:浏览器构建一个GET请求消息,请求行为 GET / HTTP/1.1,请求头部包含了浏览器类型、接受的内容类型等。服务器处理请求:example.com的服务器接收请求,解析路径 /,找到首页的内容。发送响应:服务器构建响应消息,状态行可能为 HTTP/1.1 200 OK,响应头部包含内容类型为 text/html,然后是响应正文,即HTML内容。客户端接收响应:浏览器接收到响应,解析HTML内容,并在屏幕上渲染出来。关闭连接:如果没有更多的请求,或服务器/客户端决定关闭连接,TCP连接将被关闭。
阅读 49·2024年6月24日 16:43
HTTP 有哪些常用的状态码?
HTTP状态码是服务器用来告知客户端关于请求的处理结果的一组标准代码。以下是一些常用的HTTP状态码及其含义:1xx - 信息响应100 Continue:客户端应继续其请求101 Switching Protocols:服务器根据客户端的请求切换协议2xx - 成功200 OK:请求成功,通常用于GET与POST请求201 Created:请求成功并且服务器创建了新的资源202 Accepted:服务器已接受请求,但尚未处理204 No Content:请求成功,但没有内容要返回3xx - 重定向301 Moved Permanently:请求的页面已永久移至新位置302 Found(之前是Moved Temporarily):请求的页面临时移至其他位置304 Not Modified:自从上次请求后,请求的页面未修改过4xx - 客户端错误400 Bad Request:服务器无法理解请求的格式401 Unauthorized:请求没有进行身份验证或验证未通过403 Forbidden:客户端没有权限访问该请求的内容404 Not Found:服务器找不到请求的资源405 Method Not Allowed:不允许使用请求中指定的方法408 Request Timeout:服务器等待客户端发送的请求时间过长,超时429 Too Many Requests:用户在给定的时间内发送了太多请求(“限速”)5xx - 服务器错误500 Internal Server Error:服务器遇到了使其无法处理请求的情况501 Not Implemented:服务器不支持请求的功能,无法完成请求502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应503 Service Unavailable:服务器目前无法使用(由于超载或停机维护)504 Gateway Timeout:服务器作为网关或代理,但没有及时从上游服务器收到请求例如,如果您开发的Web应用程序中有一段代码负责处理用户登录请求,当用户成功登录时,您的服务器应该返回200 OK状态码。如果用户尝试访问需要特定权限的资源而他们未经授权,则应返回403 Forbidden。而如果用户请求一个不存在的页面,如一个未定义的路由或资源,服务器应当返回404 Not Found状态码。
阅读 56·2024年6月24日 16:43
GET和POST的区别,何时使用POST?
GET和POST都是HTTP协议中用来发送请求的方法,它们之间有几个主要的区别:数据传输位置:GET方法通过URL传递信息,一般用于请求服务器发送资源,比如网页、图片、视频等。参数通过URL的查询字符串(query string)部分传递,形如?key1=value1&key2=value2。POST方法通常用于提交数据给服务器,比如表单数据。数据不会通过URL传递,而是放在HTTP请求的正文(body)中。数据大小限制:GET请求因为数据在URL中,所以大小受到URL长度的限制,不同的浏览器和服务器对URL长度的限制不同,但一般限制在2048字符之内。POST请求将数据存放在请求体中,理论上没有大小限制,适合传递大量数据。安全性:GET请求由于参数在URL中,所以安全性相对较低。敏感信息如密码不应该通过GET方法发送,因为这样的信息可以在浏览器历史、服务器日志等地方被轻易看到。POST请求更为安全,因为数据不会在URL中显示,相对GET而言,较难被截获。可缓存:GET请求可以被缓存,可以被书签保存,也可以在浏览器历史中回溯。POST请求不会被缓存,不会保存在浏览器历史中,通常用于更新服务器上的信息。幂等性:GET请求应该是幂等的,意味着多次执行同一个GET请求,服务器上的资源状态不会发生变化。POST请求不是幂等的,它用于创建或修改资源,所以多次执行同一个POST请求可能会多次创建或修改数据。何时使用POST?POST通常用于以下情况:发送用户填写的表单数据到服务器,尤其是包含敏感信息(如密码)时。上传文件或大量数据到服务器。需要创建或更新资源时,比如在数据库中新增一条记录。执行需要对资源状态产生影响的操作,比如订单提交。例如,如果运行一个电商网站,当用户填写了结账信息并点击“确认订单”按钮时,你应该使用POST请求来提交表单数据,因为这涉及到创建新的订单记录在服务器上,同时可能包含用户的敏感信息。
阅读 37·2024年6月24日 16:43
基于 HTTP 网络层,前端能可以做哪些性能优化?
基于HTTP网络层的前端性能优化主要关注的是资源的加载和传输效率。以下是一些前端可以采取的性能优化措施:1. 减少HTTP请求次数合并文件:将多个CSS或JavaScript文件合并成单个文件以减少请求数量。精灵图(Sprite Maps):将多个小图标合并到一张图片中,通过CSS背景定位显示所需图标。内联图片(Data URIs):将小图像直接内嵌到HTML或CSS中,减少图片请求。2. 使用CDN(内容分发网络)分布式节点:CDN将静态资源缓存在全球的多个节点,使用户能从就近的服务器下载,降低延迟。缓存效率:CDN通常会对资源进行优化缓存,提高再次访问的速度。3. 缓存优化强缓存:通过设置HTTP头中的Cache-Control和Expires标识,使资源在客户端本地缓存,直到缓存过期。协商缓存:利用ETag和Last-Modified标识,仅当资源更新时才重新下载。4. 延迟加载和按需加载懒加载:对于非首屏图片、视频等资源进行懒加载,即滚动到可视区域后才加载。代码分割(Code Splitting):通过工具如Webpack实现模块的按需加载,避免单页应用加载过多不必要的JavaScript代码。5. 优化请求头和响应头压缩请求头:减少Cookie的大小和使用的数量,以及其他不必要的HTTP头部信息。Gzip/Brotli压缩:对文本资源进行Gzip或Brotli压缩,减少传输大小。6. HTTP/2和HTTP/3的使用多路复用:HTTP/2允许在同一个连接上并行传输多个请求响应,消除了队头阻塞问题。服务器推送:HTTP/2的Server Push可以提前发送资源,减少等待时间。QUIC协议:HTTP/3使用QUIC协议,减少连接建立时间,提升传输效率。7. 优化TLS/SSL握手TLS 1.3:使用更新的TLS版本可以减少握手过程中的往返次数。OCSP Stapling:通过服务器代替客户端查询证书状态,减少TLS握手的延迟。8. 优化资源的加载顺序关键请求优先:确保关键资源(如HTML、CSS、关键JavaScript函数)最先加载。异步加载:使用async和defer属性对非关键JavaScript脚本进行异步加载。9. WebP格式使用WebP:相比传统的JPEG或PNG格式,WebP格式在同等质量下具有更小的文件大小。10. Service Workers离线体验:Service Workers可以帮助缓存资源,并在无网络状态下提供访问。背景同步:Service Workers可以在后台进行数据同步或推送通知。举例来说,对于一个电商网站,我之前优化过的一个项目中,通过使用图片懒加载和WebP格式,网站首页的加载时间减少了约30%。利用HTTP/2的多路复用特性,也显著提高了资源加载的并行度,进一步减少了页面的完
阅读 30·2024年6月24日 16:43