Skip to content

网络连接过程

OSI: 7层模型,从上到下

  • 应用层:为应用程序提供服务
  • 表示层:数据格式化,数据加密
  • 会话层:建立,管理和维护回话
  • 传输层:建设、管理和维护端到端的连接
  • 网络层:IP选址和路由选择
  • 数据链路层:提供访问介质和链路管理
  • 物理层:物理层

TCP/IP: 5层模型

  • 应用层:TELENET, SSH, HTTP, SMTP, POP, SSL/TLS, FTP, MIME, HTML, SNMP, MIB, SIP, RTP
  • 传输层:TCP,UDP
  • 网络层:交换机(IP,ICMP,RIP,IGMP)
  • 数据链路层:网卡
  • 物理层:集线器,中集线,双绞线

TELENET与SSH协议都是客户端连接终端的协议,SSH加密,TELENET不加密.

关键字

  • 子网
  • 子网掩码
  • 主机号
  • IP
  • 网段
  • MAC地址
  • tcp连接三次握手
  • 集线器
  • 交换机
  • 路由器

浏览器生成的消息

浏览器生成 HTTP 请求消息

  • 浏览器先要解析 URL
  • 文件路径
  • HTTP 基本原理
    • 请求方法
    • 请求头字段
    • 响应状态码

向 DNS 服务器查询 Web 服务器的 IP 地址

  • ip地址
    • 子网
    • 主机号
    • 子网掩码
  • Socket 库提供查询 IP 地址的功能(Socket 库是用于调用网络功能的程序组件集合)
    • web浏览器调用操作系统库socket库
    • 通过解析器向 DNS 服务器发出查询

DNS 查询

  • 域名层级
  • DNS服务器层级
  • DNS缓存加速

委托协议栈发送消息

  • 创建套接字(创建套接字阶段)
  • 将管道连接到服务器端的套接字上(连接阶段)
  • 收发数据(通信阶段)
  • 断开管道并删除套接字(断开阶段)

http

头中的重要字段

头字段类型Http版本含义
通用头:适用于请求和响应消息的头字段
Datehttp1.0/http1.1表示请求和响应生成的日期
Pragmahttp1.0/http1.1表示数据是否允许缓存的通信选项
Cache-Controlhttp1.1控制缓存的相关信息
Connectionhttp1.1设置发送响应之后 TCP 连接是否继续保持的通信选项
Transfer-Encodinghttp1.1表示消息主体的编码格式
Viahttp1.1记录途中经过的代理和网关
请求头:用于表示请求消息的附加信息的头字段
Authorizationhttp1.0/http1.1身份认证数据
Fromhttp1.0/http1.1请求发送者的邮件地址
If-Modified-Sincehttp1.0/http1.1处理缓存字段:如果希望仅当数据在某个日期之后有更新时才执 行请求,可以在这个字段指定希望的日期。
Refererhttp1.0/http1.1当通过点击超级链接进入下一个页面时,在这里会记录下上一个页面的 URI
User-Agenthttp1.0/http1.1客户端软件的名称和版本号等相关信息
Accepthttp1.0/http1.1客户端可支持的数据类型(Content-Type),以 MIME 类型来表示
Accept-Charsethttp1.0/http1.1客户端可支持的字符集
Accept-Encodinghttp1.0/http1.1客户端可支持的编码格式(Content-Encoding), 一般来说表示数据的压缩格式
Accept-Languagehttp1.0/http1.1客户端可支持的语言,汉语为 zh,英语为 en
Hosthttp1.1接收请求的服务器 IP 地址和端口号
If-Matchhttp1.1参见 Etag
If-None-Matchhttp1.1参见 Etag
If-Unmodified-Sincehttp1.1当指定日期之后数据未更新时执行请求
Rangehttp1.1当需要只获取部分数据而不是全部数据时,可通过这个字段指定要获取的数据范围
响应头:用于表示响应消息的附加信息的头字段
Locationhttp1.0/http1.1表示信息的准确位置。当请求的 URI 为相对路径 时,这个字段用来返回绝对路径
Serverhttp1.0/http1.1服务器程序的名称和版本号等相关信息
WWW-Authenticatehttp1.0/http1.1当请求的信息存在访问控制时,返回身份认证用的数据(Challenge 1)
Accept-Rangeshttp1.1当希望仅请求部分数据(使用 Range 来指定范围) 时,服务器会告知客户端是否支持这一功能
实体头:用于表示实体(消息体)的附加信息的头字段
Allowhttp1.0/http1.1表示指定的 URI 支持的方法
Content-Encodinghttp1.0/http1.1当消息体经过压缩等编码处理时,表示其编码格式
Content-Lengthhttp1.0/http1.1表示消息体的长度
Content-Typehttp1.0/http1.1表示消息体的数据类型,以 MIME 规格定义的数 据类型来表示
Expireshttp1.0/http1.1表示消息体的有效期
Last-Modifiedhttp1.0/http1.1数据的最后更新日期
Content-Languagehttp1.0/http1.1表示消息体的语言。汉语为 zh,英语为 en
Content-Locationhttp1.1表示消息体在服务器上的位置(URI)
Content-Rangehttp1.1当仅请求部分数据时,表示消息体包含的数据范围
Etaghttp1.1在更新操作中,有时候需要基于上一次请求的响应 数据来发送下一次请求。在这种情况下,这个字段 可以用来提供上次响应与下次请求之间的关联信息。 上次响应中,服务器会通过 Etag 向客户端发送一 个唯一标识,在下次请求中客户端可以通过 If- Match、If-None-Match、If-Range 字段将这个标识 告知服务器,这样服务器就知道该请求和上次的响 应是相关的。这个字段的功能和 Cookie 是相同的, 但 Cookie 是网景(Netscape)公司自行开发的规格, 而 Etag 是将其进行标准化后的规格

