计算机网络基础

334 阅读55分钟

前言

TCP/IP 协议的发明者、互联网之父温顿·瑟夫曾说过:既然你无法逃避接触 Internet,那么为何不去了解它并且使用它呢?

一、概述

1.1 计算机网络在信息时代的作用

  • 计算机网络已由一种 通信基础设施 发展成为一种重要的 信息服务基础设施
  • 计算机网络已经像水、电、煤气这些基础设施一样,成为我们 生活中不可或缺 的一部分。

1.2 因特网概述

1. 网络、互连网(互联网)和因特网

  • 网络(Network)由若干 结点(Node)和连接这些结点的 链路(Link)组成。 image.png
  • 多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因此,互联网也可以称为 “网络的网络(Network of Networks)” image.png
  • 因特网(Internet)是世界上最大的互连网络(用户数以亿计,互连的网络数以百万计)。它是当前全球最大的、开放的、由众多网络相互连接而成的特定计算机网络,它采用 TCP/IP 协议族作为通信的规则,其前身是美国的 ARPANET image.png

2. 因特网发展的三个阶段

  1. 1969年,从单个网络 ARPANET 向互联网发展
  • 1969年,第一个分组交换网 ARPANET
  • 70年代中期,研究多种网络之间的互连;
  • 1983年,TCP/IP 协议成为 ARPANET 的标准协议(因特网诞生时间)
  1. 1985年,逐步建成三级结构的因特网
  • 1985年,NSF 围绕六个大型计算机中心建设 NSFNET(主干网、地区网和校园网);
  • 1990年, ARPANET 任务完成,正式关闭;
  • 1991年,美国政府将因特网主干网交给私人公司经营,并开始对接入因特网的单位收费;
  1. 逐步形成了多层次 ISP 结构的因特网
  • 1993年,NSFNET 逐渐被若干个商用因特网主干网代替;政府机构不再负责因特网运营,让各种 因特网服务提供者 ISP 来运营;
  • 1994年,万维网WWW技术 促使因特网迅猛发展;
  • 1995年,NSFNET 停止运作,因特网彻底商业化

3. 因特网的标准化工作

  • 因特网的标准化工作对因特网的发展起到了非常重要的作用。
  • 因特网在制定其标准上的一个很大的特点是 面向公众
    • 因特网所有的 RFCRequest For Comments)技术文档都可从因特网上免费下载(wwwietf.org/rfc.html)
    • 任何人都可以随时用电子邮件发表对某个文档的意见或建议。
  • 因特网协会ISOC 是一个国际性组织,它负责对因特网进行全面管理,以及在世界范围内促进其发展和使用。
    • 因特网体系结构委员会 IAB,负责管理因特网有关协议的开发;
    • 因特网工程部 IETF,负责研究中短期工程问题,主要针对协议的开发和标准化;
    • 因特网研究部 IRTF,从事理论方面的研究和开发一些需要长期考虑的问题。
  • 制订因特网的正式标准要经过以下4个阶段:
    1. 因特网草案(在这个阶段还不是 RFC 文档)
    2. 建议标准(从这个阶段开始就成为 RFC 文档)
    3. 草案标准
    4. 因特网标准

4. 因特网的组成

  • 边缘部分:由所有连接在因特网上的 主机 组成。这部分是 用户直接使用 的,用来进行 通信(传送数据、音频或视频)和资源共享。
  • 核心部分:由 大量网络 和连接这些网络的 路由器 组成。这部分是为 边缘部分提供服务 的(提供连通性和交换)。 image.png

1.3 计算机网络的定义和分类

计算机网络的定义

  • 计算机网络的精确定义并未统一
  • 计算机网络的最简单的定义是:一些接的、自治 的计算机的 集合
    • 互连:是指计算机之间可以通过有线或无线的方式进行数据通信;
    • 自治:是指独立的计算机,它有自己的硬件和软件,可以单独运行使用;
    • 集合:是指至少需要两台计算机;
  • 计算机网络的较好的定义是:计算机网络主要是由一些 通用的、可编程的硬件互连 而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来 传送多种不同类型的数据,并能 支持广泛的和日益增长的应用
    • 计算机网络所连接的硬件,并不限于一般的计算机,而是包括了智能手机等智能硬件。
    • 计算机网络并非专门用来传送数据,而是能够支持很多种的应用。

计算机网络的分类

  • 按交换技术分类
    • 电路交换网络
    • 报文交换网络
    • 分组交换网络
  • 按使用者分类
    • 公用网
    • 专用网
  • 按传输介质分类
    • 有线网络
    • 无线网络
  • 按覆盖范围分类
    • 广域网 WAN
    • 城域网 MAN
    • 局域网 LAN
    • 个域网 PAN
  • 按拓扑结构分类
    • 总线型网络
    • 星型网络
    • 环型网络
    • 网状型网络

1.4 计算机网络的性能指标

1. 速率

连接在计算机网络上的主机在数字信道上传送比特的速率,也成为 比特率数据率

基本单位:bit/s(b/s bps),常用单位:kb/s Mb/s Gb/s Tb/s

2. 宽带

用来表示网络的 通信线路 所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的 最高数据率;单位与速率单位相同。

3. 吞吐量

吞吐量表示在 单位时间内通过某个网络(或信道、接口)的数据量

吞吐量被经常用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络;吞吐量 受网络的带宽或额定速率的限制

4. 时延

发送时延 = 分组长度(b)/ 发送速率(b/s)

传播时延 = 信道长度(m)/ 电磁波传播速率(m/s)

处理时延:一般不便于计算

5. 时延带宽积

传播时延带宽 的成积;

若发送端连续发送数据,则在所发送的第一个比特即将到达终点时,发送端就已经发送了时延带宽积个比特;

链路的时延带宽积又称为以比特为单位的链路长度

