互联网是如何工作的

139 阅读7分钟

互联网是如何工作的?

这是我的第一篇掘金博客,开启掘金写作之路。

当你访问一个网站

  • 当你的电脑连入互联网之后,你的电脑将会获得一个编号地址(就像你寄快递的时候需要填写你的发件人地址一样),这个地址我们称为 IP地址--Internet Protocol address。现在网站的服务器也接入了互联网,它也将分配一个IP地址,我们常说你访问某某网站,其实就是在访问这个网站的服务器。
  • 假设你的电脑想与网站进行通信,你说“请把index.html传给我”,消息将会被转化成电子信号,通过电缆发送给网站服务器。在服务器端,会将电子信号转化为计算机可以识别的文本数据。
  • 上面的一切是通过 TCP/IP 协议族来实现。什么是协议?协议是一组规则,双方的约定。TCP/IP协议族共分为4层:
    1. 应用层
    2. TCP 传输控制层
    3. IP 网络层
    4. 链路层 就像很多复杂的协议一样,网络协议通过分层,来明确每一层的工作职责,通过定义明确的接口来协同工作。每个层都可以使用下面各层的功能,而不必担心各层是如何实现的。其中
    5. 应用层负责提供针对各应用程序的协议。比如负责浏览器与服务器相互通信的 HTTP 协议,负责文件传输的 FTP 协议,负责电子邮件的 IMAP 协议;
    6. TCP 传输控制层负责发将数据包发送到计算机上使用特定端口号的应用程序;
    7. IP 网络层使用 IP 地址将数据包发送到特定的计算机
    8. 链路层负责将数据包与网络信号相互之间转换
  • 接下来我们使用应用层的 HTTP 协议请求获取 html 文本。此时需要发送一个请求消息,消息在发送前会被分解为许多片段,我们称之为数据包。通过应用层进入 TCP 层后,每个数据包都会被分配一个端口号(端口号用来确定目标计算机的哪一个应用程序要接受并使用该数据包)。
  • TCP 是一种面向连接的可靠字节流服务协议。关键词是“面向连接”和“可靠”。为什么这么说呢,这是因为 TCP 必须先经过三次握手建立连接之后才能交换数据。每个收到的数据包都会向发送方发送 ack 确认,已确保发送成功。
  • 进入 IP 层后,每个数据包将会赋予目标计算机的 IP地址。IP 是不可靠的无连接协议,他并不关心数据包是否到达目的地,也不关心连接和端口号。他的工作是发送数据包并将其路由到目标计算机,其中每个数据包都是独立的、互不依赖的,所以有可能会乱序到达目标地址,或者在传输途中丢失。那如何保证数据包都到达并且顺序正确呢?这些都交给了 TCP。当数据包过大时,在 IP 层会进行分包。由于每个数据包在物理链路层走的物理链路不一样,传输速度也不一样,导致数据包没有按顺序到达目的地,但 TCP 会按照数据包上携带的序列号来进行排序重组。并且发送方在一个特定的时间内,没有接收到接收方返回的 ack 确认时,则发送方会重新传输该数据包。
  • IPv4采用的是32位地址:119.003.238.064,三个点分为4组数字,每个数的取值范围是 0-255 = 282^8,即8位,那么4组数字即 8*4=32位,所以地址空间只有2的32次方,约40亿个地址
  • IPv6采用128位地址:2001:0DB8:0000:0023:0008:0800:200C:417A,其中2001的取值范围是0-FFFF,16x4=64=2的16次方,所以IPv6有2的128次方,约3.4x10的38次方个地址,完全足够。
  • 有了 IP 地址和端口号以后,链路层将数据包的文本信息,转译成电子信号,然后通过电缆传输。在电缆的另一端的路由器,检查每个数据包中的目标地址,并确定将其发送到何处。
  • 最终数据包到达服务器以后,然后数据包从 TCP/IP 协议族的底部--链路层 开始向上运行。当数据包向上通过协议族时,客户端添加的所有路有数据,例如 IP地址和端口号都将从数据包中剥离出来。
  • 当数据到达栈顶时,数据包已经重新恢复成最初的形式。通过端口号可以将数据传递给,当前服务器 监听该端口的应用程序,应用程序根据客户端发来的请求数据做出反应。比如我们想获取 index.html,服务器就把 index.html 的数据通过刚才的方式返回给你的电脑。 image.png

互联网的历史

1989年,Tim Berners-Lee博士发表了一篇论文,提出了在互联网上构建超链接文档系统的构想,也就是现代 web 的雏形 - World Wide Web。同年,用于统一互联网传输协议的 HTTP 标准诞生了。HTTP的全称为 HyperText Transfer Protocol 超文本传输协议

HTTP的历史

HTTP/0.9:受限于当时的运算性能和网络带宽,HTTP/0.9 只允许 GET 请求,短连接,同时传输内容仅限纯文本。

HTTP/1.0:1993年,随着人们对图文混合内容的需求越来越多,Apache 诞生,jpeg和mp3诞生,HTTP/1.0标准诞生:

  1. 增加了 HEAD、POST 等新方法
  2. 增加了响应状态码
  3. 引入了协议版本号
  4. 引入了 Header 概念
  5. 传输的数据不再仅限于文本

HTTP/1.1:1995年,网景 Netscape Navigator 和微软的 Internet Explorer 同台竞争,1999年,HTTP/1.1 标准诞生:

  1. 增加了 PUT、DELETE 等新方法
  2. 引入了缓存概念
  3. 引入了长连接概念
  4. 引入 chunked 数据分块,利于大文件断点续传
  5. 强制要求 HOST 头,引入互联网主机托管概念

HTTP/2.0:因为1.1版本存在连接慢,无法跟上网络迅猛发展的原因,GOOGLE 在自家浏览器 Chrome 上推出了 SPDY 协议,ISO 组织以此为基础发布了 HTTP/2.0标准。2.0标准充分考虑了目前的高速带宽、安全性、移动互联网等实际情况:

  1. 二进制协议,不再是纯文本
  2. 引入并发请求
  3. 压缩 HEAD,减少数据传输量
  4. 允许服务器主动向客户端推送数据
  5. 增强安全性,要求加密通信

HTTP/3.0:2018年,ISO 在谷歌发布的 QUIC 协议基础之上,发布了 HTTP/3.0 标准。

HTTP到底是什么

HTTP: HyperText Transfer Protocol 超文本传输协议 HTTP 实际上是一个在计算机的世界里,专门用来在两点之间传输数据的约定和规范。 (允许有中间人)

HTTP传输的是什么东西

HTTP传输的内容是一些文字、图片、音乐和视频,这些东西被技术人员统称为超文本。


版权说明:该学习笔记内容来源于b站@Luuuuke的动画视频《10分钟带你了解互联网是如何运作的》,感谢Luuuuke深入浅出的讲解以及精心的制作!