第一章 计算机网络和因特网
- 本章目的:
1 计算机网络的概貌
1.1 查看构成网络的基本硬件和软件组件
1.1.1 网络的边缘开始,考察在网络中运行的端系统和网络应用
1.1.2 网络的核心开始,查看传输数据的链路和交换机,以及将端系统与网络核心相连接的接入网和物理媒体
1.2 查看在计算机网络中数据的时延、丢包和吞吐量,给出一个端到端吞吐量和时延的简单定量模型
1.3 介绍计算机联网时的一些关键的、体系结构上的原则
1.4 了解计算机网络对于许多不同类型的攻击来说是脆弱的,回顾其中的某些攻击并且考虑使计算机更为安全的方法
1.5 计算机网络的简要历史
2 描述本书内容框架 - 本章内容:
1 大量背景知识
2 大量计算机网络构件
1.1 什么是因特网
其一:根据软硬件的组件来描述
其二:根据基础设施向分布式应用程序提供的服务来描述
1.1.1 具体构成描述(软硬件的组件的角度)
- 端系统通过通信链路和分组交换机连接到一起。
- 主机=端系统(如:PC、Linux工作站、服务器、便携机、智能手机、平板电脑、电视、游戏机、Web相机等)。
- 通信链路由不同类型的物理媒体组成。这些物理媒体包括同轴电缆、铜线、光纤和无线电频谱。不同的链路能够以不同的速率传输数据,链路的传输速率以比特/秒度量(bit/s,或bps)。
- 端系统之间互相发送数据时,将数据分段,并为每段加上首部字节。由此形成的信息包用计算机网络的术语来说称为分组。
- 分组交换机的两种著名类型:路由器和链路层交换机。(从一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组)。
- 端系统是通过**因特网服务提供商(ISP)**接入因特网的。每个ISP都是一个由多个通信链路和多个分组交换机组成的网络。
- 因特网就是将端系统彼此互联,因此为端系统提供接入的ISP也必须互联。低层的ISP通过国家的、国际的高层ISP互联起来。高层ISP是由通过高速光纤链路互联的高速路由器组成的。无论是高层还是低层ISP网络,它们每个都是独立管理的,运行着IP协议,遵从一定的命名和地址习惯。
- 端系统、分组交换机和其他因特网部件都要运行一系列协议,这些协议控制因特网中信息的接收和发送。(其中TCP协议和IP协议是因特网中两个最为重要的协议——IP协议定义了在路由器和端系统之间发送和接收的分组格式)
1.1.2 服务描述(为应用程序提供服务的基础设施的角度)
- 分布式应用程序:涉及多台相互交换数据的端系统,如VoIP、因特网广播、即时讯息、远程注册等。因特网应用程序运行在端系统上,即它们并不运行在网络核心中的分组交换机中。尽管分组交换机促进端系统之间的数据交换,但它们并不关心作为数据的源或宿的应用程序。(问:为什么要强调分布式?)
- 运行在一个端系统上的应用程序怎样才能指令因特网向运行在另一个端系统上的软件发送数据呢?——与因特网相连的端系统提供了一个应用程序编程接口(Application Programming Interface,API),该API规定了运行在一个端系统上的软件请求因特网基础设施向运行在另一个端系统上的特定目的地软件交付数据的方式。因特网API是一套发送软件必须遵循的规则集合,因此因特网能够将数据交付给目的地。(第二章内容)
1.1.3 什么是协议?
- 人类协议
- 网络协议
- 网络协议中交换报文和采取动作的实体是某些设备地硬件或软件组件(这些设备可以是计算机、智能手机、平板电脑、路由器或其他具有网络能力的设备)。
- 一个协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
- 因特网(更一般地说是计算机网络)广泛的使用了协议。不同的协议用于完成不同的通信任务。
1.2 网络边缘
- 深入探究计算机网络的部件,从网络边缘向网络核心推进,查看计算机网络中的交换和选路。
- 主机=端系统(分为两类——客户和服务器。客户非正式地等同于桌面PC、移动PC和智能手机等;服务器非正式地等同于更为强大地机器)。
1.2.1 接入网
- 接入网:将端系统连接到其边缘路由器的物理链路。
- 边缘路由器:端系统到任何其他远程端系统的路径上的第一台路由器。
- 家庭接入:DSL、电缆、FTTH、拨号和卫星
- 宽带住宅接入的两种最流行的类型:数字用户线(Digital Subscriber Line,DSL)和电缆
- 企业(和大家庭)接入:以太网和WIFI
- 在公司和大学校园以及在越来越多的家庭环境中,通常是用局域网(LAN)将端用户连接到边缘路由器。
- 以太网是目前为止公司、大学和家庭网络中最为流行的接入技术。
- 广域网接入:3G和LTE
1.2.2 物理媒体
- 物理媒体划分为两类:导引型媒体(guided media)和非导引型媒体(unguided media)
- 导引型媒体:电波沿着固体媒体前行,如光缆、双绞铜线或同轴电缆。
- 非导引型媒体:电波在空气或外层空间中传播,如在无线局域网或数字卫星频道中。
- 双绞铜线
- 同轴电缆
- 光纤
- 陆地无线电信道
- 卫星无线电信道
1.3 网络核心
网络核心:即由互联因特网端系统的分组交换机和链路构成的的网状网路。
1.3.1 分组交换
- 在各种网络应用中,端系统彼此交换报文,为了从源端系统向目的端系统发送一个报文,源将长报文划分为较小的数据块,称之为分组(packet)。在源和目的之间,每个分组都通过通信链路和分组交换机(交换机主要有两类:路由器和链路层交换机)传送。
- 报文:包含协议设计者需要的任何东西。可以执行一种控制功能,也可以包含数据。
- 分组:为了从源端系统向目的端系统发送一个报文,源将长报文划分成为较小的数据块。
- 在源和目的之间,每个分组都通过通信链路和分组交换机(交换机主要有两类:路由器和链路层交换机)传送。
- 存储转发传输
- 多数分组交换机在链路的输入端使用存储转发传输。
- 存储转发机制:在交换机能够开始向输出链路传输该分组的第一个比特之前,必须接收到整个分组。(此处有存储转发时延)
- 排队时延和分组丢失
- 输出缓存(输出队列):用于存储路由器准备发往那条链路的分组。该输出缓存在分组交换中起着重要的作用。(此处有排队时延和分组丢失(丢包))
- 排队时延:如果到达的分组需要传输到某条链路,但发现该链路正忙于传输其他分组,该到达分组必须在该输出缓存中等待。
- 转发表和路由选择协议
- 转发表:用于将目的地址(或目的地址的一部分)映射成为输出链路。
- 路由选择协议:用于自动的设置这些转发表。(例如:一个路由选择协议可以决定从每台路由器到每个目的地的最短路径,并使用这些最短路径结果来配置路由器中的转发表。)
1.3.2 电路交换
通过网络链路和交换机移动数据的两种基本方法:电路交换和分组交换。
- 电路交换网络中的复用
- 分组交换与电路交换的对比
- 分组交换与电路交换的对比
1.3.3 网络的网络
1.4 分组交换网中的时延、丢包和吞吐量
期待目标:希望因特网服务能够在任意两个端系统之间瞬间移动我们想要的大量数据而没有任何数据丢失。
1.4.1 分组交换网中的时延概述
时延的类型
- 处理时延
检查分组首部和决定将该分组导向何处所需要的时间。 - 排队时延
一个特定分组的排队时延长度将取决于先期到达的正在排队等待向链路传输的分组数量。 - 传输时延
将所有分组的比特推(传输)向链路所需要的时间。实际的传输时延通常在毫秒到微秒量级。 - 传播时延
一旦一个比特被推向链路,该比特需要向路由器B传播。从链路的起点到路由器B传播所需要的时间是传播时延。 - 传输时延和传播时延的比较
- 传输时延是路由器将分组推出所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。
- 传输时延是L/R——L(bit):该分组的长度。R(bps):从路由器A到路由器B的链路传输速率。
- 传播时延是一个比特从一台路由器向另一台路由器传播所需要的时间,它是两台路由器之间距离的函数,而与分组长度或链路传输速率无关。
- 传播时延是d/s——d:路由器A和路由器B之间的距离。s:该链路的传播速率。
1.4.2 排队时延和丢包
丢包
如果到达的分组将发现一个满的队列。由于没有地方存储分组,路由器将丢弃该分组,即该分组将会丢失。
1.4.3 端到端时延
- Traceroute
- 端系统,应用程序和其他时延
1.4.4 计算机网络中的吞吐量
1.5 协议层次及其服务模型
1.5.1 分层的体系结构
1.协议分层
为了给网络协议的设计提供一个结构,网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件。
(1)应用层
- 应用层是网络应用程序及它们的应用层协议留存的地方。
- 应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息的分组。报文即这种位于应用层的信息分组。
- HTTP:提供了Web文档的请求和传送
- SMTP:提供了电子邮件报文的传输
- FTP:提供两个端系统之间的文件传输
(2)运输层
- 因特网的运输层在应用程序端点之间传送应用层报文。
- 我们将运输层分组称为报文段。
- TCP协议:向它的应用程序提供了面向连接的服务。
- UDP协议:向它的应用程序提供无连接服务。
(3)网络层
- 因特网的网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机。
(4)链路层
- 因特网的网络层通过源和目的地之间的一系列路由器路由数据报。为了将分组从一个结点(主机或路由器)移动到路径上的下一个结点,网络层必须依靠该链路层的服务。
(5)物理层
将帧中的一个一个比特从一个结点移动到下一个结点。
2.OSI模型
1.5.2 封装
1.6 面对攻击的网络
1.坏家伙能够经因特网将有害程序放入你的计算机中
2.坏家伙能够攻击服务器和网络基础设施
3.坏家伙能够嗅探分组
4.坏家伙能够伪装成你信任的人
1.7 计算机网络和因特网的历史
1.8 小结
第二章 应用层
2.1 应用层协议原理
2.1.1 网络应用程序体系结构
- C/S(client-server architecture)
- P2P(P2P architecture)
2.1.2 进程通信
- 多个端系统上的程序实际上是通过进程互相通信。(进程:可以被认为是运行在端系统中的一个程序)。
问:不太懂进程和程序之间的关系。也不太懂进程和报文的关系。报文究竟是什么?运输层的协议在进程通信中起了什么样的作用?
- 当进程运行在相同的端系统上时,它们使用进程间通信机制互相通信。进程间通信的规则由端系统上的操作系统确定。
- 当进程运行在不同的端系统上时,它们通过跨越计算机网络交换报文而相互通信。
1. 客户端和服务器进程
在给定的一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。
2. 进程与计算机网络之间的接口
- 多数应用程序是由通信进程对组成,每对中的两个进程互相发送报文。从一个进程向另一个进程发送的报文必须是通过下面的网络。进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。
- 套接字是同一台主机内应用层和运输层之间的接口。由于该套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口(API)。
- 应用程序开发者对于运输层的控制仅限于:
①选择运输层协议
②也许能设定几个运输层参数,如最大缓存和最大报文段长度等
3.进程寻址
- 因特网中,主机由其IP地址标识
- 端口号:发送进程需要将报文送往目的地的主机地址,还必须指定运行在接收主机上的接收进程(接受套接字),端口号即是起这个作用。
2.1.3 可供应用程序使用的运输服务
1.可靠数据传输
- 可靠数据传输:确保数据交付服务(协议提供)。
- 容忍丢失的应用:接收当一个运输层协议不提供可靠数据传输时,由发送进程发送的某些可能不能够到达接收进程的数据。
2.吞吐量
- 可用吞吐量:发送进程能够向接收进程交付比特的速率。(运输层协议能够以某种特定的速率提供确保的可用吞吐量)
- 带宽敏感的应用:具有吞吐量要求的应用程序。
- 弹性应用:能够根据情况或多或少地利用可供使用地吞吐量。
3.定时
运输层协议也能提供定时保证。
4.安全性
运输协议能够为应用程序提供一种或多种安全性服务。如:机密性、数据完整性和端点鉴别(详见第八章)
2.1.4 因特网提供的运输服务
1.TCP服务
- 面向连接的服务(第三章详细说明)
- 可靠的数据传送服务(可靠数据传输)
- 在应用层很容易用SSL来加强以提供安全服务(安全性)
- 拥塞控制机制
- 分组开销
2.UDP服务
- 不提供不必要服务的轻量级运输协议
- 无连接
3.因特网运输协议所不提供的服务
缺少对定时保证和吞吐量的保证
2.1.5 应用层协议
定义了运行在不同端系统上的应用程序进程如何相互传递报文。
2.1.6 本书涉及的网络应用
- 本章中详细讨论5种重要的应用:Web(HTTP协议)、文件传输(FTP)、电子邮件、目录服务(DNS)和P2P。
- 第七章中涉及多媒体应用,包括流式视频和IP电话。
2.2 Web和HTTP
2.2.1 HTTP概况
- 问1:什么是HTTP?
HTTP(HyperText Transfer Protocol,超文本传输协议)是Web的应用层协议。 - 问2:HTTP的功能?
定义了这些报文的结构以及客户和服务器进行报文交换的方式。 - 问3:Web页面由什么组成?
Web页面由对象组成。一个对象只是一个文件,诸如一个HTML文件、一个JPEG图形、一个Java小程序或一个视频片段这样的文件,且它们可通过一个URL地址寻址。 - 问4:什么是URL地址?
HTML基本文件通过对象的URL地址引用页面中的其他对象。 - 问5:URL地址由哪几个部分组成?
存放对象的服务器主机名和对象的路径名。
如:http:// www.someSchool.edu (主机名) /someDepartment/picture.gif (路径名) - 问6:为什么HTTP是一个无状态协议?
服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。
2.2.2 非持续连接和持续连接
- 问:什么是非持续连接?
每个请求/响应对是经一个单独的TCP连接发送。 - 问:什么是持续连接?
所有的请求及其响应经相同的TCP连接发送
1.采用非持续连接的HTTP
2.采用持续连接的HTTP
- 非持续连接的缺点:必须为每一个请求的对象建立和维护一个全新的连接,对于每个这样的连接,在客户端和服务器中都要分配TCP的缓存区和保持TCP变量,这给Web服务器带来了严重的负担。
问:HTTP报文和HTTP协议是同一回事吗?
2.2.3 HTTP报文格式
- 什么是HTTP报文格式?
HTTP规范包含了对HTTP报文格式的定义。 - HTTP报文包括了什么?
HTTP请求报文和HTTP响应报文
1.HTTP请求报文
GET /somedir/page.html HTTP/1.1
> 请求行
> 方法字段:当浏览器请求一个对象时,使用GET方法
> URL字段:浏览器正在请求对象/somedir/page.html
> HTTP版本字段:浏览器实现的是HTTP/1.1版本
Host:www.someschool.edu
connection:close
User-agent:Mozilla/5.0
Accept-language:fr
> 首部行
> Host:指明了对象所在的主机
> connection:close首部行:告诉服务器不希望麻烦地使用持续连接,要求服务器在发送完被请求的对象后就关闭这条连接
> User-agent首部行:指明用户代理,即向服务器发送请求的浏览器的类型
> Accept—language首部行:表示用户想要得到该对象的法语版本,仅是HTTP中可用的众多内容协商首部之一
2.HTTP响应报文
HTTP/1.1 200 OK
> 状态行(status line)
> 协议版本字段:HTTP/1.1
> 状态码:200
> 相应状态信息:OK
Connection:close
Date:Tue,09 Aug 2011 15:44:04 GMT
Server:Apache/2.2.3(CentOS)
Last-Modified:Tue,09 Aug 2011 15:11:03 GMT
Content-Length:6821
Content-Type:text/html
(data data data data data ...)
> 首部行(header line)
> Connection:close首部行:告诉客户,发送完报文后将关闭该TCP连接
> Date首部行:指示服务器产生并发送该响应报文的日期和时间(指服务器从它的文件系统中检索到该对象,插入到响应报文,并发送到该响应报文的时间)
> Server首部行:指示该报文是由一台Apache Web服务器产生的(服务器类型)
> Last-Modified首部行:指示了对象创建或者最后修改的日期和时间
> Content-Length首部行:指示了被发送对象中的字节数
> Content-Type首部行:指示了实实体中的对象是HTML文本
> (data data data data data ...)
> 实实体
2.2.4 用户与服务器的交互:cookie
- 在HTTP响应报文中的cookie首部行
- 在HTTP请求报文中的一个cookie首部行
- 在用户端系统中保留有一个cookie文件,并且由用户的浏览器进行管理
- 位于Web站点的一个后端数据库
2.2.5 Web缓存
- Web缓存器(代理服务器):代表初始Web服务器来
2.2.6 条件GET方法
2.3 文件传输协议:FTP
FTP命令和回答
- USER username
- PASS password
- LIST
- RETR filename
- STOR filename
- 331 Username OK,Password required
- 125 Data connection already open;transfer starting
- 425 Can’t open data connection
- 425 Error writing file
2.4 因特网中的电子邮件
2.4.1 SMTP
2.4.2 与HTTP的对比
2.4.3 邮件报文格式和MIME
2.4.4 邮件访问协议
1.POP3
2.IMAP
3.基于Web的电子邮件
2.5 DNS:因特网的目录服务
- 主机的一种标识方法是用它的主机名(hostname)。——人类便于记忆
- 主机也可以使用所谓的IP地址进行标识。——路由器便于记忆
- IP地址:一个IP地址由4个字节组成,并有着严格的层次结构。当我们从左到右扫描它时,我们会得到越来越具体的关于主机位于因特网何处的信息。
2.5.1 DNS提供的服务
- 域名系统(Domain Name System,DNS):能进行主机名到IP地址转换的目录服务。
- DNS:
①一个由分层的DNS服务器(DNS server)实现的分布式数据库
②一个使得主机能够查询分布式数据库的应用层协议 - DNS提供的服务:
①从主机名到IP地址的转换
②调用DNS可以获得主机别名对应的规范主机名以及主机的IP地址
③对提供的邮件服务器别名进行解析,以获得该主机的规范主机名及其IP地址
④DNS也用于在冗余的服务器之间进行负载分配
2.5.2 DNS工作机理概述
1.分布式、层次数据库
- 根DNS服务器
- 顶级域DNS服务器:负责域名
- 权威DNS服务器:在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录
2.DNS缓存
当某DNS服务器接收一个DNS回答时,它能将该回答中的信息缓存在本地存储器中。
2.5.3 DNS记录和报文
共同实现DNS分布式数据库的所有DNS服务器存储了资源记录。
1.DNS报文
2.在DNS数据库中插入记录
2.6 P2P应用
2.6.1 P2P文件分发
- 1.P2P体系结构的扩展性
- 2.BitTorrent
2.6.2 分布式散列表
- 1.环形DHT
- 2.对等方扰动
2.7 TCP套接字编程
2.7.1 UDP套接字编程
- 1.UDPClient.py
- 2.UDPServer.py
2.7.2 TCP套接字编程
- 1.TCPClient.py
- 2.TCPServer.py
2.8 小结
第三章 运输层
3.1 概述和运输层服务
运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。
将网络层的两个
3.1.1 运输层和网络层的关系
3.1.2 因特网运输层概述
3.2 多路复用与多路分解
- 无连接的多路复用与多路分解
- 面向连接的多路复用与多路分解
- Web服务器与TCP
3.3 无连接运输:UDP
3.3.1 UDP报文段结构
3.3.2 UDP检验和
3.4 可靠数据传输原理
3.4.1 构造可靠数据传输协议
- 经完全可靠信道的可靠数据传输:rdt 1.0
- 经具有比特差错信道的可靠数据传输:rdt 2.0
- 经具有比特差错的丢包信道的可靠数据传输:rdt 3.0
3.4.2 流水线可靠数据传输协议
3.4.3 回退N步
3.4.4 选择重传
3.5 面向连接的运输:TCP
3.5.1 TCP连接
3.5.2 TCP报文段结构
- 序号和确认号
- Telnet:序号和确认号的一个学习案例
3.5.3 往返时间的估计与超时
- 估计往返时间
- 设置和管理重传超时间隔
3.5.4 可靠数据传输
- 一些有趣的情况
- 超时间隔加倍
- 快速重传
- 是回退N步还是选择重传
3.5.5 流量控制
3.5.6 TCP连接管理
3.6 拥塞控制原理
3.6.1 拥塞原因与代价
- 情况1:两个发送方和一台具有无穷大缓存的路由器
- 情况2:两个发送方和一台具有有限缓存的路由器
- 情况3:4个发送方和具有有限缓存的多台路由器及多跳路径