6. 往返时间RTT

在许多情况下,因特网上的信息不仅仅单方向传输,而是 双向交互

我们有时很需要知道双向交互一次所需的时间。

7. 利用率

信道利用率:用来表示某信道有百分之几的时间是被利用的 (有数据通过);

网络利用率:全网络的信道利用率的加权平均;

利用率 并非越高越好:当某信道的利用率增大时,该信道引起的时延也会迅速增加;

也不能 使信道利用率 太低,这会使宝贵的通信资源被白白浪费

8. 丢包率

丢包率即分组丢失率,是指在一定的时间范围内,传输过程中 丢失的分组数量与总分组数量的比率

分组丢失的两个主要原因:分组误码,结点交换机缓存队列满(网络拥塞

1.5 计算机网络体系结构(重点)

1. 常见的计算机网络体系结构

  • OSI 体系结构(法律 上的国际标准)

    物理层、数据链路层、网络层、运输层、会话层、表示层、应用层

  • TCP/IP 体系结构(事实 上的国际标准)

    网络接口层、网际层、运输层、应用层

  • 原理体系结构(适于教学)

    物理层、数据链路层、网络层、运输层、应用层

2. 计算机网络体系结构分层的必要性

计算机网络是个非常复杂的系统,分层可将庞大而复杂的问题,转化为若干较小的局部问题。

  • 物理层

    解决使用何种信号来传输比特的问题

  • 数据链路层

    解决分组在一个网络(或一段链路)上传输的问题

  • 网络层

    解决分组在多个网络上传输(路由)的问题

  • 传输层

    解决进程之间基于网络的通信问题

  • 应用层

    解决通过应用进程的交互来实现特定网络应用的问题

3. 计算机网络体系结构中的专用术语

  • 实体 任何可发送或接收信息的硬件或软件进程
  • 对等实体 收发双方相同层次中的实体
  • 协议 控制两个对等实体进行逻辑通信的规则的集合
  • 协议的三要素
    • 语法 定义所交换信息的格式
    • 语义 定义收发双方所要完成的操作
    • 同步 定义收发双方的时序关系
  • 服务 在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务。
    • 要实现本层协议,还需要使用下面一层所提供的服务。
    • 协议是“水平的”,服务是“垂直的”
    • 实体看得见相邻下层所提供的服务,但并不知道实现该服务的具体协议。也就是说,下面的协议对上面的实体是透明的
  • 服务访问点 在同一系统中相邻两层的实体交换信息的逻辑接口,用于区分不同的服务类型
  • 服务原语 上层使用下层所提供的服务必须通过与下层交换一些命令,这些命令称为服务原语
  • 协议数据单元PDU 对等层次之间传送的数据包称为该层的协议数据单元
  • 服务数据单元SDU 同一系统内,层与层之间交换的数据包称为服务数据单元。

二、物理层

2.1 物理层的基本概念

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。

物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。

2.2 物理层下面的传输媒体

  • 导引型传输媒体
    • 同轴电缆
    • 双绞线
    • 光纤
    • 电力线
  • 非导引型传输媒体
    • 无线电波
    • 微波
    • 红外线
    • 可见光

2.3 传输方式

  • 串行传输
  • 并行传输
  • 同步传输
  • 异步传输
  • 单向通信(单工)
  • 双向交替通信(半双工)
  • 双向同时通信(全双工)

2.4 编码与调制

  • 码元:在使用时间域的波形表示数字信号时,代表不用离散数值的基本波形。
  • 常用编码:
    • 不归零编码
    • 归零编码
    • 曼彻斯特编码
    • 差分曼彻斯特编码
  • 基本调制方法
    • 调幅(AM
    • 调顿(FM
    • 调相(PM
    • 混合调制

2.5 信道的极限容量

  • 奈氏准则:在假定的理想条件下,为了避免码间串扰,码元传输速率是有上限的。

    • 理想低通信道的最高码元传输速率:2W Baud = 2W 码元/秒
    • 理想带通信道的最高码元传输速率:W Baud = W 码元/秒

    W:信道带宽(单位为 Hz

    Baud:波特,即码元/秒

  • 香农公式:带宽受限且有高斯白噪声干扰的信道的极限信息传输速率 image.png

在信道带宽一定的情况下,根据奈氏准则和香农公式,要想 提高信息的传输速率 就必须采用 多元制 (更好的调制方法)和努力 提高信道中的信噪比

自从香农公式发表后,各种 新的信号处理和调制方法就不断出现,其目的都是为了尽可能地 接近香农公式给出的传输速率极限

三、数据链路层

3.1 数据链路层概述

链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。

数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。

数据链路层以 为单位传输和处理数据。

数据链路层的三个重要问题:

  • 封装成帧
  • 差错检测
  • 可靠传输

3.2 封装成帧

  • 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
    • 帧头和帧尾中包含哟重要的控制信息。
    • 帧头和帧尾的作用之一就是 帧定界
  • 透明传输 是指 数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
    • 面向字节的物理链路使用 字节填充(或称字符填充)的方法实现透明传输。
    • 面向比特的物理链路使用 比特填充 的方法实现透明传输。
  • 为了提高帧的传输效率,应当使 帧的数据部分的长度尽可能大些
  • 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即 最大传送单元MTUMaximum Treansfer Unit)。

3.3 差错检测

  • 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1.这称为 比特差错
  • 在一段时间内,传输错误的比特占所传输比特总数的比率称为 误码率BER(Bit Error Rate)。
  • 使用 差错检测码 来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
  • 错误码 只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此 无法纠正错误
  • 要想纠正传输中的差错,可以使用冗余信息更多的 纠错码 进行 向前纠错。但纠错码的开销比较大,在 计算机网络中较少使用
  • 循环冗余校验 CRC 有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常 易于用硬件实现,因此被 广泛应用于数据链路层
  • 在计算机网络中通常采用我们后续课程中将要讨论的 检错重传方式来纠正传输中的差错或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的可靠传输服务还是不可靠传输服务。

3.4 可靠传输的基本概念

  • 使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出恢在传输过程中是否产生了误码 (比特错误)。
  • 数据链路层向上层提供的服务类型:
    • 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做:
    • 可靠传输服务想办法实现发送端发送什么,接收端就收到什么。
  • 般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
  • 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
  • 比特差错只是传输差错中的一种。
  • 从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
  • 分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
  • 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。
  • 可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。
  • 可靠传输的实现机制 --- 停止-等待协议
  • 可靠传输的实现机制 --- 回退N帧协议
  • 可靠传输的实现机制 --- 选择重传协议

3.5 点对点协议 PPP

  • PPP协议的标准文档 [RFC1661,RFC1662]
  • PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
    • 对各种协议数据报的封装方法(封装成帧)
    • 链路控制协议LCP:用于建立、配置以及测试数据链路的连接
    • 一套网络控制协议NCPs:其中的每一个协议支持不同的网络层协议
  • PPP帧格式 image.png
  • PPP帧的透明传输
    • 面向字节的一部链路使用字节填充法(插入转移字符)
    • 面向比特的同步链路使用比特填充法(零比特填充)
  • PPP协议的工作状态 image.png

3.6 媒体接入控

共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即 媒体接入控制MAC (Medium Access Control)。

  • 静态划分信道
  • 随机接入CSMA/CD协议
  • 随机接入CSMA/CA协议

3.7 MAC 地址、IP 地址以及 ARP 协议

MAC 地址

  • 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址;
  • 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Meda Acoes Cno),因此这类地址被称为MAC地址;
    • MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址
    • MAC地址有时也被称为物理地址。请注意: 这并不意味着MAC地址属于网络体系结构中的物理层!
  • 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡),每个网络适配器都有一个全球唯一的MAC地址、而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址,综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络各设备的唯一标识

IP 地址

  • IP地址是因特网(lnternet) 上的主机和路由器所使用的地址,用于标识两部分信息:

    • 网络编号:标识因特网上数以百万计的网络
    • 主机编号:标识同一网络上不同主机 (或路由器)
  • 很显然,之前介绍的MAC地址不具备区分不同网络的功能。

    • 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址 (这不是一般用户的应用方式)
    • 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。
  • 数据包转发过程中IP地址与MAC地址的变化情况:

    • IP地址和目的IP地址保持不变;
    • MAC地址和目的MAC地址逐个链路(或逐个网络) 改变。

ARP 协议

  • 源主机在自己的 ARP高速缓存表 中查找目的主机的IP地址所对应的MAC地址,若找到了,则可以封装MAC帧进行发送;若找不到,则发送 ARP请求(封装在广播MAC帧中) ;
  • 目的主机收到ARP请求后,将源主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给源主机发送 ARP响应 (封装在单播MAC帧中)ARP响应中包含有目的主机的IP地址和MAC地址;
  • 源主机收到ARP响应后,将目的主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后就可以封装之前想发送的MAC帧并发送给目的主机;
  • ARP的作用范围:逐段链路或逐个网络使用
  • 除ARP请求和响应外,ARP还有其他类型的报文 (例如用于检查IP地址冲突的“无故ARP、免费ARP(Gratuitous ARP)”);
  • ARP没有安全验证机制,存在ARP欺骗(攻击)问题

3.8 集线器与交换机的区别

  • 集线器 HUB(已淘汰)
    • 早期以太网的互连设备
    • 工作在OSI体系结构的物理层
    • 对接收到的信号进行放大、转发
    • 使用集线器作为互连设备的以太网仍然属于共享总线式以太网。集线器互连起来的所有主机共享总线带宽,属于同一个碰撞域和广播域。
  • 交换机 SWITCH
    • 目前以太网中使用最广泛的互连设备
    • 工作在OSI体系结构的数据链路层 (也包括物理层)
    • 根据MAC地址对帧进行转发
    • 使用交换机作为互连设备的以太网,称为交换式以太网。交换机可以根据MAC地址过滤帧,即隔离碰撞域。
    • 交换机的每个接口是一个独立的碰撞域
    • 交换机隔离碰撞域但不隔离广播域(VLAN除外)

3.9 以太网交换机自学习和转发帧的流程

  • 以太网交换机工作在 数据链路层 (也包括物理层)
  • 以太网交换机收到帧后,在帧交换表中查找 帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
  • 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信以太网交换机 通过自学习算法 自动逐渐 建立起恢交换表
  • 以太网交换机自学习和转发帧的流程:
    1. 收到帧后进行 登记。登记的内容为 帧的源MAC地址 及进入交换机的接口号;
    2. 根据 帧的目的MAC地址 和交换机的 帧交换表 对帧进行 转发,有以下三种情况:
      • 明确转发:交换机知道应当从哪个(或哪些)接口转发该(单播,多播,广播)
      • 盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)
      • 明确丢弃:交换机知道不应该转发该帧,将其丢弃恢
  • 帧交换表中的每条记录都有自己的 有效时间,到期删除。原因如下:
    • 交换机的接口改接了另一台主机;
    • 主机更换了网卡。

3.10 以太网交换机的生成树协议STP

  • 如何提高以太网的可靠性?
  • 添加 冗余链路 可以提高以太网的可靠性
  • 但是,冗余链路也会带来负面效应一一形成 网络环路
  • 网络环路会带来以下问题:
    • 广播风暴:大量消耗网络资源,使得网络无法正常转发其他数据帧;
    • 主机收到重复的广播帧:大量消耗主机资源
    • 交换机的帧交换表震荡(漂移)
  • 以太网交换机使用 生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又 避免网络环路带来的各种问题
    • 不论交换机之间采用怎样的物理连接,交换机都能够 自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路);
    • 最终生成的树型逻辑拓扑要 确保连通整个网络
    • 当首次连接交换机或网络 物理拓扑发生变化 时(有可能是人为改变或故障)交换机都将进行 生成树的重新计算

