# 网络是怎样连接的

How Networks Work

互联网很复杂，一旦断网了，想把问题找出来其实并不容易。比如，一种常见的故障：网页打不开，但是QQ能登录，而且还能聊天。

答案是 DNS 服务器地址设置不对。为什么 DNS 不对，QQ 可以正常登录呢？因为 QQ 是使用 IP 地址直接连接服务器的，所以 QQ 是一个排查 DNS 问题的参照物。

虽然这个问题在后面要展开的内容里是很简单的，但是如果向不大懂网络的朋友解释什么是 DNS，也得花点时间。

家里的路由器也不是简单的东西，如果自己用 RouterOS 自己搞一个类似家用路由器的电脑，其他电脑插上去就能上外网，这件事还真没那么容易。需要关注的问题中的列出一些关键的：

* 接在路由器上的电脑需要彼此能通信，这是个基本交换机的功能
* 接在路由器上的电脑要自动获取 IP 地址等配置，这需要 DHCP 服务器
* 连接外网的端口要单独配置它的 IP 地址，或者配置 PPP 连接，以及路由表
* 内网电脑要访问外网，需要配置网络地址转换（NAT）

家用路由器简单是因为厂商配置好了所有东西，当然人家就是赚这个钱的，用户花钱买个方便。

这部分内容的主线是从浏览器输入网址开始，到浏览器显示出内容这期间发生的事情。侧重实际的网络设备和软件的工作方式。

先粗略的看一下从浏览器输入网址开始到浏览器显示出内容这期间发生的事情，这里可能会有一些属于不加解释的提前出现。

## 网络的全貌

浏览器访问百度的例子

* 浏览器输入 `baidu.com`，按下回车后，即向一个地方索取这个网页的数据
* Web 服务器收到这个请求后给浏览器返回这些数据

浏览器获取数据后解析这些信息，显示在屏幕上。

**在应用程序的角度来讲**，互联网上的操作基本上都是这样的，和人对话很像，尽管思路简单，但是实现出来并不容易，还需要事无巨细的设计好所有功能。

<figure><img src="/files/nhxZPpMDtzSL0hT0j41S" alt="" width="800"><figcaption></figcaption></figure>

计算机在通信（请求和响应的传递）时，可能会出现数据丢失和损坏。因此还需要一种机制，把数据准确的发送出去。

这种机制是由操作系统中的**网络控制软件**，以及**交换机**、**路由器**等设备分工合作来实现。基本思路是将数字信息分割成一个一个的小块，装入“包”(Packet)中来运送。

包相当于快递包裹，而交换机和路由器则相当于快递公司的转运中心。包的头部存有目的地等控制信息，通过许多交换机和路由器（转运中心）的分拣和接力，将它们一步一步地搬运到目的地。

无论是家庭和公司里的局域网，还是外面的互联网，它们只是在规模上有所不同，基本的机制都是相同的。

数字信息的搬运机制，再加上浏览器和Web服务器这些网络应用程序，这两部分就组成了网络。

## 更细节的知识全貌

这一部分关注计算机网络的组成原理，和实际系统的软硬件结构。

计算机网络分成许多层。关注每一层的功能和提供的服务。每一层向上层提供接口，提供服务。每一层又调用下层接口使用下层服务。

理论是理论，实践则会以因特网为例子，对照着看。

例如，应用层的协议，支撑 web 的 http 协议，支撑 ftp 应用的 ftp 协议，传输电子邮件使用的 smtp 和 pop3 协议...

传输层，会介绍如何借助网络层提供的服务来是实现。还有一些协议，TCP,UDP。

TCP 是传输控制协议，好多东西都跑在这个协议上，UDP 是用户数据报协议。应用层有些应用对可靠性的要求比较高，比如说浏览器和服务器，逻辑上直接请求，物理上基于硬件，数据发出去要求对方原原本本收到。可靠：不出错、不乱序、不重复、不丢失。有些应用跑在UDP上，比如麦克风收集声音打包往外传，丢一小块问题也不是很大，对可靠性要求不高，对实时性要求很高。

这两个没有好坏之分，可靠也是要付出代价的，为了可靠TCP要发出去留副本，要编号，要确定，错了要重传，乱序还要排序。一些实时应用，为了可靠耽误了时间，实时多媒体应用，比如网络直播，卡顿是影响用户体验的，UDP更合适。

应用层在传输层之上，应用进程，两个远程的应用进程，msg 过去一个报文回来，应用层协议规定了两个进程交互遵守的协议，语法语义之类的。只要遵守协议，不同厂家的网卡路由器就可以一样使用。

传输层是在网络层提供的端到端的，主机到主机之间的连接。

## 关键字

* 浏览器、Web服务器、网址（URL）、HTTP、HTML、协议、URI、请求消息、解析器、Socket库、DNS服务器、域名
* TCP/IP、套接字、协议栈、IP地址、端口号、包、头部、网卡、网卡驱动、MAC地址、以太网控制器、ICMP、UDP
* 局域网（LAN）、双绞线、串扰、中继式集线器、MDI、MDI-X、交换式集线器、全双工、半双工、碰撞、自动协商、路由器、路由表、子网掩码、默认网关、分片、地址转换、公有地址、私有地址
* ADSL、FTTH、光纤、接入网、ADSL Modem集成式路由器、ATM、信元、正交振幅调制、分离器、DSLAM、宽带接入服务器、远程接入服务器、PPP、网络运行中心（NOC）、光纤、IX（lnternet eXchange，互联网交换）
* 防火墙、包过滤、数据中心、轮询、负载均衡器、缓存服务器、代理、代理服务器、内容分发服务、重定向
* 响应消息、多任务、多线程、虚拟目录、CGI、表单、访问控制、密码、数据格式、MIME

## 参考资料

* 网络是怎样连接的/(日) 户根勤著 周自恒译
* 计算机网络（第7版）/谢希仁编著
* 计算机网络:自顶向下方法（原书第7版）/(美) 詹姆斯·F. 库罗斯, 基思·W. 罗斯著 陈鸣译


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://embedded.xym.work/1_4_network.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
