网络的全貌
浏览器和 Web 服务器之间的交互却很简单,概括如下: (1) 浏览器向 Web 服务器发送请求; (2) Web 服务器根据请求向浏览器发送响应;
要实现应用程序之间的交互,我们需要一个能够在浏览器和 Web 服务器之间传递请求和响应的机制。网络是由很多计算机等设备相互连接组成的,因此在通信的过程中需要确定正确的通信对象,并将请求和响应发送给它们。请求和响应在传递的过程中可能会丢失或损坏【请求和响应本质都是电信号和光信号,这些信号可能会因收到杂音等干扰而损坏】。所以需要一种机制,无论遇到任何情况都能够将请求和响应准确无误地发送给对方。 这种机制是由操作系统中的网络控制软件,以及交换机、路由器等设备分工合作来实现的,它的基本思路是将数字信息分割成一个一个的小块,然后装入一些被称为“包”(Packet) 的容器中来运送。大家可以这样理解:包相当于信件或者包裹,而交换机和路由器则相当于邮局或快递公司的分拣处理区。包的头部存有目的地等控制信息,通过许多交换机和路由器的接力,就可以根据控制信息对这些包进行分拣,然后将它们一步一步地搬运到目的地。 无论是家庭和公司里的局域网,还是外面的互联网,它们只是在规模上有所不同,基本的机制都是相同的。
前面介绍的这个负责搬运数字信息的机制,再加上浏览器和 Web 服务器这些网络应用程序,这两部分就组成了网络。
URI / URL
[!quote] URI URI 就像是给一个资源起了个名字,表明它是什么,但是并没有告诉我们怎么找到它
[!quote] URL URL 不仅标识了资源,还详细说明了找到这个资源的路径和方法,形如“http://”、“ftp://”、“file://”、“mailto://”等开头的链接,URL 的开头就是告诉浏览器使用哪种功能来访问相应的数据
http://user:password@www.glasscom.com:80/dir/file1.htm会包含服务器的域名,文件的路径ftp://user:password@ftp.glasscom.com:21/dir/file1.htmfile://localhost/c:/path/file1.zipmailto:tone@glasscom.com会包含收件人的邮件地址
URL 省略文件名
在大多数的 Web 服务器中,当你访问一个目录而不是具体的文件时,服务器会自动寻找并返回那个目录下的默认文件
http://www.lab.glasscom.com/dir/这种时候服务器就会访问/dir/index.html,或/dir/default.htmhttp://www.lab.glasscom.com/这时会访问服务器根目录下的index.html,或者default.htm文件
URL 的层次结构
通过
.来分割层级,越靠右的层级越高
例如 www.nikkeibp.co.jp
jp 代表分配给日本这个国家的域,这个域的下一级又有很多域,co 就是其中之一;
co 代表公司的域,公司有很多公司,nikkeibp 就是其中之一;
nikkeibp 代表分配给这家公司的域TCP / IP
[!quote] TCP / IP TCP / IP 就是由一些小的子网【由集线器连接起来的几台计算机】,通过路由器连接起来组成一个大的网络
发送者发出的消息首先经过子网中的集线器 A,转发到距离发送者最近的路由器 A上,接着这个路由器 A会根据目的地的位置判断要传送的下一个路由器 B【传送到下一个子网的集线器 B,再到路由器 B】……直到到达目的地
唯一标识
💙 IP 地址
[!quote] IP 地址 IP 地址 是在同一网络下可以唯一标识的标识号,由网络号+主机号组成,
例如10.11.12.13按照地址长度划分 :
- IPv4 :用 32 个 bit 以点分十进制表示法表示,
例如:11000000 10101000 00000001 0100010,表示成 192.168.1.66- IPv6
IPv4 :
- A 类地址
一类地址:范围是 0.0.0.0 到 127.255.255.255,支持大量主机,通常用于大型网络 - B 类地址
二类地址:范围是 128.0.0.0 到 191.255.255.255,适用于中型网络 - C 类地址 :范围是 192.0.0.0 到 223.255.255.255,适用于小型网络
- D 类地址 :范围是 224.0.0.0 到 239.255.255.255,用于多播,而不是分配给单个主机
- E 类地址 :范围是 240.0.0.0 到 255.255.255.255,预留给未来使用
IPv6 :
- 全球单播地址 :这是 IPv6 中最常用的地址类型,类似于 IPv4 的公网地址。全球单播地址的前缀是 2000::/3
- 链路本地地址 :用于同一链路内的通信,前缀是 fe80::/10。这些地址无法路由到全球互联网
- 多播地址 :用于多播通信,前缀是 ff00::/8,类似于 IPv4 的 D 类地址
- 任播地址 :允许数据包被发送到距离源最近的一个目的地节点,IPv6 中每个任播地址都可以是单播地址的一部分
[!faq] 如何解决 IP 地址不足的问题 ? 将公司内网分成:
- 对互联网开放的服务器【配公有地址】
- 公司内部设备【配私有地址】
现在即使 A 公司的某台服务器和 B 公司的某台客户端具有相同的 IP 地址也没关系
由于网络号和主机号的具体结构是不固定的,所以我们要引入子网掩码来区分
子网掩码
[!quote] 子网掩码 子网掩码 表示网络号与主机号之间的边界
表示方式:
- 十进制加分隔号
10.11.12.13/255.255.255.0 - 网络号比特数
10.11.12.13/24
MAC 地址
MAC 地址的结构 :MAC 地址长 48 bit,有两种写法:
00-80-C8-2D-82-EA00:80:C8:2D:82:EA
如何知道目标的 MAC 地址 ? :
- 通过 ARP 协议查询目标路由器的 MAC 地址:在以太网中,会通过广播把包发给连接在以太网中的所有设备。ARP 会向所有设备提问“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”,如果对方存在则会回应;如果路由表设置不正确,则只能认为对方不存在,包的发送就会失败
端口号
[!quote] 端口号 端口号 是唯一能标识一台计算机上的应用程序的标识号。由两个字节表示的整数组成,所以取值范围是
0 - 65536【其中0 - 1023用于一些知名的网络服务和应用】
如何标识一个网络连接 ?
看五个信息:
- 协议类型 :你是 TCP ,还是 UDP
- 发送方的 IP 地址
- 发送方的端口号
- 目的 IP 地址
- 目的端口号
也就是说,这五个信息只要有一个不同,那就不是同一个网络连接
DNS 服务器
[!quote] DNS DNS 是域名服务系统,将 IP 地址与域名进行关联
缓存机制
每次查询 IP 地址都要从根域服务器开始那就效率太低了,所以 DNS 服务器里会有缓存,可以记住之前查询过的域名,下次查询可以快速响应
- 缓存信息是有有效期的:由于原本的域名注册信息会改变,这就会导致缓存里的注册信息是错误的
一台 DNS 只能存储一个,或多个完整的域
比如
.com域底下分了多个层级,例如.example,.example这个域【不能这台存一点.example,另一台又存一点.example】
TCP 协议
[!quote] TCP
TCP 是面向连接的通信协议【先建立联系,再传输数据,必须明确客户端与服务器端,由客户端向服务器端发送连接请求,连接的创建需要经过三次握手】
- 优点 【
用于上传文件,下载文件,浏览网页】
- 保证数据传输的安全
三次握手:若在握手过程中某个阶段莫名中断,会再次以相同的顺序发送相同的数据包
- 第一次握手:发送端首先发送一个带 SYN【
synchronize】标志的数据包给对方; - 第二次握手:接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息;
- 第三次握手:发送端再回传一个带 ACK【
acknowledgement】标志的数据包,代表握手结束;
如何建立管道和销毁管道