3.11 虚拟局域网VLAN

  • 以太网交换机工作在 数据链路层 (也包括物理层)
  • 使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域
  • 随着交换式以太网规模的扩大,广播域相应扩大。
  • 巨大的广播域会带来很多弊端: 广播风暴 难以管理和维护 潜在的安全问题
  • 网络中会频繁出现广播信息(TCP/IP协议栈中很多协议都会使用广播,例如ARP、RIP、DHCP等)
  • 分割广播域的方法:使用路由器可以隔离广播域,但路由器成本较高,虚拟局域网VLAN技术 应运而生。
  • 虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的 设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求

四、网络层

4.1 网络层概述

  • 网络层的主要任务是 实现网络互连,进而 实现数据包在各网络之间的传输
  • 要实现网络层任务,需要解决以下主要问题:
    • 网络层向运输层提供怎么样的服务(“可靠传输”还是“不可靠传输”)
    • 网络层寻址问题
    • 路由选择问题
  • 因特网Internet)是目前全世界用户数量最多的互联网,它 使用TCP/IP协议栈
  • 由于 TCP/IP 协议栈的网络层使用 国际协议IP,它是整个协议栈的核心协议,因此在 TCP/IP 协议栈中网络层常称为 网际层

4.2 网络层提供的两种服务

虚电路服务与数据报服务的比较