HTTP状态码

| 状态码 | 含义 | | 1xx | 告知请求的处理进度和情况 | | 2xx | 成功 | | 3xx | 表示需要进一步操作 | | 4xx | 客户端错误 | | 5xx | 服务器错误 |

DNS

ip地址

  • TCP/IP 的结构 img

TCP/IP 结构可以理解为由一些小的子网,通过路由器连接起来的一个大网络。子网可以理解为用集线器连接起来的计算机。可以将其看成一个单位,称为子网。将子网通过路由器连接起来,就形成了一个网络。

  • 路由器:一种对包进行转发的设备,在第 3 章有详细介绍
  • 集线器:一种对包进行转发的设备,分为中继式集线器和交换式集线器两种
  1. ip地址主体表示方式:10.11.12.13
  2. 采用ip地址主体相同的格式表示子网掩码的方法:10.11.12.13/255.255.255.0
  3. 采用网络号比特数来表示子网掩码的方法:10.11.12.13/24
  4. 表示子网的地址:10.11.12.0/24
  5. 表示子网内广播的地址:10.11.12.255/24
-十进制表示将左侧十进制转换成为比特
IP地址10.1.2.300001010.00000001.00000010.00000011
子网掩码255.255.255.011111111.11111111.11111111.00000000
网络号/主机号10.1.2/300001010.00000001.00000010/00000011

TIP

IP 地址的主机号 全 0:表示整个子网 全 1:表示向子网上所有设备发送包,即“广播”

socket库与dns解析

  • Socket 库是操作系统中的一种库,其中包含的程序组件,可以让其他的应用程序调用操作系统的网络功能。而解析器就是这个库中 的其中一种程序组件。Socket 库是用于调用网络功能的程序组件集合。

  • 在编写浏览器等应用程序的时候只需要。写上解析器的程序名称“gethostbyname”以及 Web 服务器 B的域名“www.xxx.com”就可以了,这样就完成了对解析器的调用.gethostbyname("www.xxx.com")

  • 解析器内部原理,

用电信号传输 TCP/IP 数据

协议栈

  • 创建套接字
  • 连接服务器
  • 收发数据
  • 从服务器断开连接并删除套接字
  • IP 与以太网的包收发操作
  • 用 UDP 协议收发数据的操作

流程图

