本书是自顶向下进行的, 在第一章概述计算机网络的层次结构,从第二章开始从上到下一章介绍一层(大致), 最后是移动互联网/网络安全的内容
计算机网络中的每一层都具有一定的功能, 通过层间接口向上层提供服务, 通过调用下层接口实现一定的功能.
每一层的学习方式
- 原理
- 功能
- 向上层服务
- 向下层调用
- 应用(常见协议)
- 协议的时序: 确定通信双方"讲话的次序",定义了速度, 排序等。
- 协议的语法: 确定通信双方"如何讲话",定义了数据格式,编码和信号电平等。
- 协议的语义: 确定通信双方"讲什么",定义了用于协调同步和差错处理的控制信息。
概论
什么是互联网
互联网是很多的网络相互连接构成的网络的网络, 不同的网络处在互联网中不同的层次, 网络是边与点的集合
互联网的构成
- 节点
- 主机(端系统)及其上运行的应用程序
- 路由器、交换机等网络交换设备
- 边(通信链路)
- 接入网链路:主机连接到互联网的链路
- 主干链路:路由器间的链路
- 传输速率就是带宽(bps)
- 协议
- 支持互联网工作的标准
- 对等层网络在通信的时候应该遵守的标准, 包含语法, 语义, 时序
- Internet网协议就是以TCP/IP协议为主的协议组
互联网的服务
- 分布式的应用进程
- 用于通信基础设施(通过Socket API提供服务有面向连接的与无连接的服务)
网络的结构
- 网络的边缘: 包括主机与应用程序
- 网络的核心: 互联的路由器与网络中的子网
- 接入网: 网络边缘与网络核心连接的有线或者无线通信链路
网络的边缘
网络边缘有运行着分布式应用的主机, 提供CS/P2P两种通信模式
- CS模式: 服务器客户端模式, 客户端主动发起请求, 服务端响应, 数据存储在服务端, 存在单点故障与可靠性的问题(请求强度增大, 性能断崖式下降)
- P2P模式: 没有专门的服务器, 每个节点既是客户端也是服务器
连接方式
- 面向连接: 在通信之前先打招呼, 服务端准备资源, 建立连接, 在通信两段保持连接
- 有连接: 在面向连接的基础上让通信链路上的每个节点都维护通信的状态
- 无连接: 不打招呼直接发送请求.
面向连接的服务: 以TCP连接为代表, 具有
- 可靠的, 有序的: 支持确认与重传(不重复, 不遗漏, 不出错, 不失序)
- 流量控制: 发送方发送的数据包不会淹没接收方
- 拥塞控制: 网络拥塞的时候降低传输速度
- 用于http/ftp/telnet/smtp应用
无连接的服务: UPD用户数据报协议
- 不可靠
- 速度快
- 无流量控制拥塞控制
- 用于音视频多媒体应用
网络的核心
网络的核心是路由器连接的网状网
网络核心的关键功能
- 转发: 局部行为, 将分组从输入链路转移到输出链路
- 路由: 规划分组从源到目标的路径
网络核心数据通信方式
- 电路交换: 为每个连接预留一条道路, 当两者在通信的时候, 他们经过的链路不可被其他人使用, 注意: 不是说两者之间直接拉一根网线, 这与电话链接是类似的, 是通过建立一条虚电路在网络中找到一条可以使用的链路并独享
- 分组交换:
- 将要传输的数据分成一个个分组
- 单个分组一次性从一个路由器转发到另一个路由器
- 每个分组在一次转发的时候全速进行
电路交换
-
数据被一口气从发送端连接到接收端, 一旦连接建立, 即使没有数据交换, 在没有结束通信之前链路资源仍然不会释放
-
链路资源独享, 保证了连接的性能
-
线路分片技术
将一个线路分成多个小片, 实现在一条线路上跑同时跑多个数据
- FDMA: 频分复用技术, 不同的数据包使用不同的频率叠加在一起发送, 到接收端再过滤
- TDMA: 时分复用技术, 不同的数据包以不同相位同周期发送
- WDMA: 波分复用技术(光通信)
-
线路交换不适合计算机的通信
- 连接建立需要较长的时间(在整个链路上建立一个虚电路进行通讯)
- 计算机之间的通信具有突发性, 使用线路交换会浪费较多的资源
- 可靠性不好
分组交换
- 主机与主机的通信以分组为单位存储转发
- 分组到达某一个节点之后, 分组转发设备要将数据存下, 再转发
- 节点之间的通信链路不再使用分片技术, 分组全速通过链路
- 实现了传输过程中只占用了一部分链路而不是整条链路, 实现了线路的共享性(一段连续时间给这个用, 一段连续时间给另一个人用, 看起来很像时分多路复用, 但是划分方式没有固定的模式, 我们称之为统计多路复用)
- 由于需要进行存储, 所以存在存储的延迟和排队延迟
分组交换时延计算
-
时延: 是数据(一个报文或分组,甚至比特)从网络或链路的一段传送到另一端所需要的时间
-
传输延迟dtransd_{trans}dtrans 是从发送数据帧的第一个比特算起, 到该帧的最后一个比特发送完毕所需的时间, 网卡把数据包放在链路上的时间
传输时延=分组长度L(b) /链路带宽R(bps)
-
传播延迟dpropd_{prop}dprop: 电磁波在信道中需要传播一定的距离而花费的时间,
传播时延=物理链路长度d(m)/电磁波在信道上的传播速率s(m/s) -
处理延迟dprocd_{proc}dproc:: 主机或路由器处理所收到的分组(查路由表, 检错)的时间
-
排队延迟dqueued_{queue}dqueue: 分组在输入队列中排队等待处理,在输出队列中等待转发,就形成了排队时延。[随机的, 如果不巧队列满了, 数据包就会被丢弃]
-
总延迟
dnodal=dproc+dqueue+dtrans+dprop d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop} dnodal=dproc+dqueue+dtrans+dprop -
发送时延是发送方将数据从网卡放在链路上的延迟
接收时延接收方收到数据从链路装载在网卡的延迟
两者是一边发送, 一边接收的, 不是发送发发完接收方才去接收的, 所以发送与接收时延只能计算一次
进行这类计算的时候最好画一个时延图
两者比较: 对于同一带宽链路, 分组交换支持的用户数目更多, 例如
有一条1Mbps的通信链路, 假设活跃用户需要的带宽是100Kbps, 用户只有p=10%p=10\%p=10%的时间是活跃的(因为计算机通信具有很强的突发性)
-
假设采用线路交换最多支持的用户数目为NNN
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ N&=\frac{1Mbps… -
假设采用分组交换支持的用户数目NNN
这NNN人中有小于等于nnn人活跃的概率是
∑i=0nC35ipi(1−p)N−i \sum_{i=0}^{n}C^{i}_{35}p^i(1-p)^{N-i} i=0∑nC35ipi(1−p)N−i
也就是说这NNN人中有大于nnn人活跃的概率是
1−∑i=0nC35ipi(1−p)N−i 1-\sum_{i=0}^{n}C^{i}_{35}p^i(1-p)^{N-i} 1−i=0∑nC35ipi(1−p)N−i
当有N=35N=35N=35个用户, n=9n=9n=9人以上活动的概率是0.0004, 这里选择9人是因为: 如果线路满载, 理论可以提供的用户数是10, 但是如果真的有10人在用, 由于分组交换存在分组延迟排队等原因, 队列会越排越长, 最后网络崩溃, 所以nnn只能为9相当于说有在分组交换时, 有0.04%的概率无法满足使用, 但是我们还有缓存队列来应付这0.04%的突发的情况
让分组交换像电路交换一样工作
有很多服务需要高实时性(例如音视频服务), 我们想让网络具有线路交换的特性. 有两种实现方式
- 数据报网络(UDP): 在请求与响应传输的时候不需要握手, 直接传输(数据报包含了目标主机全部信息), 路由器只负责转发, 不维护主机之间的状态
- 虚电路: 使用信令在途径的所有交换设备上建立一个虚电路表, 写明要吧数据数据包转发到哪里(而不是查询路由表)
接入网和物理媒体
网络边缘的端系统通过接入网将自己接入网络核心
使用modem接入
利用原有的电话网, 将上网的数据通过调制解调器(modem)调制为电话线上的4KHz的语音频段信号(同时还实现了多路复用), 局端将其中的数据解调出来.
但是网速只有56Kbps, 不能同时打电话与上网
DSL接入
与modem类似, 仍然使用电话网, 使用4KHz的音频信号以上的信号段, 将一部分频段专门用于上传, 一部分专门用于下载(虽然打电话只用到了4KHz, 但是电话线也不是不可以传输高于4KHz的信息)
线缆网络
对有限电视信号线进行双向改造, 采用频分复用技术, 共享带宽(在数据链路层会介绍)
电缆网络
利用电网进行数据传输
Ethernet
企业一般使用Ethernet接入互联网, Ethernet可以理解为是可能不遵守Internet协议的网络. 或者说Ethernet是一个类, Internet是一个实例. 企业内网直接连接到外网交换机上
通过移动互联的方式接入
可以通过无线局域网WLAN, 移动网络接入互联网, 卫星通信
常见的接入媒介
- 导引型媒体:
信号沿着固体媒介被导引:同轴电缆、光纤、 双绞线 - 非导引型媒体:
开放的空间传输电磁波或者光信号,在电磁或者光信号中承载数据
Internet结构与ISP
前面我们将互联网划分为主机与链路, 主机节点构成的子系统叫网络的边缘, 交换节点与链路构成了网络的核心, 通过接入网将两者连起来
还可以将关系比较密集的节点划分成一个网络, 例如可以把一个ISP(互联网服务提供商)的网络划分为一个子网, ISP的网络互相连接构成互联网
- 端系统通过接入ISP(比如所在的大学, 所在的住宅楼)连接到互联网,
- ISP之间相互通信实现互联
- ICP(互联网内容提供商)也会构建自己的网络并将网络接入离数据中心机房很近的ISP的网络
分组延迟/丢失/吞吐量
网络核心有线路交换和分组交换的方式, 分组交换的共享性比较好, 但是存在更多的延迟与分组的丢弃
分组的丢失与延迟
当路由器上的分组要通过链路, 链路上有其他分组的时候, 分组需要进行排队等待, 这造成了分组排队延迟, 如果分组到达时队列已满, 分组会被丢弃. 队列不需要很大, 分组在经过过长时间的等待即使没有丢失也已经变得无意义了
四种延迟(复制前面)
-
传输延迟dtransd_{trans}dtrans 是从发送数据帧的第一个比特算起, 到该帧的最后一个比特发送完毕所需的时间, 网卡把数据包放在链路上的时间
传输时延=分组长度L(b) /链路带宽R(bps)
-
传播延迟dpropd_{prop}dprop: 电磁波在信道中需要传播一定的距离而花费的时间,
传播时延=物理链路长度d(m)/电磁波在信道上的传播速率s(m/s) -
处理延迟dprocd_{proc}dproc:: 主机或路由器处理所收到的分组(查路由表, 检错)的时间
-
排队延迟dqueued_{queue}dqueue: 分组在输入队列中排队等待处理,在输出队列中等待转发,就形成了排队时延。[随机的, 如果不巧队列满了, 数据包就会被丢弃]
-
总延迟
dnodal=dproc+dqueue+dtrans+dprop d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop} dnodal=dproc+dqueue+dtrans+dprop
排队延迟
排队延迟取决于流量强度III, 流量强度有I=LαRI=\frac{L\alpha}{R}I=RLα, RRR是链路传输速率, LLL是分组长度, α\alphaα是每秒需要放出的分组数, III的意义就是流量到达的速率是传输速率的几倍, 流量强度接近于1, 排队延迟接近无穷大
吞吐量
单位时间内源主机到目标主机传输的有效比特量, 有瞬间吞吐量和平均吞吐量
吞吐量取决于数据链路中速率最低的链路, 也叫瓶颈链路
在实际网络中, 瓶颈链路的速率可能并不低, 但是共享人数过多造成速率较低
协议层次与服务模型
网络是一个复杂的系统, 通过分层的方式实现, 一个层次可以通过层间接口调用他的下层的服务实现一个功能. 将网络复杂的功能分解成若干功能分明的层次
- 一个层可以调用下层提供的服务
- 对等层的模块之间通过协议交换控制信息
- 一个层可以通过下层提供的信息, 结合对等层交换获得的信息实现自己的功能, 从而为上层服务
- 一个层的一部分功能(服务)可以通过层间接口被上层调用
术语
-
服务
- 服务: 低层实体向上层实体提供他们通信能力(功能), 例如顺丰提供物流业务
- 服务用户: 某层提供的服务被上层的服务用户使用, 也就是下层服务的调用者, 例如用户调用顺丰的服务
- SAP服务访问点: 层之间的点, 用于区分不同的服务用户, 例如传输层的服务访问点是端口, 例如顺丰通过寄件地址上门取件
- 原语: 上层使用下层用户的形式, 例如Socket API中的函数就是原语, 例如上层关闭链接, 我使用了顺丰服务的代收货款这一功能(原语), 更通俗的理解就是函数调用
-
服务的类型
- 面向连接的服务: 两个对等层在通信之前要先进行连接, 为通信做准备的服务
- 无连接的服务: 两个对等层在通信之间不需要建立连接, 不需要预备资源的服务
-
服务与协议的区别
- 服务是垂直的层与层之间的关系, 在一个系统内部, 相邻的两个实体在SAP上, 上层使用原语调用下层的服务
- 协议是对等层的实体在通讯时的规则
-
数据单元DU
在这个图中, 我们假设我们在第n层, 上层是n+1层
- SAP服务访问点: 存在于层间服务之间, 层间有多个SAP, 每个SAP具有唯一识别地址
- SDU服务数据单元: 上层(n+1)交给我, 要求我进行传输的数据单元
- ICI接口控制信息: 本层在SDU前面加入的控制信息(用于可以顺利通过与下层的SAP)
- IDU接口数据单元: 本层中ICI与SDU的组合, 用于向下层传递SDU
- PCI协议控制信息: 本层在SDU前面加入控制信息用于实现本层功能(也写成Header)
- PDU协议数据单元: 本层的PCI与上层的SDU组合形成PDU, 用于对等层的通信
- 注意: ICI只是上层用于通告SAP的, 与SDU组成产生IDU, ICI在通过后可能被丢弃, PIC是本层的控制信息头部, 用来与SDU结合产生PDU
- SDU在传输的时候, 可能是一个SDU完整的传输, 如果SDU过大则会切片传输, 如果SDU过小则会组合传输
-
PDU的不同名称
- 在应用层叫应用报文 Message
- 在传输层叫报文段 Segment, TCP段/UDP数据报
- 在网络层叫分组 Packet, 如果是无连接的也可以叫数据报 Datagram
- 在链路层叫帧 Frame
- 在物理层叫位 Bit
分层带来的特性
- 概念化: 方便描述网络组件的关系
- 结构化: 易于维护与升级
- 低效化: 层之间的交互会降低效率
互联网协议栈(5层)
- 物理层: 将上层交来的帧转化成物理信号
- 链路层: 在相邻两点传输以帧为单位的数据**[点到点]**
- 网络层: 在主机之间传输以分组为单位的端到端的数据**[主机到主机]**
- 传输层: 实现主机与主机之间的(可靠的)数据传输**[进程到进程]**
- 应用层: 实现应用报文与应用报文之间的交互**[应用到应用]**
ISO/OSI参考模型
比五层协议多两层
- 表示层: 允许应用解释传输的数据, e.g., 加密,压缩,机器相关的表示转换
- 会话层: 数据交换的同步,检查点,恢复
封装与解封装
源主机向目标主机发送请求, 在逻辑上是直接通信, 实际上需要进行多次的存储转发, 在转发时, 遇到交换机(二层交换机)要进行解封装到数据链路层进行转发与重封装, 遇到路由器(三层路由器)要进行解封装到网络层进行转发与重封装
应用层
应用层原理
网络应用的体系结构
- C/S架构: 客户服务器模式, 服务器一直运行, 守护在特定端口, 客户端请求服务器响应, 资源在服务器, 可扩展性差
- P2P模式: 节点既请求别人的服务, 自己也作为服务器, 参与的主机之间可以间歇性连接, 改变IP等
- 混合模式
应用进程需要解决问题
- 标识与寻址: 用于服务器找到用户
- 下层提供的服务模型与使用形式
- 如何使用下层服务完成报文交换
编址与寻址
-
地址: 用户的主机IP, 使用的下层协议TCP/UDP, 进程运行在端口上(TCP与UDP可以使用相同的端口号, TCP与UDP可以同时使用相同的端口号, 但是TCP中一个端口号只能用一次)
-
寻址, 穿过SAP需要的信息:
- 要传输的内容: 应用层Message
- 谁发的: 本机的IP+TCP/UDP端口
- 发给谁: 对方的IP+TCP/UDP端口
-
Socket
我们不能每次传输报文的时候都发送双方IP与端口号, 这样会消耗很多资源, 可以将这四个值映射为一个Socket值(一个整数), 第一次通信下层返回一个Socket值, 如果之后仍然是和原来的目标实体进行连接, 就直接向下层Socket值
- TCP由于需要握手(面向连接), Socket是代表源IP, 目标IP, 源端口, 目标端口的一个双方的标识, 在传输数据的时候传输数据, Socket
- UDP由于不需要握手(无连接), Socket只是代表源IP, 源端口的一个本地标识, 应用层在发送UDP请求的时候需要传输消息, Socket, 对方的IP与对方UDP端口
Socket使得连接便于管理, 减少了与传输层连接的时传输的数据量
可以这么理解, 我使用顺丰寄快递, 每次都要写寄件人收件人信息就很烦, 于是我们可以用一个数字代表收寄信息
- 对于我经常联系(TCP)的朋友, 我可以把我的和对方的信息全部打包成一个数字, 以后写收寄人的时候直接写一个数字就可以了
- 对于我偶尔联系(UDP)的朋友, 我可以把我的寄件地址打包成一个数字, 以后我的信息就可以用数字填写了, 收件人信息还要手动填写
应用层需要传输层提供的服务模型
- 数据丢失率
- 延迟
- 吞吐量
- 安全性
传输层提供的服务
-
TCP服务
- 可靠的
- 具有流量控制, 拥塞控制
- 尽力而为的
- 面向连接的
-
UDP服务
- 不可靠数据传输
- 不提供可靠流量控制、拥塞控制、时间、带宽保证、建立连接
-
UDP的优点
-
能够区分不同的进程,而 IP服务不能
-
在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程
-
无需建立连接,省去了建立连接时间,适合事务性的应用
-
不做可靠性的检查工作,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用
-
节约了为了实现可靠性(准确性、保序等)付出的时间代价(检错重发)
-
没有拥塞控制和流量控制,应用能够按照设定的速度发送数据
而在TCP上面的应用,应用发送数据的速度和主机向网络发送的实际速度是不一致的,因为有流量控制和拥塞控制
-
-
安全性
- TCP与UDP都没有加密, 明文传输
- SSL: 在TCP上面实现加密TCP连接, 保证了私密性, 数据完整性, 提供端到端的鉴别
Web应用与http协议
术语
-
Web的对象: Web页面是由一些对象构成的, 对象一般包括图像, 声音…
-
基本HTML文件: Web页包含了一个基本的HTML文件, 这个文件中包含了对若干对象的引用
-
**URL(**统一资源定位符): 通过URL实现对每个对象的访问, 格式是
Prot://user:[email protected]:port/it/is/path 协议 [口令] 主机名 [端口] 路径 http:// www.baidu.com /picture
- 网站大部分支持匿名访问, 这个时候口令就可以不写
- 协议有默认端口号, 也可以不写
-
RRT(round-trip time): :一个小的分组从客户端到服务器,再回到客户端的时间(传输时间忽略)
http协议
-
Web的应用层协议
-
采用C/S模式: 客户端请求, 接收, 展示Web对象, 服务端对请求进行响应
-
采用TCP协议
- 服务器启动http服务, 在tcp80端口上添加一个守护进程(waiting socket)
- 客户发起一个默认为80端口的请求
- 服务器接受客户请求, 新建一个Socket用于与客户机通信, 返回信息
- 客户浏览器与服务器互相交换http报文
- 无状态的, 不维护主机与主机之间的通信
-
有持久与非持久的http
http在建立连接的时候要进行多次请求, 例如连接建立的请求, 请求多个数据的请求
-
非持久的http
每次TCP连接最多可以发送一个对象, 下载多个对象需要多个TCP连接, http1.0默认使用
-