对比方面虚电路服务数据报服务
思路可靠通信应当由网络来保证可靠通信应当由用户主机来保证
连接的建立必须建立网络层连接不需要建立网络层连接
终点地址仅在连接建立阶段使用,每个分组使用短的虚电路号每个分组都有终点的完整地址
分组的转发属于同一条虚电路的分组均按同一路由进行转发每个分组可走不同的路由
当结点出故障时所有通过出故障的结点的虚电路均不能工作出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序总是按发送顺序到达终点达到终点时不一定按发送顺序
服务质量保证可以通信资源提前分配给每一个虚电路很难实现

TCP/IP 体系结构的因特网的网际层提供的是简单灵活、无连接的、尽最大努力交付的数据报服务

4.3.1 IPv4 地址概述

  • IPv4地址 就是给因特网(Internet)上的 每一台主机(或路由器)的每一个接口 分配一个在全世界范围内是 唯一的32比特的标识符
  • **IPv4地址的编址方法经历了如下三个历史阶段:
    • 1981 分类编址
    • 1985 划分子网
    • 1993 无分类编址
  • 32比特的 IPv4 地址不方便阅读、记录以及输入等,因此 IPv4 地址采用 点分十进制表示方法 以方便用户使用。

4.3.2 IPv4 地址的应用规划

  • 定长的子网掩码 FLSM
    • 使用同一个子网掩码来划分子网
    • 子网划分方式不灵活:只能划分出2的n次方个子网
    • 每个子网所分配的 IP 地址数量相同,容易造成 IP 地址浪费。
  • 变长的子网掩码 VLSM
    • 使用不同的子网掩码来划分子网
    • 子网划分方式灵活:可以按需分配
    • 每个子网所分配的 IP 地址数量可以不同,尽可能减少对 IP 地址的浪费。

子网掩码是 一个32位地址,是与IP地址结合使用的一种技术。 它的主要作用有两个,一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。 二是用于将一个大的IP网络划分为若干小的子网络。 使用子网是为了减少IP的浪费。

4.4 IP 数据报的发送和转发过程

  • 主机发送 IP 数据报

    判断目的主机是否与自己在同一个网络,若在同一个网络,则属于直接交付;若不在同一个网络,则属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮助转发;

  • 路由器转发 IP 数据报
    1. 检查 IP 数据报首部是否出错

      若出错,则直接丢弃该 IP 数据报并通告源主机;

      若没有出错,则进行转发;

    2. 根据 IP 数据报的目的地址在路由表中查找匹配的条目

      若找到匹配的条目,则转发给条目中指示的下一跳;

      若找不到,则丢弃该 IP 数据报并通告源主机。

4.5 静态路由配置及其可能产生的路由环路问题

  • 静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器 人工配置路由表
    • 这种人工配置方式简单、开销小。但 不能及时适应网络状态 (流量、拓扑等)的变化
    • 一般只在小规模网络中采用。
  • 使用静态路由配置可能出现以下 导致 产生 路由环路 的错误
    • 配置错误
    • 聚合了不存在的网络
    • 网络故障
  • 路由条目的类型
    • 直连网络
    • 静态路由(人工配置)
    • 动态路由(路由选择协议)
  • 特殊的静态路由条目
    • 默认路由(目的网络为0.0.0.0,地址掩码为0.0.0.0)
    • 特定主机路由(目的网络为特定主机的IP地址,地址掩码为255.255.255.255)
    • 黑洞路由 (下一跳为null0)

4.6 路由选择协议

  • 静态路由选择
    • 人工配置 的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由。
    • 这种人工配置方式简单、开销小。但 不能及时适应网络状态(流量、拓扑等)的变化
    • 一般只在 小规模网络 中采用。
  • 动态路由选择
    • 路由器通过路由选择协议 自动获取路由信息
    • 比较复杂、开销比较大。能较好地适应网络状态的变化
    • 适用于 大规模网络

常见的路由选择协议

  • 内部网关协议 IGP
    • 路由信息协议 RIP
    • 内部网关路由协议 IGRP
    • 增强型内部网关路由协议 EIGRP
    • 开放式最短路径优先 OSPF
    • 中间系统到中间系统 IS-IS
  • 外部网关协议 EGP
    • 边界网关协议 BGP