img

  1. 最上面的部分是网络应用程序,浏览器、电子邮件客户端、Web 服务器、电子邮件服务器等程序. 它们会将收发数据等工作委派给下层的部分来完成。不同的应用程序收发的数据内容不同,但收发数据的操作是共通的。 应用程序下面是socket库

  2. 下面就是操作系统内部了,其中包括协议栈。协议栈的上半部分有 两块,分别是负责用 TCP 协议收发数据的部分和负责用 UDP 协议收发数 据的部分。像浏览器、邮件等一般的应用程序都是使用 TCP 收发数据的,而像 DNS 查询 等收发较短的控制数据的时候则使用 UDP。

  3. 在互联网上传送数 据时,数据会被切分成一个一个的网络包,而将网络包发送给通信对象的操作就是由 IP 来负责的,此外,IP 中还包括 ICMPA 协议和 ARPB 协议。 ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息,ARP 用 于根据 IP 地址查询相应的以太网 MAC 地址

套接字实体

套接字的实体就是通信控制信息。

  • 存放控制信息的内存空间:通信对象的 IP 地址、端口号、通信操作的 进行状态。
  • 在发送数据时,需要看一看套接字中的通信对象 IP 地址和端口号,以便向指定的 IP 地址 和端口发送数据。等待一定时间后发送丢失的数据。 套接字中记录了用于控制通信操作的各种控制信息,协议栈则需要根据这些信息判断下一步的行动,这就是套接 字的作用。

调用socket时的操作

消息收发的操作

img

连接服务器

  • 当执行数据收发操作时,我们还需要一块用来临时存放 要收发的数据的内存空间,这块内存空间称为缓冲区,它也是在连接操作 的过程中分配的

  • 网络包中没有实际的数据,只有控制信息,这些控 制信息位于网络包的开头,因此被称为头部。

tcp头部格式

img

客户端与服务器之间交换的控制信息

img

连接操作的实际过程

ip模块

这个过程是从应用程序调用 Socket 库的 connect 开始的。

connect(< 描述符 >, < 服务器 IP 地址和端口号 >, ...)

tcp模块(3次握手)

  • 客户端:在 TCP 头部中设置发送方和接收方端口号以及 SYN 比特。

  • 服务端:返回响应时还需要将 ACK 控制位设为1,表示已经收到,服务器 TCP 模块会将 TCP 头部传递给 IP 模块,并委托 IP 模块向客户端返回响应。

  • 客户端:网络包就会返回到客户端,通过 IP 模块到达 TCP 模块,通过 TCP 头部的信息确认连接服务器的操作是否成功,如果 SYN 为 1 则表,示连接成功,这时会向套接字中写入服务器的 IP 地址、端口号等信息,同时还会将状态改为连接完毕。客户端也需要将 ACK 比特设置为 1 并发回服务器,告诉服务器刚才的响应包已经收到。

  • 服务器:收到这个返回包之后,连接操作才算全部完成。

只要数据传输过程在持续,也就是在调用 close 断 开之前,连接是一直存在的。建立连接之后,协议栈的连接操作就结束了,也就是说 connect 已经执行完毕,控制流程被交回到应用程序。

将 HTTP 请求消息交给协议栈

数据收发操作是从应用程序调用 write 将要发送的数据交给协议栈开始的。协议栈并不关心应用程序传来的数据是什么内容。应用程序在调用 write 时会指定发送数据的长度,在协议栈看来,要发送的数据就是一定长度的二进制字节序列而已。

一次将多少数据交给协议栈 是由应用程序自行决定的,协议栈并不能控制这一行为。因此需要在数据积累到一定量时再发送出去。

根据下面几个要素来判断需要发送多少个包:

  1. 第一个判断要素是每个网络包能容纳的数据长度
  2. MTU 表示一个网络包的最大长度,在以太网中一般是 1500 字节(图 2.5)
  3. MSS:除去头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

img

另一个判断要素是时间。当应用程序发送数据的频率不高的时候,如果每次都等到长度接近 MSS 时再发送,可能会因为等待时间太长而造成发送延迟,这种情况下,即便缓冲区中的数据长度没有达到 MSS,也应该果 断发送出去。为此,协议栈的内部有一个计时器,当经过一定时间之后, 就会把网络包发送出去。