[!quote] 套接字 套接字 就是管道两端的数据出入口
- 首先服务器先创建套接字,之后等待客户端连接管道;之后客户端也创建套接字,然后从该套接字延伸管道,连接到服务器端的套接字上
- 当数据传送完毕之后,断开管道可以由任何一方发起,之后套接字随之销毁
TCP 是如何确定对方是否收到信息的 ?

TCP / IP 包
[!quote] TCP / IP 包
- IP 头部:包含自己网卡的 IP 地址,目的地的 IP 地址,协议号【包的内容类型】……
- MAC 头部:包含发送方和接收方的 MAC 地址,以太类型【IP 协议,ARP 协议,IPv6 协议】
包是如何传输的 ?

- 网络包中有下一个路由器 R1 的 MAC 地址,有目的地服务器 S 的 IP 地址;
- 首先网络包会经过集线器,集线器通过包中的 MAC 头部信息,查找以太网表知道这个包该发往哪个路由器;
- 传输到路由器 R1后根据 IP 表,知道要发往的下一个路由器的位置,但是为了发过去我们还需要查出下一个路由器 R2的 MAC 地址,然后改写 MAC 头部;
- …………;
- 直到送达目的地;
UDP 协议
[!quote] UDP UDP 是无连接通信协议【在数据传输时,数据的发送端和接收端不建立逻辑连接,当一台计算机向另一台计算机发送数据时,发送端不会确认接受端是否存在,接受端也不会向发送端反馈】
- 优点 【
用于音频,视频,普通数据传输】- 消耗资源小
- 通信效率高
- 缺点 【
不用于传输重要数据】- 不能保证数据的完整性
需要穿越防火墙传输音频和视频数据时,我们会使用 TCP 协议【因为 UDP 经常会被防火墙阻止】
什么情况下使用 UDP 协议 ?
- 数据很短,用一个包就能装得下的情况下:因为只有一个包,就不用考虑哪个包未送达了,就算重发也就是重发一个包【例如,DNS 查询】
- 重发数据也没什么意义时:例如,发送音频和视频数据时,因为音频和视频必须在短时间内送达,不然会引起卡顿掉帧,而 TCP 协议传输流程繁琐,而且音频和视频缺少某些包一般可以接受
以太网
[!quote] 以太网 以太网 是一种为多台计算机能够彼此自由和廉价地互相通信而设计的通信技术
- 自动协商以确定最优的传输速率:当两台设备通电并完成硬件初始化之后,就会开始用脉冲信号发送自己支持的速率【木桶效应】和工作模式【全/半双工】
IP 协议本身没有传输包的功能,包的实际传输要委托以太网来完成
以太网的进化历史
- 第一阶段:当一台计算机发送信号时,信号会通过网线流过整个网络,最终到达所有的设备