4.7 IPv4 数据报的首部格式

  • 版本 占4比特,表示IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPV4)
  • 首部长度 占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。
    • 最小十进制取值为5,表示IP数据报首部只有20字节固定部分;
    • 最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
  • 可选字段长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的,这就增加了每一个路由器处理1P数据报的开销。实际上可选字段很少被使用。
  • 填充字段 确保首部长度为4字节的整数倍。使用全0进行填充。
  • 区分服务占8特,用来获得更好的服务,1998年,因特网工程任务组ITF把这个字段改名为区分服务、利用该字段的不同数值可提供不同等级的服务质量,只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
  • 总长度 占16比特,表示IP数据报的总长度(首部+数据载荷)。最大取值为十进制的65535,以字节为单位。
  • 标识 占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。1P软件维持一个计数器,每产生一个数据报,计数器值加1,井将此值赋给标识字段。
  • 标志 占3比特,各比特含义如下:DF位:1表示不允许分片:表示允许分片:MF位:1表示“后面还有分片”,0表示“这是最后一个分片”;保留位:必须为0。
  • 片偏移 占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。片偏移以8个字节为单位。
  • 生存时间TTL 占8比特,表示IP数据报的生存时间。
    • 最初以秒为单位,最大生存周期为255秒;路由器转发1P数据报时,将1P数据报首部中的该字段的值减去1P数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。
    • 现在以“跳数”为单位,路由器转发IP数据报时,将1P数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
    • IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
  • 协议 占8比特,指明IPv4数据报的数据部分是何种协议数据单元。
  • 首部检验和 占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和,由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPV6中,路由器不再计算首部校验和,从而更快转发1P数据报。
  • 源IP地址和目的IP地址 各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该1P数据报的目的主机的IP地址。

4.8 网际控制报文协议 ICMP

  • 为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP(Internet Control Message Protocol)
  • 主机或路由器使用 ICMP 来发送 差错报告报文询问报文
  • ICMP报文被封装在IP数据报中发送。
  • ICMP 差错报告报文共有以下五种:
    • 终点不可达
    • 源点抑制
    • 时间超过
    • 参数问题
    • 改变路由(重定向)
  • 以下情况不应发送ICMP差错报告报文
    • ICMP 差错报告报文不再发送 ICMP 差错报告报文
    • 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
    • 对具有多播地址的数据报都不发送 ICMP 差错报告报文
    • 对具有特殊地址(如127.0.0.或0.0.0.0)的数据报不发送 ICMP 差错报告报文
  • 常用的 ICMP询问报文 有以下两种:
    • 回送请求和回答
    • 时间戳请求和回答
  • ICMP 应用:
    • 分组网间探测 PING
    • 跟踪路由 traceroute

4.9 虚拟专用网 VPN 与网络地址转换 NAT

  • 虚拟专用网 VPN(Virtual Private Network)
    • 利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。
    • 同一机构内不同部门的内部网络所构成的虚拟专用网 VPN 又称为 内联网VPN
    • VPN 要保证传输数据的安全性,会将原始的 内部数据报进行加密,然后再将其封装成为在因特网上发送到的外部数据报。
    • 有时一个机构的 VPN 需要有某些外部机构(通常就是合作伙伴)参加进来。这样的 VPN就称为 外联网VPN
    • 在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工 PC 中的 VPN软件,在员工的 PC 和公司的主机之间建立 VPN 隧道,即可访问专用网络中的资源。这种 VPN 称为 远程接入VPN
  • 网络地址转换 NAT(Network Address Translation)
    • 由于 IP 地址的紧缺一个机构能够申请到的P地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。
    • 虽然因特网采用了无分类编址方式来减缓 IP 地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4 地址空间即将面临耗尽的危险仍然没有被解除。
    • 1994年提出了一种网络地址转换 NAT的方法再次缓解了IP地址空间耗尽的问题
    • NAT使大量使用内部专用地址的专用网络用户共享少量外部全球地址 来访问因特网上的主机和资源。
    • 由于绝大多数的网络应用都是使用运输层协议 TCPUDP 来传送数据,因此可以 利用运输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本她地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作 网络地址与端口号转换NAPT (Network Address andPort Translation)
    • 对于一些 P2P 网络应用,需要 外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的 NAT 穿越技术来解决问题。
    • 由于 NAT对外网屏蔽了内网主机的网络地址能为内网的主机提供一定的安全保护

五、运输层

5.1 运输层概述

  • 计算机网络体系结构中的 物理层、数据链路层 以及 网络层 它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信
  • 但实际上在计算机网络中进行 同心度额真正实体是位于通信两端主机中的进程
  • 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。
  • 运输层向高层哟农户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就 好像是在两个运输层实体之间有一条端到端的逻辑通信信道
  • 根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即 面向连接的TCP无连接的UDP

5.2 运输层端口号、复用与分用的概念

  • 运行在计算机上的进程使用 进程标识符PID 来标志。
  • 因特网上的计算机并不是使用统一的操作系统,不同的操作系统 (windows,Linux,Mac oS) 又使用 不同格式的进程标识符
  • 为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用 统一的方法对TCP/IP体系的应用进程进行标识
  • TCP/IP 体系的运输层使用 端口号 来区分应用层的不同应用进程
    • 端口号使用 16比特表示,取值范围 0~65535
      • 熟知端口号:0~1023,IANA 把这些端口号指派给了 TCP/IP 体系中最重要的一些应用协议,例如: FTP 使用21/20,HTTP 使用80,DNS 使用53。
      • 登记端口号:1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在 IANA 按照规定的手续登记,以防止重复。例如: Microsoft RDP 微软远程桌面使用的端口是3389。
      • 短暂端口号:49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
  • 端口号只具有本地意义,即端口号只是为了 标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的

image.png

