乐趣区

关于http:网络是怎样连接的读书笔记第一章

0. 概览

本书以用户在浏览器进行一次进行 HTTP 拜访作为线索,讲述网络的运作机制。在用户在浏览器输出网址开始,到浏览器接显示出页面为止整的个过程中,全书依照控制权转移的程序,顺次介绍了网络的两个次要的组成部分:信息 传输机制(网络协议和路由器、交换机等)+ 应用软件(浏览器、Web 服务器),在整个网络申请之中,是如何分工和合作的。

1. 第一章

第一章中,次要介绍浏览器从接管到用户输出的 URL 开始,到开始发送 HTTP 申请音讯这一过程。

  1. 解析 URL
  2. 生成 HTTP 报文
  3. 确定 Web 服务器 IP 地址
  4. 委托 OS 发送报文

1.1 解析 URL

URL 是什么

URL(Uniform Resource Locator)对立资源定位符,用于形容某一资源的地位,输出 URL 也就相似于,打电话时要先输出对方的电话号码,URL 标识了这次申请的协定类型和目的地。

URL 的几种类型

URL 结尾到第一个 “:” 之前的局部,标识了 URL 的协定类型,如 http、ftp、file 等。对于不同的网络协议,URL 的写法也有各自的规定,本书将重点介绍的是 HTTP 网络协议。

1.2 生成 HTTP 报文

通过解析 URL,咱们曾经晓得了咱们要拜访的指标。接下来的一步,就是生成发送给拜访指标的申请报文,申请报文的格局是有严格规定的。那么,咱们再来看看 HTTP 报文的格局。

1.2.1 HTTP 申请报文的格局

  • 申请行
    申请报文的首行,由 Method + URI + HTTP-Version 独特组成,它们之间应用空格隔开。
    对于 method,method 用于标识申请的动作类型,如 增加、删除、读取,它的值并不在 URL 中体现,而是由浏览器依据理论状况来断定。
  • 音讯头
    音讯头与申请行之间没有空行,它由若干键值对组成,每个键值对占一行。音讯头的最初,有一个空行,标识音讯头完结,并以此来隔开音讯头与音讯体。
    字段名 : 字段值
    ··· ··· : ··· ···
  • 音讯体
    音讯体用于承载此次申请想要提交的信息,往往在 PUT、POST 申请才会用到

1.2.2 HTTP 响应报文的格局

  • 响应行
    响应报文的第一行,由 HTTP-Version + 状态码 + 状态短语 独特组成。响应报文的格局中,除了这第一行响应行的格局区别与申请行,其余部分的格局,都与申请报文统一。
  • 音讯头
    格局同申请报文
  • 音讯体
    格局同申请报文

1.3 获取 Web 服务器的 IP 地址

生成了申请报文之后,那么接下来就应该委托 协定栈向 Web 服务器发送报文了。然而,在发送报文之前,还存在一个问题,就是通过解析 URL,只拿到了指标资源的 Domain,而委托协定栈发报文,必须要提供的不是 Web 服务器的 Domain,而是 Web 服务器的 IP 地址。那么,什么是 IP,又怎样才能将 Domain 转化为 IP 呢?

1.3.1 IP 地址的基本知识

  1. IP 地址的格局:是一串 32 bit 的数字,8 bit(1 byte)一组分为 4 组,每组之间用 ” . ” 隔开。
  2. IP 的外部结构:地址中蕴含『网络号』+『主机号』,然而,他们二者在 32 bit 中所占的位数,并不固定,而是在组件网络时由用户自定义的。因而,除了 IP 地址之外,还须要一个附加信息(子网掩码),来标识 IP 地址的外部结构。
  3. 子网掩码,与 IP 地址的长度雷同,也是一串 32 bit 的数字。其中,右边一半都是‘1’,左边一半都是‘0’. 其中‘1’的局部代表网络号,‘0’的局部代表『主机号』

1.3.2 从 Domain 到 IP 地址:DNS