程序指定不等待填满缓冲区直接发送,则协议栈就会按照要求直接发送数据。

对较大的数据进行拆分

HTTP 请求消息一般不会很长,一个网络包就能装得下,但如果其中要提交表单数据,长度就可能超过一个网络包所能容纳的数据量,比如在博客或者论坛上发表一篇长文就属于这种情况。

应用程序数据的拆分发送

img

使用 ACK 号确认网络包已收到

序号和 ACK 号的用法

img

数据双向传输时的情况

img

序号和 ACK 号的交互

img

TCP 采用这样的方式确认对方是否收到了数据,在得到对方确认之前,发送过的包都会保存在发送缓冲区中。如果对方没有返回某些包对应的 ACK 号,那么就重新发送这些包。

网卡、集线器、路由器都没有错误补偿机制,一旦检测到错误 就直接丢弃相应的包。应用程序也是一样,因为采用 TCP 传输,即便发生 一些错误对方最终也能够收到正确的数据,所以应用程序只管自顾自地发 送这些数据就好了

不过,如果发生网络中断、服务器宕机等问题,那么 无论 TCP 怎样重传都不管用。这种情况下,无论如何尝试都是徒劳,因 此 TCP 会在尝试几次重传无效之后强制结束通信,并向应用程序报错。

根据网络包平均往返时间调整 ACK 号等待时间

  1. 返回 ACK 号的等待时间(这个等待时间叫超时时间)。
  2. 当网络传输繁忙时就会发生拥塞,ACK 号的返回会变慢,这时我们就 必须将等待时间设置得稍微长一点,否则可能会发生已经重传了包之后, 前面的 ACK 号才姗姗来迟的情况。
  3. 等待时间需要设为一个合适的值,不能太长也不能太短

使用窗口有效管理 ACK 号

ACK 号的这段时间,需要有效利用

方式对比

img

  1. 当接收方的 TCP 收到包后,会先将数据存放到接收缓冲区中
  2. 将数据块组装起来还原成原本的数据并传递给应用程序,如果这些操作还没完成下一个包就到下一个,下一个包也会被暂存在接收缓冲区中。
  3. 数据到达的速率比处理这些数据并传递给应用程序的速率还要快,那么接收缓冲区中的数据就会越堆越多,最后就会溢出。(避免:接收方需要告诉发送方自己最多能接收多少数据)

滑动窗口与接收缓冲区

img

  • ACK 与窗口的合并

  • 接收 HTTP 响应消息

IP 与以太网的包收发操作

网络包的结构

img

发送方、接收方和转发设备

img

路由器和集线器

  • 路由器根据目标地址判断下一个路由器的位置
  • 集线器在子网中将网络包传输到下一个路由

集线器是按照以太网规则传输包的设备,路由器是按照 IP 规则传输包的设备

  • IP 协议根据目标地址判断下一个 IP 转发设备的位置

  • 子网中的以太网协议将包传输到下一个转发设备

  • (a)MAC 头部(用于以太网协议)

  • (b)IP 头部(用于 IP 协议)

Ip头部格式

img

mac头部格式

img

  • MAC 地址是在网卡生产时写入 ROM 里的,只要将这个值读取出来写入 MAC 头部就可以了。
  • 设置发送方 IP 地址时, 我们已经判断出了从哪块网卡发送这个包,那么现在只要将这块网卡对应 的 MAC 地址填进去就好了。
  • 接收方所以先得搞清楚应该把包发给谁,这个只要查一下路由表 就知道了。在路由表中找到相匹配的条目,然后把包发给 Gateway 列中的 IP 地址就可以了。

通过 ARP 查询目标路由器的 MAC 地址

img

  • ARP 缓存的内存空间.先查询一下 ARP 缓存,如果其中已经保存 了对方的 MAC 地址,就不需要发送 ARP 查询,直接使用 ARP 缓存中的 地址,而当 ARP 缓存中不存在对方 MAC 地址时,则发送 ARP 查询.

mac地址

img

网卡

以太网结构图

img