5.3 UDP 和 TCP 的对比

用户数据报协议 UDP(User Datagram Protocol)

  • 无连接
  • 支持一对一,一对多,多对一和多对多交互通信
  • 对应用层交付的报文直接打包
  • 尽最大努力交付,也就是不可靠;不使用流量控制和拥塞控制
  • 首部开销小,仅8字节
  • 通常用于多媒体信息分发,即视频、语音、实时信息 等等

传输控制协议 TCP(Transmission Control Protocol)

  • 面向连接
  • 每一条 TCP 连接只能有两个端点 EP,只能一对一通信
  • 面向字节流
  • 可靠传输,使用流量控制和拥塞控制
  • 首部最小20字节,最大60字节
  • 通常用于可靠信息的传输,应用场景包括金融交易、可靠通信、MQ 等等

5.4 TCP 的流量控制

  • 一般来说,我们总是希望数据传输得更快一些。
    • 但如果发送方把数据发送得太快,接收方就可能来不及接收,这就造成数据的丢失。
  • 所谓流量控制(flow control)就是 让发送方的发送速率不要太快,要让接收方来得及接收
  • 利用 滑动窗口 机制可以很方便地在 TCP 连接上实现对发送方的流量控制。
    • TCP 接收方利用自己的 接收窗口 的大小来限制发送方 发送窗口 的大小。
    • TCP 发送方收到接收方的 零窗口通知 后,应启动 持续计时器。持续计时器超时后,向接收方发送 零窗口探测报文

5.5 TCP 的拥塞控制

  • 在某段时间,若 对网络中某一资源的需求超过了该资源所提供的可用部分,网络性能就要变坏。这种情况就叫做 拥塞(congestion)

    • 在计算机网络中的链路容器(即宽带)、交换结点中的缓存和处理机等,都是网络的资源。
  • 出现拥塞而不进行控制,整个网络的 吞吐量将随输入的负荷的增大而下降image.png

  • 拥塞控制的四种算法

    • 慢开始(slow-start)
    • 拥塞避免(congestion avoidance)
    • 快重传(fast retransmit)
    • 快恢复(fast recovery)

5.6 TCP 超时重传时间的选择

超时重传时间的选择是 TCP 最复杂的问题之一

RFC6298 建议使用下式计算超时重传时间 RTO: image.png 出现超时重传时,新RTO=2倍的旧RTO

5.7 TCP 可靠传输的实现

  • TCP 基于 以字节为单位的滑动窗口 来实现可靠传输。
    • 发送方在未收到接收方的确认时,可将发送窗口内还未发送的数据全部发送出去;
    • 接收方只接受序号落入发送窗口内的数据;
  • 虽然发送方的发送窗口是根据接收方得接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方得接收窗口 一样大。
    • 网络传输窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
    • 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
  • 对于 不按序到达的数据应如何处理TCP 并无明确规定。
    • 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据。
    • TCP 通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再 按序交付上层的应用进程
  • TCP 要求接收方必须有 累计确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
    • 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。TCP 标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认 [RFC 1122]
    • 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
  • TCP 的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口。

5.8 TCP 的连接建立(三次握手)

TCP 的连接建立要解决三个问题:

  1. 使 TCP 双方能够确知对方的存在;
  2. 使 TCP 双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
  3. 使 TCP 双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

TCP 使用 “三报文握手” 建立连接

三次握手是指在 TCP/IP 协议中建立起一个 TCP 连接时,需要进行的三个步骤:

  1. 客户端向服务器发送 SYN 报文段(SYN=1, ACK=0),表示请求建立连接,并选择自己的初始序列号 seq
  2. 服务器收到客户端的 SYN 请求后,回复一个 ACK 报文段(SYN=1,ACK=1),表示接受请求,并确认客户端的初始序列号 ack=client_isn+1;同时也要发送自己的 SYN 报文段,选择自己的初始序列号 seq
  3. 客户端再次回复一个 ACK 报文段(SYN=0,ACK=1),其中确认号 ack=server_isn+1,表示客户端收到了服务器的 SYNACK,并向服务器发送确认信息。

经过这三次握手之后,TCP 连接就建立成功了。

image.png

注意:

  1. TCP 的标准规定,SYN=1 的报文段不能携带数据,但要消耗掉一个序号。
  2. TCP 的标准规定,普通的确认报文段如果不携带数据,则不消耗序号。

5.9 TCP 的连接释放(四次挥手)

TCP 使用 “四报文挥手” 释放连接

四次挥手是在 TCP/IP 协议中断开一个已经建立的 TCP 连接时,需要进行的四个步骤:

  1. 客户端向服务器发送 FIN 报文段(FIN=1),表示希望关闭连接。
  2. 服务器收到客户端的 FIN 请求后,回复一个 ACK 报文段(ACK=1),表示确认已经接收到了客户端的请求,但还没有准备好关闭连接。
  3. 当服务器准备好关闭连接时,会发送一个 FIN 报文段(FIN=1)给客户端。
  4. 客户端收到服务器的 FIN 请求后,回复一个 ACK 报文段(ACK=1),表示已经成功关闭连接。此时客户端进入 TIME_WAIT 状态,等待2倍的 MSL 时间后才会完全关闭连接,并释放所有资源。

总结起来,四次挥手过程为:客户端发送 FIN,服务器回复 ACK;服务器发送 FIN,客户端回复 ACK。这样就能保证双方都知道对方已经关闭连接,并且避免了连接中断时数据包的丢失。

image.png

MSL(Maximum Segment Lifetime)意思是最长报文段寿命,RFC793建议为2分钟

5.10 TCP 报文段的首部格式

image.png

  • 为了实现可靠传输,TCP 采用了 面向字节流 的方式。
  • TCP 在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为 TCP报文段 后进行发送。
    • 一个 TCP 报文段由 首部数据载荷 两部分构成;
    • TCP 的全部功能都体现在它首部中各字段的作用。