理解完什么是 IP 地址,接下来,再来说说怎么依据 Domain 来获取 IP 地址。此时,轮到 DNS (Domain Name System)闪亮退场了,DNS 是一种保护 Domain 和 IP 地址之间映射关系的网络服务器。因为在 Socket 库中,封装了查问 IP 地址的性能。所以,在创立 Socket 时,只有传入 Domain 就能够了,Socket 外部会执行对 DNS 的询问。

为啥既要有 Domain,又要用 IP 地址呢?Domain 是为了不便人记忆,而简短的 IP 地址,则可能加重路由器路由的累赘。
DNS 的 IP 地址从哪来呢?它是作为 TCP/IP 的是个设置我的项目,在 OS 中提前设置好的,不须要去查问。

1.3.3 寰球 DNS 大接力

因为寰球的域名数量,不止是成千盈百,将所有的 Domain-IP 地址 映射关系全副保护在同一台 DNS 服务器,是不可能做到的。因而,须要很多的 DNS 服务器分布式的存储 Domain-IP 地址 的映射信息,那么,这些遍布寰球的 DNS 服务器之间,是如何合作的呢?

  1. 域名的层级关系
    在介绍 DNS 服务器之间的合作形式之前,先要介绍一下 Domain 的层级关系。域名是由‘.’宰割的一个字符串。它的层级,也同样由‘.’来进行划分,越靠右侧的地位,层级越高。如‘https://dubbo.apache.org/’域名中,层级最高的是‘org’,其次是‘apache’,再次是‘dubbo’。
  2. 定位 DNS 服务器并获得 IP 地址
    既然 Domain 是分层级的,那么 DNS 服务器当然也会依照层级来进行存储。

    • 首先,寰球共有 12 个根域名服务器,它们会存储一级域名的 DNS 服务 IP 地址;
    • 其次,保护一级域名的 DNS 服务器之中,又会存储它保护了本人域内的二级域名的映射关系的 DNS 服务器的 IP 地址;
    • 同理,三级 DNS 服务器,又保护了四级 DNS 服务器的 IP 地址,如此层层向下递进,直到拿到 跟残缺 Domian 相匹配的 IP 地址,而后返回给发动申请的 DNS 客户端。
    • 另外,每台 DNS 服务器,都要保护 Root DNS 服务器的 IP 地址,如此一来,只有找到任何一台 DNS 服务器,就能够获取任意的一个域名对应的 IP 地址了。(Root DNS 服务器寰球共有 12 个)

1.4 委托协定栈发送音讯

从 DNS 那里获得了 Web 服务器的 IP 地址之后,满足了协定栈数据的要求,所以,下一步,浏览器将会委托协定栈向 Web 服务器发送报文了。

首先,协定栈将浏览器与 Web 服务器之间互相发送音讯的动作,形象成为了『管道与插孔』的模型。通信时,在浏览器端、Web 服务器端,各有一个『插孔』,两个『插孔』由一根『管道』相连接,管道是双向的,单方都能够向管道读写数据。

  1. 服务端建设起 Socket『插孔』,期待被连贯
  2. 浏览器创立 Socket,浏览器调用协定栈程序,创立一个 Socket,并随机调配端口,因为浏览器程序同时可能会与多个 Web 服务器进行通信,因而,协定栈会返回一个描述符,用来标识这个新创建的 Socket。
  3. 浏览器发动连贯,将两个 Socket 用一根管子连接起来(须要端口号),此时,浏览器须要告知协定栈三个参数,Socket 的描述符、Web 服务器的 IP 地址、Web 服务器的端口号。建设连贯的同时,浏览器会将本人 Socket 所应用的 IP 地址、端口号信息告知 Web 服务器,以便 Web 服务器向本人的 Socket 发送响应报文。
  4. 收发音讯,两边的程序,别离向本人的 Socket 写入数据,并监听直到获取由 Web 服务器向本人的 Socket 所发送的相应报文。
  5. Web 服务器发送完响应报文,间接敞开 Socket,或者期待浏览器敞开 Socket 后再敞开本人的 Socket。

这个大节中,从宏观上形容了 浏览器 与 Web 服务器单方进行通信的机制,其中的具体细节,将在下一章中具体进行形容。

退出移动版