以太网的三个特点

  • 将包发送到 MAC 头部的接收方 MAC 地址代表的目的地
  • 用发送方 MAC 地址识别发送方
  • 用以太类型识别包的内容

(以太网和英特网的差别)

  • 以太网是局域网
  • 英特网是具有全球性质的

将 IP 包转换成电或光信号发送出去

img

  • 网卡驱动程序会对硬件进行初始化操作,然后硬件才进入可以使用的状态
  • 控制以太网收发操作的 MAC 模块中设置 MAC 地址。
  • 网卡的 ROM 中保存着全世界唯一的 MAC 地址,这是在生产网卡时写入的,将这个值读出之后就可以对 MAC 模块进行设置,MAC 模块就知 道自己对应的 MAC 地址了

给网络包再加 3 个控制数据

网卡是如何将包转换成电信号并发送到网线中的,网卡驱动从 IP 模块获取包之后,会将其复制到网卡内的缓冲区中,然后向 MAC 模块发送发送包的命令

img

电信号和时钟信号

img

向集线器发送网络包

  • 半双工通信 发送和接收同时并行的方式叫作“全双工”

  • 双工通信 某一时刻只能进行发送或接收其中一种操作的叫作“半双工”

MAC 模块从报头开始将数字信息按每个比特转换成电信号,然后由 PHY, 或者叫 MAU 的信号收发模块发送出去。将数字信息转换为电信号的速率就是网络的传输速率,PHY(MAU)模块会将信号转换为可在网线上传输的格式。 MAC 模块将可转换为任意格式的通用信号发送给 PHY(MAU)模块,然后 PHY(MAU)模块 再将其转换为可在网线上传输的格式。

UDP协议的收发

和TCP协议相比UDP协议是不可靠的

UDP 头部中的控制信息

img

从网线到网络设备

通过网线传输 出去的包是如何经过集线器、交换机和路由器等网络设备,最终进入互联 网的。

信号在网线和集线器中传输

信号从计算机中流出之后,会在网线中经过集线器等设备前进。此时, 信号是如何在网线和集线器传输的?。信号在传输过程中会衰减,还会受到噪声干扰而失真,如何抑制这些影响?

每个包都是独立传输的

转发设备会根据包头部中的控制信息,在转发设备内部一个写有转发规则的表中进行查询,以此来判断包的目的地,然后将包朝目的地的方向进行转发。

局域网的简单结构

img

  • 以太网信号的本质是正负变化的电压,大 家可以认为网卡的 PHY(MAU)模块就是一个从正负两个信号端子输出信 号的电路。
  • 信号到达集线器的时候并不是跟刚发送出去的时候一模一样。 集线器收到的信号有时会出现衰减。
  • 信号在网线的传输过程中,能量会逐渐损失。网线越长,信号衰减就越严重。

双绞”是为了抑制噪声

  • 产生噪声的原因是网线周围的电磁波,当电磁波接触到金属等导体 时,在其中就会产生电流。

集线器将信号发往所有线路

以太网的基本架构 A 就是将包发到所有的设备,然后由设备根据接收方 MAC 地址来判断应该接 收哪些包,而集线器就是这一架构的忠实体现,它就是负责按照以太网的基本架构将信号广播出去。

交叉网线的使用

img

交叉网线

img

交换机的包装操作

交换机的设计是将网络包原样 转发到目的地.

交换机根据地址表进行转发

  • PHY(MAU)模块会将网线中的信号转换为通用格式,然后传递给 MAC 模块。
  • MAC 模块将信号转换为数字信息,然后通过包末尾的 FCS 校验错误,如果没有问题则存放到缓冲区中。

img

交换机的工作方式和网卡有一点不同。网卡本身具有 MAC 地址,并通过核对收到的包的接收方 MAC 地址判断是不是发给自己的,如果不是发给自己的则丢弃。交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。和网卡不同,交换机的端口不具有 MAC 地址。

MAC 地址表的维护

  • 第一种是收到包时,将发送方 MAC 地址以及其输入端口的号码写入 MAC地址表中。
  • 另一种是删除地址表中某条记录的操作,这是为了防止设备移动时产生问题。防止终端设备移动产生问题,只需要将一段时间不使用的过时记录从地址表中删除就可以了。