[!quote] 收发器 收发器 可以将不同网线之间的信号连接起来
第二阶段:信号依旧会发送给所有设备,但是将主干网线改成了中继式集线器【集线器】,将收发器网线改成了双绞线

第三阶段:

[!quote] 交换机 交换机 就是交换式集线器
局域网 LAN

设备
网卡
[!quote] 网卡 网卡 可能是计算机主板上的板卡,笔记本上的 PCMCIA 卡,或者是计算机主板上集成的芯片
网卡的内部结构

集线器
[!quote] 集线器 集线器 就是按照以太网规则传输包的设备,可以在子网中将网络包传输到下一个路由器,只有转发包的能力,不具备分析和处理数据包的能力
现在我们基本不使用集线器了,而是使用交换机
交换机
[!quote] 交换机 交换机 = 计算机 + 多块网卡 + 开启“混杂模式”【让网卡接收所有的包】+ 安装网络包转发软件
交换机中的 MAC 表是如何维护的 ?
- 当发送方向交换机发送包时,交换机会记录发送方的 MAC 地址和包进入交换机时的端口号,便以后要向该发送方发送包时,交换机可以快速反应
- MAC 表会在一段时间删除一些记录【防止终端设备移动产生问题】
网卡与交换机的区别
- 网卡本身具有 MAC 地址,而交换机的端口不具有 MAC 地址
- 网卡会根据 MAC 地址核对包是不是发给自己的,而交换机则接收所有的包并存放到缓冲区
交换机比集线器好在哪里 ?
- 交换机具有更好的性能和碰撞管理能力
- 交换机会根据 MAC 地址将包发送到正确的端口,而不是广播。从而减少了碰撞的可能性
- 交换机的端口速度和带宽远高于集线器
路由器
[!quote] 路由器 路由器 就是按照 IP 规则传输包的设备,路由器可以根据目标地址判断下一个路由器的位置
- 早期路由器 = 计算机 + 路由软件
路由器的内部结构

- 转发模块:负责判断包的转发目的地,类似于 ==IP 模块==
- 端口模块:负责包的收发操作,类似于==网卡==
[!quote] 公有地址 原来的固定地址,可以和互联网直接通信
[!quote] 私有地址 私有地址 是在互联网上未被注册的 IP 地址,用于组织内部的网络,不能直接用于互联网通信。当需要与互联网上的设备通信时,需要通过网络地址转换技术【NAT】将私有地址转换为公有地址
私有地址的范围:
10.0.0.0 ~ 10.255.255.255172.16.0.0 ~ 172.31.255.255192.168.0.0 ~ 192.168.255.255
路由器功能 - 地址转换
地址转换:在转发网络包时对 IP 头部 中的 IP 地址 和 端口号进行改写
假设访问的是 Web 服务器
- 首先,TCP 连接操作的第一个包被转发到互联网时,会将发送方 IP 地址从私有地址改写成公有地址
- 接着,地址转换设备会随机生成一个空闲端口,并改写前私有地址的端口号
- 最后,将改写前和改写后的 地址 和 端口号 作为一组对应的记录保存在地址转换设备内部的表中

路由器功能 - 包过滤
在队报进行转发时,根据 MAC 头部,IP 头部,TCP 头部的内容,按照事先设置好的规则决定是 转发/丢弃 这个包
家用路由器已经集成了集线器,交换机的功能
[!question] 交换机与路由器的区别
- 交换机是基于 以太网 设计的
- 路由器是基于 IP 设计的,路由器的每个端口都有MAC 地址和IP 地址
发送者发出的消息首先经过子网中的集线器 A,转发到距离发送者最近的路由器 A上,接着这个路由器 A会根据目的地的位置判断要传送的下一个路由器 B【传送到下一个子网的集线器 B,再到路由器 B】……直到到达目的地