🎨
Notes
  • 持续更新中...
  • articles
    • browser
      • 深入理解现代浏览器 - 导航
      • 深入理解现代浏览器 - 架构
      • 深入理解现代浏览器 - 交互
      • 深入理解现代浏览器 - 渲染器进程
    • dsa
      • DSA - 并查集
      • DSA - 哈希表
      • DSA - AVL 树
      • DSA - 二叉树
      • 快速选择
      • Big O 算法复杂度
      • DSA - 栈和队列
      • DSA - 前缀树 Trie
      • DSA - 图
      • DSA - 链表
      • DSA - 递归
    • typescript
      • TypeScript 学习笔记 - 任意属性 (Indexable Types)
      • 力扣的 TypeScript 面试题
      • TypeScript 学习笔记 - as const
      • TypeScript 学习笔记 - infer
    • network
      • Internet Protocol (IP)
      • 计算机网络基础
      • 如何分辨同源和同站
      • DNS 如何查询 IP 地址?
    • vue
      • Nuxt.js 入门
      • 从零实现一个 Mini Vue
      • 从零实现一个简单的 VDOM 引擎
      • 从零实现一个响应式状态管理
    • sorting
      • 排序 - 归并排序
      • 排序 - 冒泡排序
      • 排序 - 选择排序
      • 排序 - 计数排序
      • 排序 - 插入排序
    • compile
      • Compiler and Interpreter
      • Just-In-Time (JIT) Compilers
      • 编译流程
    • others
      • 什么是上下文无关语法
      • 如何在终端打印出有颜色的字
    • dev-ops
      • github-actions
        • GitHub Action 简介
        • GitHub Actions for CI
    • workflow
      • 用 Node 写一个 cli
      • 如何规范 git commit 信息
      • 如何监听 git hooks
      • 如何规范代码风格 - prettier
      • 如何发布一个 npm package
      • 如何规范代码质量 - eslint
    • design-pattern
      • 代理模式
      • 单例模式
      • 策略模式
    • security
      • 点击劫持
      • CSP 内容安全策略
    • javascript
      • 尾调用优化
      • 4种常见的内存泄漏及解决方法
    • unit-test
      • Test Vuejs Application - Chapter 2
      • Test Vuejs Application - Chapter 1
      • Vue Unit Test Intro
    • performance
      • HTTP 缓存
      • 如何优化图片资源
Powered by GitBook
On this page
  • 什么是计算机网络?
  • 怎样把计算机连接起来?
  • 直接连接
  • 间接连接
  • 计算机如何进行通信?
  • 小结

Was this helpful?

  1. articles
  2. network

计算机网络基础

PreviousInternet Protocol (IP)Next如何分辨同源和同站

Last updated 4 years ago

Was this helpful?

什么是计算机网络?

维基百科上的定义是:

计算机网络(英语:computer network),通常也简称网络,是指容许节点分享资源的数字电信网络。在电脑网络,电脑设备会透过节点之间的连接(数据链路)互相交换数据。

用大白话来说,就是将两台以上的计算机连接起来,使得它们可以相互通信。

怎样把计算机连接起来?

直接连接

最简单的情况,就是用一根线把需要进行通信的两台计算机连接起来,这根线加上这两台计算机就组成了一个简单的网络。

这根连接线一般是电缆、光纤之类的媒体介质,一般我们把它叫做链路 link,而网络中的计算机一般叫做节点 node。

这种用一个链路直接连接两台计算机的方式叫做点对点 point-to-point连接,还有另一种连接方式,多台计算机可以连接到同一个链路上,叫做多路访问 multiple-access,比如 Wi-Fi。

但这种连接方式有两个限制,一是网络可覆盖的范围有限,二是可连接的节点数有限,所以一般这种连接方式都是用于最后一里 last mile连接终端用户和互联网的。

间接连接

当然,计算机之间两两通过链路来连接是可以实现相互通信的目的,但这只适用于网络中只有少数几台计算机的情况。

如果要通信的计算机很多,那每台计算机上的连接线就会多到难以管理。

这还是只有几台计算机的情况,连接线看起来已经很乱了,想象下如果现实中互联网上的计算机是用这种方式连接的,那情况就有点难以控制了。

但幸好,要实现两台计算机互相通信,不一定要用链路直接连接它们,我们还可以通过一个中间节点来把它们连接起来。

像这样,每个节点都连接了一个或者多个链路,而那些连接了两个以上链路的节点(图中的 Router)主要是负责把传进来的消息再转发出去,这些 Router 一起组成了一个交换网络 switched network(这是一个网络中的网络,网络是可以嵌套的)。

图中的云朵把节点划分为两种:

  • 云朵中的节点:负责转发消息,一般叫做交换机 switch。

  • 云朵外的节点:它们就是想要向外发送消息或者想要从外部获取消息的计算机设备,一般叫做主机 host。

还有一种连接多台计算机设备的方式,我们可以把交换网络抽象出来,用一个节点将它们两两连接,这样就形成了互联网 internet。而连接两个网络的节点一般叫做路由 router或者网关 gateway,它们的功能和上文提到的交换机一样,负责把从一个网络传进来的消息转发给另一个网络。

互联网自己本身也是一个网络,所以它们也可以被抽象出来,然后通过节点连接起来,形成一个更大的网络,总而言之,这可以是一个递归的过程,所以理论上,我们构建的网络可以是无限大的。

计算机如何进行通信?

现在我们把所有计算机都通过某种直接或间接的方式连接起来了,但我们还没有实现主机对主机 host-to-host的连接。假设计算机 A 想要向计算机 B 发送一个消息,要如何在网络中找到通往计算机 B 的那条路线把消息传输过去呢?

解决的办法就是给网络中的每台主机都分配一个独一无二的地址 address,当源机想要向目的机发送消息时,它会同时把消息和目的机的地址发送出去,如果源机和目的机不是直接连接的话,网络中的交换机和路由就会根据指定的地址来决定如何把消息转发给出去,最后找到目的机并把消息转发给它。这个根据指定地址决定如何转发消息的过程就叫做路由 routing。

小结

网络可以递归地定义为由两个或以上节点通过链路连接组成或者由两个或以上网络通过节点连接组成。