六、应用层

6.1 应用层概述

解决通过应用进程的交互来实现特定网络应用的问题

应用层是计算机网络体系结构的 最顶层,是 设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。

  • 早期基于文本的应用 (电子邮件、远程登录、文件传输、新闻组)
  • 20世纪90年代将因特网带入千家万户的万维网 WWW
  • 当今流行的即时通信、P2P 文件共享及各种音视频应用
  • 计算设备的小型化和 “无处不在”,宽带住宅接入和无线接入的日益普及和迅速发展,为未来更多的新型应用提供了广阔的舞台。

6.2 客户/服务器方式(C/S方式)和对等方式(P2P方式)

  • 客户/服务器(Clinent/Server,C/S)方式
    • 客户和服务器是指通信中所涉及的两个应用进程。
    • 客户/服务器方式所描述的是进程之间服务和被服务的关系。
    • 客户是服务请求方,服务器是服务提供方。
    • 服务器总是处于运行状态,并等待客户的服务请求。 服务器具有固定端口号(例如 HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的 IP 地址。
    • C/S 方式是因特网上传统的、同时也是最成熟的方式,包括万维网 WWW、电子邮件、文件传输 FTP 等。
    • 基于 C/S 方式的应用服务通常是 服务集中型 的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。
      • 由于一台服务器计算机要为多个客户机提供服务,在 C/S 应用中,常会出现服务器计算机跟不上众多客户机请求的情况。
      • 为此,在 C/S 应用中,常用 计算机群集(或服务器场)构建一个强大的 虚拟服务器
  • 对等(Peer-to-Peer,P2P)方式
    • p2p 方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。
    • 目前,在因特网上流行的 p2p 应用主要包括 p2p 文件共享、即时通信、p2p 流媒体、分布式存储等。
    • 基于 p2p 的应用是 服务分散型 的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,它们通常位于住宅、校园和办公室中。
    • p2p 方式的最突出特性之一就是它的 可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因为规模的增大而降低。
    • p2p 方式 具有成本上的优势,因为它通常不需要庞大的服务器设施和服务器宽带。为了降低成本,服务提供商对于将 p2p 方式用于应用的兴趣越来越大。

6.3 动态主机配置协议 DHCP

  • 动态主机配置协议 DHCP(## Dynamic Host Configuratin Protocol)提供了一种机制,称为即插即用连网。这种机制 允许一台计算机加入新网络时可自动获取 IP 地址等网络配置信息而不用手工参与
  • DHCP 主要使用以下报文来实现其功能:
    • DHCP DISCOVERDHCP 发现报文
    • DHCP REQUESTDHCP 请求报文
    • DHCP NACKDHCP 否认报文
    • DHCP OFFERDHCP 提供报文
    • DHCP ACKDHCP 确认报文
    • DHCP RELEASEDHCP 释放报文
  • DHCP 报文在运输层使用UDP协议封装
    • DHCP 客户使用的 UDP 端口号为68
    • DHCP 服务器使用的 UDP 端口号为67
  • DHCP 客户在未获取到 IP 地址时使用地址 0.0.0.0
  • 在每一个网络上都设置一个 DHCP 服务器会使 DHCP 服务器的数量太多。因此现在是使每一个网络至少有一个 DHCP 中继代理 (通常是一台路由器)它配置了 DHCP 服务器的 IP 地址信息,作为各网络中计算机与 DHCP 服务器的桥梁。

6.4 域名系统 DNS

  • 域名系统 DNS 是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名,转化为便于机器处理的 IP 地址。
  • 因特网采用 层次树状结构的域名结构
  • 顶级域名 TLD(Top Level Domain) 分为三类:
    • 国家顶级域名 nTLD
    • 通用顶级域名 gTLD
    • 反向域 arpa
  • 域名和 IP 地址的映射关系必须保证在域名服务器中,供所有其他应用查询。显然不能将所有信息都储存在一台域名服务器中。DNS 使用 分布在各地的域名服务器 来实现域名到 IP 地址的转换。
  • 域名服务器可以划分为以下四种不同的类型:
    • 根域名服务器
    • 顶级域名服务器
    • 权限域名服务器
    • 本地域名服务器
  • 域名解析的过程使用两种域名查询方式:
    • 递归查询
    • 迭代查询
  • 为了提高 DNS 的查询效率,并减轻根域名服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器和主机中广泛地使用了 高速缓存
  • DNS 报文使用运输层的 UDP 协议进行封装,运输层 端口号为 53

6.5 文件传送协议 FTP

  • 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。
  • 文件传送协议FTP (File Transfer Protocol) 因特网上使用得最广泛的文件传送协议。
    • FTP 提供交互式的访问,允许客户指文件的类型与格式(如指是否使用 A5C1),并允许文件具有有权(向文件的用户须经过授权,并输入有效的口令)
    • FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
    • 在因特网发展的导期阶段,用 FTP 传送文件的占整个因特网的通信量的三分之一,而由电子部件和域名系统所产生的通信量还要小于 FTP 所产生的通信量,只是到了1995年万维局 WWW 的通信量才首次超过了 FTP
  • FTP 客户和服务器之间要 建立以下两个并行的TCP连接
    • 控制连接,在整个会话期间一直保持打开。用于传送 FTP 相关控制命令
    • 数据连授,用于文件传输,在每次文件传输时才建立,传输结束就关闭
    • 默认情况下,FTP使用TCP 21端口进行控制连接,TCP 20端口进行数据连接。但是,是否使用 TCP 20 端口建立数据连接与传输模式有关,主动方式使用TCP 20端口被动方式由服务器和客户端自行协商决定

6.6 电子邮件

  • 电子邮件系统采用 客户/服务器方式。三个主要组成构件: 用户代理,邮件服务器,以及电子邮件所需的协议
    • 用户代理 是用户与电子邮件系统的接口,又称为 电子邮件客户端软件
    • 邮件服务器 是电子邮件系统的基础设施。因特网上所有的 ISP 都有邮件服务器,其功能是 发送和接收邮件,同时还要负责维护用户的邮箱。
    • 协议 包括邮件 发送协议 (例如 SMTP)和邮件 读取协议 (例如 POP3)。
  • 常用的 邮件发送协议简单邮件传送协议SMTP
    • 基于 TCP 连接,端口号为 25;
    • 只能传送 ASCII 码文本
    • 用于用户代理向邮件服务器发送邮件以及邮件服务器之间的邮件发送
  • 为解决 SMTP 传送非 ASCII 码文本的问题,提出了 多用途因特网邮件扩展MIME
  • 常用的 邮件读取协议 有以下两个:
    • 邮局协议POP3:非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件
    • 因特网邮件访问协议IMAP:功能比 POP3 强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此 IMAP 是一个联机协议。
    • POP3IMAP4 都采用 基于TCP连接的客户/服务器方式POP3 使用端口 110IMAP4 使用端口 143
  • 基于万维网的电子邮件
    • 通过 浏览器 登录(提供用户名和口令)邮件服务器万维网网站 就可以撰写、收发、阅读和管理电子邮件。这种工作模式与 IMAP 很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。
    • 这种工作模式在 用户浏览器与邮件服务器网站之间使用HTTP协议,而 邮件服务器之间使用SMTP协议

6.5 万维网 WWW

  • 万维网 WWW(Worid Wide Web)是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个 分布式应用
  • 浏览器最重要的部分是渲染引擎,也就是 浏览器内核,负责对网页内容进行解析和显示。
  • 万维网使用 统一资源定位符 URL 来指明因特网上任何种类 “资源” 的位置。其一般形式为:<协议>://<主机>:<端口>/<路径>
  • 万维网文档
    • HTML
    • CSS
    • JavaScript
  • 超文本传输协议 HTTP(HyperText Transfer Protocol)定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
    • HTTP/1.0 采用 非持续连接 方式。每次浏览器请求一个文件都要与服务器建立 TCP 连接(80端口),当收到响应后就立即关闭连接。
    • HTTP/1.1 采用 持续连接 方式。万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。为了进一步提高效率,还可以采用 流水线 方式,即浏览器在收到 HTTP 的响应报文之前就能够连续发送多个请求报文。
  • HTTP 有两类报文:请求报文响应报文。报文中的每一个字段都是一些 ASCII 码串,并且每个字段的长度都是不确定的。
  • Cookie 提供了一种机制使得万维网服务器能够 “记住” 用户,而无需用户主动提供用户表示信息。也就是说,Cookie 是一种对无状态的 HTTP 进行状态化的技术
  • 在万维网中还可以使用缓存机制以提高万维网的效率。万维网缓存又称为 Web 缓存,可位于客户机,也可位于中间系统上,位于中间系统上的 Web 缓存又称为 代理服务器

HTTP 请求方法

请求方式请求详情
GET获取指定的服务端资源。
POST提交数据到服务端。
DELETE删除指定的服务端资源。(很少用)
UPDATE更新指定的服务端资源。
PUT修改数据。
OPTIONS列出可对资源实行的请求方法,用来跨域请求。
CONNECT建立连接隧道,用于代理服务器
HEAD获取资源的元信息
TRACE追踪请求-响应的传输路径

HTTP 应答状态码

header 1header 2
100~199协议处理的中间状态,还需要后续操作
200~299成功
300~399重定向
400~499客户端错误
500~599服务端错误

100~199

  • 101:Switching Protocols,服务器同意将 HTTP 升级为 WebSocket 时发送。

200~299

  • 200:在响应体中放有数据。
  • 204:No Content,响应头后没有 body 数据。
  • 206:Partial Content,通常用于 HTTP 分块下载和断点续传,同时带上相应的响应头字段 Content-Range。

300~399

  • 301:Moved Permanently,永久重定向。
  • 302:Found,临时重定向。
  • 304:Not Modified,协商缓存命中时返回。

400~499

  • 400:Bad Request,请求出错。
  • 403:Forbidden,服务器禁止访问,原因有法律禁止、信息敏感等。
  • 404:Not Found,资源未找到。
  • 405:Method Not Allowed,请求方法不被允许。
  • 406:Not Acceptable,资源无法满足条件。
  • 408:Request Timeout,请求超时。
  • 409:Conflict,多个请求发生了冲突。
  • 413:Request Entity Too Large,请求体的数据过大。
  • 414:Request-URI Too Long,请求行里的 URI 太大。
  • 429:Too Many Request,客户端发送的请求过多。
  • 431:Request Header Fields Too Large,请求头的字段内容太大。

500~599

  • 500:Internal Server Error,服务内部出错。
  • 501:Not Implemented: 请求的功能不支持。
  • 502:Bad Gateway: 服务器自身是正常的,只是数据通道有问题。
  • 503:Service Unavailable: 服务器很忙,无法响应服务。

GET 和 POST 的区别

  1. GET 参数通过 url 传递,POST 放在 request body 中。
  2. GET 请求在 url 中传递的参数是有长度限制的,而 POST 没有。
  3. GETPOST 更不安全,因为参数直接暴露在 url 中,所以不能用来传递敏感信息。
  4. GET 请求只能进行 url 编码,而 POST 支持多种编码方式。
  5. GET 请求会浏览器主动 cache,而 POST 支持多种编码方式。
  6. GET 请求参数会被完整保留在浏览历史记录里,而 POST 中的参数不会被保留。
  7. GETPOST 本质上就是 TCP 链接,并无差别。但是由于 HTTP 的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

参考链接: