[计网] HTTP

接下来将从以下6个方面,逐渐学习和了解HTTP HTTP基本概念 Get与Post HTTP特征 HTTP缓存 HTTPS与HTTP HTTP/1.1、HTTP/2、HTTP/3演变 HTTP基本概念 1.HTTP是什么? HTTP是超文本传输协议,也就是HyperText Transfer Protocol HTTP的名字【超文本传输协议】,可以拆成三个部分: 超文本 传输 协议 针对 HTTP 协议,我们可以这么理解。 「协议」 HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。 「传输」 HTTP 协议是一个双向协议。 针对传输,我们可以进一步理解了 HTTP。 HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。 「超文本」 HTTP 传输的内容是「超文本」。 理解「超文本」,它就是超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 HTTP是用于从互联网服务器传输超文本到本地浏览器的协议,这个说法是错误的,因为HTTP也可以服务于【服务器<—>服务器】,所有采用两点之间的描述比较准确 2.HTTP常见的状态码 1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。 2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。 「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。 「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。 「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。 3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。 ...

October 31, 2024 · 1 min · Chen-Hang

[计网] TCP/IP网络模型

2.1 TCP/IP 网络模型有哪几层? 2.1 TCP/IP网络模型 前言:为什么要有TCP/IP网络模型? 答:为了提供一套 通用的****网络协议 因为在一台设备上的进程间通信有很多方式,比如管道、消息队列、共享内存、信号等方式,而对于不同的设备上的进程间通信,就需要网络通信,而设备是多样性的,需要兼容多种多样的设备,就需要一套 通用的网络协议 这个网络协议是分层的,每一层都有各自的作用和责任 TCP/IP网络模型分为4层:应用层–>传输层–>网络层–>网络接口层(由上到下) 接下来根据 [TCP/IP 网络模型 ]分别对每一层进行介绍: 应用层(最上层) 最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们使用的应用软件都是在应用层实现的,当两台不同的设备的应用需要通信的时候,应用就把应用数据传给下一层,也就是传输层。 应用层接收数据后把数据传入传输层 所以,应用层只需要专注于为用户提供应用功能,比如HTTP、FTP、Telnet、DNS、SMTP等 应用层不用关心数据是如何传输 应用层是工作在操作系统的用户态,传输层****及其一下则工作在内核态 传输层 应用层的数据包会传输到传输层,传输层(Transport Layer) 是为应用层提供网络支持 在传输层会有两个传输协议,分别为TCP和UDP TCP的全称是“传输控制协议”(Transmission Control Protocol),大部分应用使用的正是TCP传输层协议,比如HTTP应用层协议。 TCP有很多特征:流量控制、超时重传、拥塞控制等,这些保证了数据包能可靠地传输给对方 UDP相对来说比较协议,简单到只负责发送数据包,不保证数据包是否能抵达对方,但是实时性相对更好,传输效率也高。 UDP也可以实现可靠传输,把TCP的特性在应用层上实现就行,(不过要实现一个商用的可靠UDP传输协议也不简单) 应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输层的数据包大小超过MSS(TCP最大报文段长度),就要将数据包分块,这样即使在传输过程中一个分块缺失或者损坏了,只需要重新发送这一分开,而不用重新发送整个数据包。 在TCP协议中,每一个分块称为一个TCP段(TCP Segment) 当设备作为接收方时,传输层则要负责把数据包传给应用层,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要一个编号将应用区分开来,这个编号就是端口 比如 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的。而对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号。 由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。 传输层并不负责将数据从一个设备传输到另一个设备 网络层 在实际场景中,一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择,其中的网络环节是错综复杂的。而传输层的设计理念是简单、高效、专注,如果传输层还负责这一块功能就有点违背设计原则 我们不希望传输层协议处理太多的事情,只需要服务好应用即可,让其作为应用间数据传输的媒介,帮助实现应用到应用的通信,而实际的传输功能就交给下一层,也就是网络层(Internet Layer) 个人理解:应用层把大量的数据发送给传输层,传输层将这些大量的数据进行打包,分段,确定好目的应用,然后由网络层进行传输。 网络层最常用的是IP协议(Internet Protocol),IP协议会将传输层的报文作为数据部分,再加上IP包头组装成IP报文,如果IP报文大小超过了MTU(以太网中一般为1500字节)就会再次进行分片,得到一个继续发送网络的IP报文 网络层负责将数据从一个设备传输到另一个设备,但是世界上那么多设备,如何找到对方呢,因此,网络层需要有区分设备的编号 一般用IP地址给设备进行编号,对于IPv4协议,IP地址共32位,分成了四段(比如127.0.0.1,分成四段,每段8位)。但是寻址起来特别麻烦,不能一个一个去匹配。 因此,需要将IP地址分成两种意义: 一个是网络号,负责标识该IP地址是属于那个[ 子网 ]的 一个是主机号,负责标识同一[ 子网 ]下的不同主机 怎么区分网络号和主机号呢?这需要配合子网掩码才能算出IP地址的网络号和主机号 举个例子,比如 10.100.122.0/24,后面的/24表示就是 255.255.255.0 子网掩码,255.255.255.0 二进制是「11111111-11111111-11111111-00000000」,大家数数一共多少个1?不用数了,是 24 个1,为了简化子网掩码的表示,用/24代替255.255.255.0。 ...

October 31, 2024 · 1 min · Chen-Hang

[计网] 键入网址的过程

面试题:【当键入网址后,到网页显示,期间发生了什么? 下面一张较简单的网络拓扑模型作为例子,探究探究其间发生了什么? HTTP 浏览器做的第一步工作是解析****URL 首先浏览器做的第一步工作就是要对URL进行解析,从而生成发生给Web服务器的请求信息 在一条长长的URL里的各个元素的代表是什么 这里的URL实际上是请求服务器里的文件资源 当上图的蓝色部分URL元素都省略了,那么请求的是哪个文件呢? 当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是/index.html或者/default.html这些文件,这样就不好发生混乱 生产HTTP请求信息 对URL进行解析之后,浏览器确定了Web服务器和文件名,接下来就是根据这些信息来生产HTTP请求信息 真实地址查询——DNS 通过浏览器解析URL并生成HTTP消息后,需要委托操作系统将消息发送给Web服务器 但是在发送之前,还需要查询服务器域名对应的IP地址,因为委托操作系统发送消息时,必须提供通信对象的IP地址 这里,有一种服务器就专门保存了Web服务器域名与IP的对应关系——DNS服务器 域名的层级关系 DNS中的域名都是用句点来分隔的,比如www.server.com,这里的句点带不了不同层次之间的界限 在域名中,越靠右的位置表示其层级越高 实际上域名最后还有一个点,比如www``.server.com.,这个最后一个点代表根域名 也就是说,.根域是最顶层,它的下一层是.com顶级域,再下面是server.com 所以,域名的层级关系类似一个树状结构 根DNS服务器. 顶级域DNS服务器.com 权威DNS服务器server.com 根域的DNS服务器信息保存在互联网中所有的DNS服务器中,这样一来任何DNS服务器都可以找到并访问根域DNS服务器 因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。 域名解析的工作流程 客户端首先会发出一个DNS请求,问www.server.com的IP是啥,并发给本地DNS服务器(也就是客户端的TCP/IP设置中填写的DNS服务器地址) 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到www.server.com,则直接返回IP地址,如果没有,本地DNS会去问它的根域名服务器, 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。 根DNS收到本地DNS的请求后,根据www.server.com的后置是.com,这个域名归于.com区域管理,返回.com顶级域名服务器地址给本地 本地DNS收到顶级域名服务器地址后,向顶级域名服务器请求负责www.server.com的权威DNS服务器的地址, 本地DNS最后向权威DNS服务器请求www.server.com的IP地址,该server.com的权威服务器就是域名解析结果的出处。 权威DNS服务器查询结后将对应的IP地址X.X.X.X返回到本地DNS 本地DNS再将IP地址返回客户端,客户端和目标建立连接 至此,DNS的解析过程完成了,其过程可见下图 域名解析并不是每次都需要经过这么多步骤 还有缓存的存在。 浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。 协议栈 通过DNS获取IP后,就可以把HTTP的传输工具交给操作系统中的协议栈 协议栈的内部分为几个部分,分别承担不同的工作。上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行。 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。 协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。 ...

October 31, 2024 · 2 min · Chen-Hang