交换机会自行更新或删除地址表中的记录,不需要手动维护

特殊操作

  • 交换机发现一个包要发回到原端口时,就会直接丢弃这个包
  • 地址表中找不到指定的 MAC 地址,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端 口上,无论该设备连接在哪个端口上都能收到这个包。
  • 如果接收方 MAC 地址是一个广播地址 A,那么交换机会将包发送到除源端口之外的所有端口

不向源端口转发网络包

img

全双工模式可以同时进行发送和接收

  • 全双工模式是交换机特有的工作模式,它可以同时进行发送和接收操作,集线器不具备这样的特性。

  • 使用双绞线时,发送和接收的信号线是各自独立的。在双绞线中信号不会发生碰撞。

  • 网线连接的另一端,即交换机端口和网卡的 PHY (MAU)模块以及 MAC 模块,其内部发送和接收电路也是各自独立的,信号也不会发生碰撞

  • 在全双工模式下,无需等待其 他信号结束就可以发送信号,因此它比半双工模式速度要快。由于双方可以同时发送数据,所以可同时传输的数据量也更大,性能也就更高。

自动协商:确定最优的传输速率

自动切换工作模式的功能。这一功能可 以由相互连接的双方探测对方是否支持全双工模式,并自动切换成相应的工作模式。此外,除了能自动切换工作模式之外,还能探测对方的传输速率并进行自动切换。

交换机可同时执行多个转发操作

  • 交换机只将包转发到具有特定 MAC 地址的设备连接的端口,其他端口都是空闲的。
  • 当包从最上面的端口发送到最下 面的端口时,其他端口都处于空闲状态,这些端口可以传输其他的包。因此交换机可以同时转发多个包。
  • 相对地,集线器会将输入的信号广播到所有的端口,如果同时输入多个信号就会发生碰撞,无法同时传输多路信号,因此从设备整体的转发能力来看,交换机要高于集线器。

路由器的包转发操作

路由器和交换机是有区别的。因为路由器是基于 IP 设计的,而交换机是基于以太网设计的。

  • 转发模块负责判断包的转发目的地
  • 端口模块负责包的收发操作
  • 路由器转发模 块和端口模块的关系,就相当于协议栈的 IP 模块和网卡之间的关系
  • 路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方,端口还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。当转发包时,首先路由器端口会接收发给自己的以太网包,然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
  • 交换机只是将进来的包转发出去而已,它自己并不会成为 发送方或者接收方。
  • 路由器会忽略主机号,只匹配网络号。

img

路由聚合

路由聚合,多个子网会被合并成一个子网,子网掩码会发生 变化,同时,目标地址列也会改成聚合后的地址。

img

  • 根据目标地址和子网 掩码匹配到某条记录后,路由器就会将网络包交给接口列中指定的网络接口(即端口),并转发到网关列中指定的 IP 地址

路由表进行维护的方法有几种

  • 人手动维护路由记录
  • 根据路由协议机制,通过路由器之间的信息交换由路由器自行维护路由表的记录

路由器的包接收操作

  • 信号到达网线接口部分,其中的 PHY(MAU)模块和 MAC 模块将信号转换为数字信息,然后通过包末尾的 FCS 进行错误校验。
  • 如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包
  • 如果是就放到接收缓冲区中,否则就丢弃这个包
  • 如果包的接收方 MAC 地址不是自己,说明这个包是发给其他设备的,如果接收这个包就违反了以太网的规则。

查询路由表确定输出端口

  • 完成包接收操作之后,路由器就会丢弃包开头的 MAC 头部
  • MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。

找不到匹配路由时选择默认路由

  • 子网掩码 0.0.0.0 的意思是网络包接收方 IP 地址和路由表目标地址 的匹配中需要匹配的比特数为 0,换句话说,就是根本不需要匹配
  • 只要 将子网掩码设置为 0.0.0.0,那么无论任何地址都能匹配到这一条记录,这 样就不会发生不知道要转发到哪里的问题了。

