该系列主要作为曾经的纯前端,对后台和底层的一些弥补,涉及进程、网络通信,以及对 node.js 和相关框架的学习。这一节我们来补充网络通信和 TCP、IP 协议、DNS 相关知识。
# 网络通信
前面一节我们学习了进程、线程等,以及进程之间的通信,这节我们来了解一下网络通信。
# 网络进程间通信
网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。为此,首先要解决的是网间进程标识问题。
同一主机上,不同进程可用进程号(process ID)唯一标识。但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。
TCP/IP 协议族可解决该问题:
- 网络层的
“ip地址”
可以唯一标识网络中的主机 - 传输层的
“协议 + 端口”
可以唯一标识主机中的应用程序(进程)
这样利用三元组(ip 地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
网络进程间通信,是需要依赖 TCP/IP 协议的,这里我们来简单介绍一下。
# TCP/IP 协议族
TCP/IP 提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。
它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议套组下的各种协议,依其功能不同,被分别归属到这四个层次结构之中,常被视为是简化的七层 OSI 模型。
# TCP/IP 协议分层
- 数据链路层
负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网、ADSL 等等。 - 网络层
负责分配地址和传送二进制数据(选路线),主要协议是 IP 协议。 - 传输层(TCP/UDP)
传输层负责传送文本数据,主要协议是 TCP 协议。
传输层的协议,能够解决诸如端到端可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。
在 TCP/IP 协议组中,传输协议也包括所给数据应该送给哪个应用程序。 - 应用层(FTP/DNS 域名系统/HTTP 协议等)
负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议是 HTTP、FTP 等。
该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。
# IP 协议
主要内容是把各种数据包准确无误地传递,包括 ARP 协议、RARP 协议等。
# TCP 协议
# 非可靠的 UDP
UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输。事实上,该协议不能保证数据准确无误地到达目的地。
UDP 在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用 UDP。QQ 短消息使用 UDP 协议发送消息。
# 可靠的 TCP
TCP 的目的是提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。TCP 在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。
为确保正确地接收数据,TCP 要求在目标计算机成功收到数据时发回一个确认(即 ACK)。如果在某个时限内未收到相应的 ACK,将重新传送数据包。即传说中的“三次握手”。
如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。
# 三次握手
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。
三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在 socket 编程中,客户端执行 connect()时,将触发三次握手:
完整的过程如下:
# DNS
说到网络通信,又怎能少了 DNS 呢?
DNS 的全称是 Domain Name System。它负责把 FQDN(就是以"."分隔结尾的名字)翻译成一个 IP。
让用户电脑和服务器(网页存放电脑)连接起来并不是靠域名进行,网络上计算机之间实现连接是通过每台计算机在网络中拥有的惟一的 IP 地址来完成的。
DNS 速度优化是网站优化 SEO 中的一部分,优化 DNS 解析就必须了解 DNS 解析原理及过程。
当用户访问我们网站一个网页时,他需要经过以下步骤:
- 找到这个网页的存放服务器;
- 服务器将用户的请求信息接入;
- 服务器通过文件路径(URL)查找用户请求网页;
- 用户将该网页内容下载到自己电脑上。
我们所讲的 DNS 解析主要是第一个步骤,即让用户通过 URL 找到文件存放的服务器。
DNS 解析主要有递归查询,就是在某个 DNS 服务器缓存中查找不到相应的域名与 IP 地址对应关系时,自动跳转到到下一步骤通过下一个 DNS 服务器进行查找。
# 参考
- Wiki-TCP/IP 协议族 (opens new window)
- 《TCP 三次握手四次挥手详解》 (opens new window)
- 《DNS 解析过程原理【深入浅出详解】》 (opens new window)
- 《DNS 服务原理详解》 (opens new window)
- 《前端阶段性总结之「网络协议基础」》 (opens new window)
# 结束语
这一节主要进行了网络间通信以及 TCP/IP 协议,以及 DNS 的介绍,关于 TCP/IP 相关的有幸当年在第一家公司学过,虽然也忘得差不多了。