包的有效期

TTL(Time to Live,生存时间)

  • 包每经过一个路由器的转发,TTL就会减 1,当这个值变成 0 时,就表示超过了有效期,这个包就会被丢弃。
  • 这个机制是为了防止包在一个地方陷入死循环

通过分片功能拆分大网络包

不同的线路和局域网类型各自能传输的最大包长度也不同,因此 输出端口的最大包长度可能会小于输入端口,即便两个端口的最大包长度相同,也可能会因为添加了一些头部数据而导致包的实际长度发生变化。 img

路由器的附加功能

路由器除了基本功能之外,还有一些附加功能。

地址转换

在内网中可用作私有地址的范围仅限 以下这些。

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

私有地址和公有地址分别管理

img

地址转换的基本原理

地址转换的基本原理是在转发网络包时对 IP 头部中的 IP 地址和端口号进行改写。

img

通过接入网进入互联网内部

看一看网络包是如何通过互联网接入路由器,最终进入互联网内部的

ADSL 接入网的结构和工作方式

互联网的整体架构

img

互联网的基本结构与家庭、公司网络一样,我们可以将互联网理解为家庭、公司网络的一个放大版。

  • 距离的不同和路由的维护方式,就是互联网与家庭、公司网络之间最主要的两个不同点。

接入网

指连接互联网与家庭、公司网络的通信线路。一般家用的接入网方式包括 ADSLB、FTTHC、CATV、电话线、ISDN 等,公司则还可能使用专线。接入网的线路有很多种类,我们无法探索所有这些线路,因此下面先介绍一个比较有代表性的例子——ADSL。

网络包形态的变化

img

ADSL Modem 将包拆分成信元

信号的调制

img

连接用户与互联网的接入网

从用户到电话局

光纤接入网(FTTH)

光纤是由一种双层结构的纤维状透明材质(玻璃和塑料)构成的,通过在里面的纤芯中传导光信号来传输数字信息。ADSL 信号是由多个频段的信号组成的,比较复杂,但光信号却非 常简单,亮表示 1,暗表示 0。

光纤的结构 img

光纤的通信原理

img

  • 数字信息并不能一下子变成光信号,先将数字信息转换成电信号,然后再将电信号转换成光信号。这里的电信号非常简单,1 用高电压表示,0 用低电压表示。
  • 将这样的电信号输入 LED、激光二极管等光源后,这些光源就会根据信号电压的变化发光, 高电压发光亮,低电压发光暗。

接入网中使用的 PPP 和隧道

互联网本来就是由很多台路由器相互连接组成的,因此原则上应该是 将接入网连接到路由器上。随着接入网发展到 ADSL 和 FTTH,接入网连接的路由器也跟着演进,而这种进化型的路由器就叫作 BAS。

PPP

PPP 拨号连接操作

img

PPPoE

PPPoE 是由传统电话拨号 上网上使用的 PPP 协议发展而来的,所以我们先来看一看 PPP 拨号上网的工作方式。

网络运营商的内部

POP 和 NOC

互联网内部概览

img

POP概览

img

跨越运营商的网络包

运营商之间的路由信息交换

img

路由信息交换的类型

img

服务器端的局域网

Web 服务器的部署地点

服务器位置

img

  • 第一种,网络包裸奔,不安全,
  • 防火墙可以对网络包进行安全检查
  • 数据中心通过高速线路直接连接到互联网的核心部分,当服务器访问量很大时这是非常有效的。

防火墙的结构和原理

地址转换和包过滤中用于设置规则的字段 img

包过滤的示例 img

  • 也可以通过端口号来限定应用程序是否可以通过
  • 从公司内网访问公开区域的规则
  • 从外部无法访问公司内网
  • 当网络包经过时,可以通过防火墙

通过将请求平均分配给多台服务器来平衡负载

性能不足时需要负载均衡

通过轮询的方式来指定访问服务器IP地址

DNS轮询

img

负载均衡器

img

缓存服务器工作流程

img

缓存服务器的三种部署方式

img

如何找到最近的缓存服务器

img

利用缓存服务器分担负载

Released under the MIT License.