计算机网络
绪论
计算机网络的分类
按范围
- 广域网 WAN 10km~1000km
- 城域网 MAN 5km~50km
- 局域网 LAN 10m~1km
- 个人区域网 PAN 1m~10m
传输技术
- 广播式网络(局域网, 广域网中的:无线网络和卫星通信网络)
- 点对点网络(广域网大部分)
按使用者
- 公用网
- 专用网
按交换技术
- 电路交换网络
- 报文交换网络
- 分组交换网络
按介质
- 有线
- 双绞线
- 同轴电缆
- 无线
- 蓝牙
- 微波
- 无线电
计算机网络的性能指标
时延
- 发送时延(传输时延): 分组长度/信道宽度
- 传播时延: 信道长度/光速
- 处理时延: 处理分析所花时间
- 排队时延
时延带宽积: 传播时延 * 信道带宽, 意义是发送端发送的第一个 bit 到达终点时, 发送端已经发送了多少 bit
往返时延 RTT(round trip time): 发送端从发送分组到收到确认的时间
吞吐量(throughput): 数据量/时间
速率(speed): 又叫数据传输速率, 数据率, 比特率, 比特/秒, 最高数据传输速率叫做带宽
信道利用率: 有数据通过的时间/总时间
计算机网络体系结构与参考模型
从低到高, 从下到上, 从 1 到 n, 从物理层到应用层
协议数据单元 PDU = 服务数据单元 SDU + 协议控制信息 PCI
协议: 语法, 语义, 同步 语法规定了传输数据的格式; 语义规定了所要完成的 功能,即需要发出何种控制信息、完成何种动作及做出何种应答: 同步规定了执行各种操作的条件、时序关系等,即事件实现顾序的详细说明。
接口: 同一节点内相邻两层间交换信息的连接点
服务: 下层为近邻的上层提供的功能调用
服务分类:
- 面向连接, 无连接
- 可靠, 不可靠
- 有应答, 无应答
ISO/OSI: 物理层, 数据链路层, 网络层, 传输层, 会话层, 表示层, 应用层 低三层为通信子网, 高三层为资源子网
TCP/IP: 网络接口层, 网际层, 传输层, 应用层
综合两者, 得到五层: 物理层, 数据链路层, 网络层, 传输层,应用层
物理层
通信基础
数据时传送信息的实体, 信号是数据的电气电磁表现, 是数据传输时的存在形式 数据传输可分为串行和并行 码元是用一个固定时长的信号波形表示一位 k 进制数字, 时长内的信号叫 k 进制码元, 时长称为码元宽度 信源是数据的源头, 信宿是数据的重点, 信道是信号传输媒介 通信按交互方式分为
- 单向通信
- 半双工通信: 任何一方不能同时发送接收信息, 所以需要两条信道
- 全双工通信: 双方可以同时发送接收信息, 也需要两条信道
速率(数据率): 单位时间传输的数据量
- 码元传输速率(波特率): 单位时间传输的码元个数
- 信息传输速率: 单位时间内传输的二进制码元数(bit)
码元:一个码元就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2bit数据、4bit数据!你发送一个脉冲信号,如果就可以携带4bit数据,肯定发送速率更快啊! 那么怎么实现一个脉冲信号就能携带多个bit数据呢?就需要一定的技术了,比如设置模拟信号中信号的频率、相位、振幅啥的。举个例子:把振幅分成四种,低(00)、中(01)、高(10)、很高(11),这样我发一个脉冲信号,它的振幅是低,那就说明发送的是00(也就是2bit),它的振幅是中(01),发送的就是01(也就是2bit)……也就实现了一个脉冲信号,携带2bit的功能…(举个不恰当的例子让大家理解而已,明白啥意思就行) 再说一次,一个码元就是一个脉冲信号!波特率指的就是1秒能发送多少个码元,也就是1秒能发送多少个脉冲信号! 一个码元能携带1bit数据,那么比特率 = 波特率! 一个码元能携带2bit数据,那么比特率 = 2倍的波特率! 一个码元能携4bit数据,那么比特率 =4倍的波特率!
电路交换、报文交换与分组交换
电路交换 数据传输前建物理通信路径, 用户始终占用端到端的固定传输带宽 包括: 连接建立, 数据传输, 连接释放 优点:
- 通信时延小
- 有序传输
- 无冲突
- 适用范围广: 既能数字信号又能模拟信号
- 实时性强
- 控制简单
缺点
- 建立连接时间长
- 线路独占
- 灵活性差
- 难以规格化
报文交换 数据交换以报文为单位, 报文在交换节点采用存储转发方式传输 优点:
- 无须建立连接
- 动态分配线路
- 提高线路可靠性
- 提高线路利用率
- 提供多目标服务
缺点
- 存储转发造成转发时延
- 对报文大小无限制
分组交换 相比于报文交换限制了数据块大小, 形成分组 packet 优点
- 无须建立连接
- 线路利用率高
- 简化存储管理(分组大小固定)
- 加速传输
- 减少出错和重发数据量
缺点
- 存储转发时延
- 分组需要额外信息量
- 分组可能失序重复丢失
数据报和虚电路是分组交换的两种形式
- 数据报
- 不需要建立连接
- 网络尽最大努力交付
- 分组汇总包含源地址目标地址
- 存储转发有时延
- 网络有冗余路径
- 线路利用率高
- 虚电路 分组发送前, 发送方接收方建立逻辑相连的虚电路, 虚电路建立确定了虚电路对应的物理路径
- 建立拆除需要时间
- 建立连接时确定路由
- 可靠传输, 流量控制
- 容易损坏
- 分组不包含目的地址, 而是包含虚电路标识符
传输介质
- 双绞线: 局域网, 电话网, 需要放大器放大信号
- 同轴电缆: 传输距离更远, 但更贵
- 光纤
- 损耗小, 中继距离长, 适合远距离传输
- 抗干扰好, 保密好
- 体积小重量轻
- 无线介质
- 无线电波: WLAN
- 微波, 红外线, 激光
物理层设备
中继器 将数字信号整形并放大再转发, 中继器两端的网络部分是网段而不是子网(在以太网环境中,一个网段其实也就是一个冲突域(碰撞域))
集线器 Hub 实质上是多端口的中继器, hub 将信号整形放大, 转达到其他所有端口 主要使用双绞线
数据链路层
数据链路层的功能
帧定界、帧同步与透明传输
两台主机之间传输信息时,必须将网络层的分组封装成帧, 将一段数据的前后分别添加首部和尾部,就构成了帧. 首部和尾部中含有很多控制信息,它们的一个重要作用是确定帧的界限,即帧定界。 帧同步指的是接收方应能从接收到的二进制比特流中区分出帧的起始与终止。如在 HDLC (High-level Data Link Control,高级数据链路控制)协议中, 用标识位 F (01 111 110)来标识帧的开始和结束。 通信过程中,检测到帧标识位 F 即认为是帧的 开始,然后一旦检测到顿标识位 F 即表示帧的结束。
每种数据链路层 协议都规定了帧的数据部分的长度上限: 最大传送单元 (MTU)。 透明传输: 不管数据是什么样的组合, 都应该能在链路上传输(即忽视数据部分中的特殊串)
组帧
字符计数法 在帧头部使用计数字段标明帧内字符数 如果计数字段错误将导致后续全部出错
宇符填充的首尾定界符法 使用特定字符确定一帧的开始和结束 (转义字符 esc)
零比特填充的首尾标志法 使用特定 bit 串表示帧开始和结束如 01 111 110 为了区分数据中的 01 111 110 和开始结束串, 发送方对连续的 111 11 后加 0, 接收方相应删除 0
违规编码法 如用曼彻斯特编码, 1 0 代表高低电平, 开始结束使用违规信号串表示
差错控制
检错编码
- 奇偶校验 奇校验: 数据+校验位 有奇数个 1 偶校验: 数据+校验位 有偶数个 1
- 循环冗余码 CRC (cyclic redundancy code) m bit 信息, r bit 校验, m+r bit 帧, 接收发送事先商定 G(x)(最高位最低位必须是 1) 例如: G(x) = 1101, 信息 M=101 001 校验时得到的余数每个余数对应一位出错(需要手算表格)
纠错编码
海明码
\(N = k + r <= 2^r - 1\)
数据位 D, 校验位 P P 在 2n位置 Di 中的 i 决定参与哪些 P 的校验, \(P = D_{xxx} \oplus D_{xxx} \oplus ...\)
指错字
\(G_i = P_i \oplus D_{xxx} \oplus D_{xxx} \oplus ...\)
G4G3G2G1 就是出错位, 都为 0 时表示无错
H7 H6 H5 H4 H3 H2 H1 |
特点: 指错字为 0 不一定无错, 一位出错和两位出错不能由指错字区分(配合奇偶校验可以区分)
流量控制与可靠传输机制
流量控制:
停止等待流量控制 sender每发送一帧, 都要等待 receiver 的应答信号, 之后才能发送下一帧
滑动窗口流量控制 发送窗口: sender 维持一组连续的允许发送的帧的序号 接收窗口: receiver 维持一组连续的允许接收的帧的序号 发送窗口大小 \(W_T\) : 表示在还未收到确认时, sender 最多可以发送多少个帧
接收窗口大小 \(W_R\) receiver只接收接收窗口内的帧 sender 每收到一个确认帧, 窗口就前移一帧 receiver 每收到一个帧, 窗口就前移一帧 链路层的晃动窗口大小固定 \(W_R = 1\)时可保证帧有序接收 按窗口大小可分为
- 停止等待协议: \(W_T = 1\), \(W_R = 1\)
- go back N 协议: \(W_T > 1\), \(W_R = 1\)
- 选择重传协议: \(W_T > 1\), \(W_R > 1\)
可靠传输
- 确认: 有些情况将确认捎带在回复帧中, 称为捎带确认
- 超时重传: 自动重传请求 ARQ(automatic repeat request)分为:
- 停止等待协议
- go back N 协议
- 选择重传协议
多帧滑动窗口与后退 N帧协议(GBN) 在后退N帧式 ARQ 中,当receiver检测出失序的信息帧后,要求sender重发最后一个正确接收的信息帧之后的所有未被确认的帧 或者当sender发送了 N 个帧后,若发现该 N 个帧的前一个帧在计时器超时后仍末返回其确认信息,则该帧被判为出错或丢失,此时sender重传该出错帧及随后的 N个帧。 即接收方只允许按顺序接收帧。 为每个帧设置一个计时器 receiver 可以在连续收到好几个正确帧后才对最后一个帧确认, 即累计确认
多帧滑动窗口与选择重传协议 (SR) 每个发送缓冲区设置一个计时器, 计时器超时, 缓冲区内的帧会重传 receiver 收到错误帧会回复 NAK, sender 对 NAK 指定帧重传 窗口大小的最大值是序号最大值的一半, 否则 receiver 无法区分新帧和重传帧 receiver 端准备缓冲区存放乱序帧, 大小等于接收窗口大小
介质访问控制
为使用介质的每个结点隔离来自同一信道上其他结点 所传送的信号。 用来决定广播信道中信道分配的协议属于数据链路层的 一个子层,称为介质访问控制(Medium Access Control, MAC) 子层。
多路复用
频分多路复用 FDM
时分多路复用 TDM 统计时分多路复用 STDM 动态分配时隙
波分多路复用 WDM
按光频
码分多路复用 CDM 码分多址 CDMA(code division multiple access) 每个时间片再分为 m 个时间槽, 称为码片(chip) m=64 或 128 每个站点分得不同码片序列, 各个码片序列彼此正交 例如
A 站点码片序列 S1 = 000 110 11, --- ++- ++
A 站点 1 = 000 110 11
A 站点 0 = 111 001 00
B 站点码片序列 S2 = 110 100 01, ++- +-- -+
A B 正交
信道上 S1-S2
分离: (S1-S2)*S1 = 1 (S1-S2)*S2 = -1
随机访问介质访问控制 (争用型协议)
ALOHA 协议(additive link on-line hawaii system)
载波监听多路访问 CSMA 协议(carrier sense multiple access) 监听后再发送数据
载波监听多路访问/碰撞监听 CSMA/CD (collision detection)
如以太网 存在争用期, 即使检测也无法察觉即将到来的碰撞, 因此以太网规定了最短帧长(争用期发送的数据长度)
这里考虑最长的被发现冲突的时间:假设从A到B传播时延是t,那么2t时候才能被A或者B感受到冲撞。 那么小于2t内发送的数据的帧长无法检测,为什么呢? 因为冲撞信号发回来需要2t,但是发回来时,下一帧已经发送了,所以,你这个碰撞信号是谁的,搞不清。
所以要保证, 发送数据的第一个 bit 从 A 到 B 再到 A 时, A 还没有发送完数据
退避算法: 截断二进制指数退避算法
- 确定基本退避时间(一般=争用期)
- 定义参数 k = min{重传次数, 10}
- 从集合{0, 1, 2, 3 ... 2k-1}中随机选数 r, 退避时间 = r * 基本退避时间
- 重传次数过多(16 次)说明网络太拥挤, 抛弃此帧并向高层报错
CSMA/CA 协议 碰撞避免(collision avoidance) 如无线局域网, 802.11, 使用链路层确认重传方案(ARQ automatic repeat request) 为避免碰撞, 站发送完成后, 必须等待一段时间(继续监听)才能发送下一帧(帧间间隔 IFS interframe space), IFS 包括
- 短帧间间隔 SIFS: 例如 ACK 帧, CTS 帧, 分片后的数据帧, 回答 AP 探询帧之后接 SIFS
- 点协调帧间间隔 PIFS: PCF 操作中使用
- 分布式协调帧间间隔 DIFS: 用于异步帧竞争访问的时延
信道从忙态变为空闲态时,站要发送数据帧,不仅都要等待一个时间间隔,而且要进入争用窗口,计算随机退避时间以便再次试图接入信道。 当且仅当检测到信道空闲且这个数据帧是要发送的第一个数据帧时,才不使用退避算法。其他所有情况都必须使用退避算法,具体为: ①在发送第一个帧前检测到信道忙;②每次重传;③每次成功发送后要发送下一帧。
隐蔽站问题: AB 互相检测不到对方, 但都发送到同一站点AP导致碰撞 802.11 允许对信道预约 源站发送前先广播请求发送 RTS(request to send)控制帧
源地址, 目标地址, 持续时间
, 若信道空闲, AP 广播允许发送 CTS(clear to send)控制帧, 指示源站可以发送, 指示其他站不要发送
轮询访问:令牌(token)传递协议
以太网与 IEEE 802.3
通常 802.3 局域网简称以太网
网卡, 网络适配器 (Adapter) 或网络接口卡 (Network Interface Card, NIC) 计算机与外界局域网的连接是通过主机箱内插入的一块网络接口板实现的。 网卡上装有处理器和存储器,是工作在数据链路层的网络组件。 网卡和局域网的通信是通过电缆或双绞线以串行方式进行的,而网卡和计算机的通信则是通过计算机主板上的 io 总线以并行方式进行的。 因此,网卡的重要功能就是进行数据的串并转换。网卡不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与按收、帧的封装与拆封、介质访问控制、数据的编码与解码及数据缓存功能等。 全世界的每块网卡在出厂时都有一个唯一的代码,称为介质访问控制(MAC)地址,这个地址用与控制主机在网络上的数据通信。数据链路层设备(网桥、交换机等)都使用各个网卡的 MAC 地址。 另外,网卡控制着主机对介质的访问,因此网卡也工作在物理层,因为它只关注比特,而不 关注任何地址信息和高层协议信息。
MAC 帧 MAC 地址长 6 byte
- 前导码: 前同步码: 实现 mac 帧比特同步 帧开始界定符
- 地址
- 类型: 携带的数据应交给哪个协议处理
- 数据: 最短 64-6-6-2-4=46 byte, 最长 1500 = MTU 最大传送单元
- 校验码 FCS: 采用 CRC 算法校验内容从源地址到数据
速率>=100Mb/s 的称为高速以太网
无线局域网 IEEE 802.11
分类
有固定基础设施无线局域网 使用星形拓扑, 中心为接入点 AP(access point) MAC 层使用 CSMA/CA 最小构件为基本服务集BSS(basic service set), 本 bss 内和 bss 之间通信都需要通过 AP
无固定基础设施移动自组织网络(自组网络 ad hoc network)
各节点地位平等
MAC 帧(地址 123) 其中地址字段
对以上情况, 现在 R1 要向 A 发送数据:
- R1 通过 ip 数据报得到 A ip 地址, 用 ARP 得到 A MAC 地址, R1 将 ip 数据报封装为 802.3 帧, 源地址为 R1 MAC, 目的地址为 A MAC
- AP 收到 802.3 帧, 转换为 802.11 帧, 接受地址=A MAC, 发送地址=AP MAC, 地址 3=R1 MAC
从 A 到 R1
- A 生成 802.11 帧, 接收地址= AP MAC, 发送地址=A MAC, 地址 3=R1 MAC
- AP 收到 802.11 帧, 转换为 802.3 帧, 源地址为 A MAC, 目的地址为 R1 MAC
VLAN 基本概念与基本原理
以太网是一个广播域, 如果设备太多会导致太多广播帧 通过虚拟局域网 VLAN 将大局域网分割成逻辑上的 VLAN, 每个 VLAN 是一个较小的广播域 802.3.ac 交换机识别处理 VLAN, 不同VLAN通信必须通过路由器,即使所有设备都连接到同一交换机。
数据链路层设备
网桥的基本概念
多个以太网通过网桥连接就形成更大的以太网 原来的每个以太网称为一个网段 网桥工作在 MAC 子层
局域网交换机(以太网交换机)
工作原理: 检测从以太端口来的帧的源地址目的地址, 与系统内部的动态交换表进行比较,若数据帧的源 MAC 地址不在交换表中,则将该地址加入交换表(switch table, MAC 地址, 端口号
),并将数据帧发送给相应的目的端口。 以太网交换机对工作站是透明的。利用以太网交换机还可以方便地实现虚拟局域网 VLAN.
以太网交换机的特点: ①以太网交换机的每个端口都直接与单台主机相连(网桥的端口往往 连接到一个网段),并旦一般都工作在全双工方式。 ②以太网交换机能同时连通多对端口,使每 对相互通信的主机都能像独占通信媒体那样,无碰撞地传输数据。 ③以太网交换机是一种即插即用设备,其内部的帧的转发表是通过自学习算法自动地逐渐建立起来的。 ④以太网交换机由于使 用专用的交换结构芯片,交换速率较高。 ⑤以太网交换机独占传输媒体的带宽。
网络层
软件定义网络 SDN
它采用集中式的控制平面和分布式 的数据平面, 控制平面利用控制-数据接口对数据平面上的路由器进行集中式控制 在传统互联网中,每个路由器既有数据平面又有控制平面。 但是在 SDN 结构中,路由器都变得简单了, 它的路由选择软件都不需要了,因此路由器之间不再相互交换路由信息。 在网络的控制平面有一 个逻辑上的远程控制器。远程控制器掌握各主机和整个网络的状态, 通过Openflow 协议(也可以通过其他途径)将转发表(在 SDN中 称为流表)下发给路由器 路由器的工作很单纯,即收到分组、查找转发表、转发分组。
网络具有良好的可编程性
优点:
- 全局集中式控制和分布式高速转发,既利于控制平面的全局优化,又利于高 性能的网络转发。
- 灵活可编程与性能的平衡,控制和转发 功能分离后,使得网络可以由专有的 自动化工具以编程方式配置。
- 降低成本,控制和数据平面分离后,尤其是在使用开放的接口协 议后,就实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本。
SDN 的问题:
- 安全风险,集中管理容易受攻击,如果崩溃,整个网络会受到影响
- 瓶颈问题,原本分布式的控制平面集中化后,随着网络规模扩 大,控制器可能成为网络性能的瓶颈。
路由表与路由转发
路由表的内容
- 直连路由(初始)
- 动态路由(协议)
- 静态路由(管理员配置)
路由表项目的 ip, 子网掩码, 下一跳 ip, 接口
转发表是由路由表得到的 路由表需要对网络拓扑变化的计算最优化 转发表需要使查找过程最优化
转发表项目的地址, 下一跳 mac 地址
路由过程
PC1:
“PC 1发送报文给PC 2时,首先必须确定目的IPv4地址是否位于同一网络。PC 1通过将自己的IPv4地址与子网掩码做与操作,来判断PC 1所属的网段。接下来,PC 1对目的IPv4地址与子网掩码做与操作。 如果目的网络地址与PC 1网络相同,则PC 1不使用默认网关,而是在ARP缓存中查找目的IPv4地址的设备MAC地址。 如果MAC地址不在缓存中,则PC 1产生一个ARP请求来获取地址并将报文发给目的地址。 如果目的网络地址位于另一网络,则PC 1将报文转发至默认网关。
R1从PC 1接收到以太网帧后执行以下步骤:
- R1检查目的MAC地址,与接收端口FastEthernet 0/0相匹配,因此,将帧复制到buffer。
- R1识别以太网类型为0x800,意味着以太网帧的数据部分包含IPv4报文。
- R1解封装该以太网帧。
- 由于目的IPv4地址与R1直连的任何网络都不相符,R1在路由表中查找包含该目的IPv4地址主机的网络地址。本例中,路由表中有192.168.4.0/24网络的路由。目的IPv4地址为192.168.4.10,即该网络上的主机IPv4地址。
R1找到192.168.4.0/24路由的下一条IPv4地址为192.168.2.2以及输出端口FastEthernet 0/1,这意味着IPv4报文封装到一个新的以太网帧中,目标MAC地址是下一跳路由器的MAC地址。 由于下一个接口是在以太网上,所以R1必须用ARP解析出下一跳IPv4地址的MAC地址。
- R1在ARP cache中查找下一跳IPv4地址192.168.2.2。 如果表项不在ARP cache中,R1会从FastEthernet 0/1 接口发送ARP请求,R2会返回ARP响应。R1之后在ARP cache中更新192.168.2.2的MAC地址。
- IPv4报文封装到新的以太网帧中并从R1的FastEthernet 0/1 接口转发出去。
当帧到达R3时执行以下步骤:
- R3将数据链路帧复制到它的buffer。
- R3解封装该数据链路帧。
- R3在路由表中查找该目的IPv4地址。R3路由表中有直接连接到该网络的路由。这表示报文可直接发送到目的设备而无需发送至路由器。
由于输出接口是一个直连以太网,所以R3必须用ARP解析出目的IPv4地址的MAC地址。
- R3在它的ARP cache中查找目的IPv4地址,如果此ARP cache中没有此表项,R3会从FastEthernet 0/0 接口发送ARP请求。PC 2回复ARP响应告知它的MAC地址。R3之后在ARP cache中更新192.168.4.10的MAC地址。
- IPv4报文封装到新的以太网帧中并从R3的FastEthernet 0/0 接口发出。
- 当PC 2接收到该帧,检查帧的目的MAC地址,与网卡接收端口的MAC地址相匹配,PC 2于是将帧的剩余部分复制到自己的buffer。
- PC 2识别到以太网类型为0x800,也就是帧的数据部分包含IPv4报文。
- PC 2解封装以太网帧,将IPv4报文传递给操作系统
静态路由与动态路由
静态路由: 管理员手动配置路由信息
动态路由:
路由器在端口发送和接收路由消息。
路由器与其他使用相同路由协议的路由器共享路由信息。
路由器交换路由信息来学习远端网络。
当路由器检测到拓扑变化时,路由协议将这一变化通知其他路由器。
自治系统 AS (autonomous system)
单一技术管理下的一组路由器,这些路由器使用一种 AS 内部的路由选择协议和共同的度量来确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议来确定分组在 AS 之间的路由。 一个自治系统内的所有网络都由一个行政单位(如一家公司、一所大学、一个政府部门等) 管辖,一个自治系统的所有路由器在本自治系统内都必须是连通的。
域内路由与域间路由 (即自治系统内部和外部)
- 内部网关协议 IGP (interior gateway protocol) AS 内部的路由选择协议, 如 RIP, OSPF
- 外部网关协议 EGP (external gateway protocol) AS 边界, 如 BGP-4
路由信息协议 (RIP) (routing information protocol)
路由表项 目的地, 路径代价
所以结点定期将整个路由表传送给所有相邻结点 当收到路由信息时, 如果没有就添加, 如果代价更小就更新
简单
距离向量算法
路由表项
目的网络, 距离, 下一跳路由器地址
- 对于从 X 收到的报文, 报文中所有路由表项进行修改: 下一条路由器地址 = X 距离 = 距离+1 例如 201.1.3.1 与 201.1.3.2 相邻, 则 201.1.3.1 中 201.1.3.2 的距离为 1(而不是 0)
- 当本机路由表中没有报文中的表项的 目的网络 时, 加入本机路由表 当本机路由表中有报文中的表项且 目的网络=X 时, 替换该表项 当本机路由表中有报文中的表项且 目的网络!=X 时, 如果报文中的距离更小, 替换该表项
- 如果 180 秒未收到相邻路由器的更新报文, 则将其记为不可达路由器, 距离=16
开放最短路径优先 (OSPF)协议 (Open Shortest Path First)
- 主动测试所有邻接节点状态
- 定期将链路状态传播给所有其他节点
每当链路状态报文到达时, 路由节点就用状态信息更新自己的状态, 用 dijkstra 算法重新计算路由
分布式
- 分组类型
- 问候分组: 发现维持邻居可达性(10秒一次)
- 数据库描述分组: 给出自己数据库中链路状态的描述信息
- 链路状态请求分组
- 链路状态更新分组
- 链路状态确认分组
边界网关协议 (BGP) (border gateway protocol)
寻找比较好(而不是最好)的路由
报文类型
- 打开报文: 与相邻 BGP 发言人建立联系
- 更新报文
- 保活报文: 确认打开报文并周期性验证邻居关系
- 通知报文: 发送检测到的差错
IPV4
- 版本 如 4, 6
- 首部长度 = 字段值(0~15)*32bit = 0~60byte, 不使用可选字段时为 20B
- 总长度 = 首部长度+数据长度 byte <216-1 byte = 65535 byte
- 标识: 分片用序号
- 标志: 分片用标志, 只有前 2 bit 有意义, MF=0 (more fragment)表示最后一个分片, DF=0 (dont fragment)表示允许分片
- 片偏移: 某片在原分组中的相对位置, 以 8byte 为单位, 所以除最后一个分片, 其他分片的有效数据都是 8byte 的倍数
- 生存时间 TTL, 数据报可通过的路由器数的最大值, 路由器转发前 TTL--, TTL==0 时丢弃
- 协议: 上层协议 TCP=6, UDP=17
- 首部校验和: 不校验数据部分 在IP分组中, 首先,把检验和字段值置为0.然后把整个首部划分为16位的段,再将各段相加。把结果取反码,并插入检验和字段中。
- 地址: ip 地址
由于以太网 MTU 最大=1500B
IPv4 地址与 NAT
早期分类 ip 地址
特殊 ip
- 主机号全为 0 本网络
- 主机号全为 1 , 本网络的广播地址, 直接广播地址
- 127.x.x.x 环回自检, 此目的地址的报文不会出现在网络中
- 0.0.0.0 本网络的本机
- 255.255.255.255 整个 tcpip 网络的广播地址, 受限广播地址, 由于路由器的广播隔离, 实际中是本网络的广播地址
- 172.16.0.0/12, 192.168.0.0/16专用网络, 内联网地址, 不会出现在公共网中
- 255.255.255.255/32 本地网络广播地址
网络地址转换 NAT (Network Address Translation) 在路由器中 其中私有 ip (可重用地址)网段有 A类:1个A类网段,即10.0.0.0~10.255.255.255。 B类:16个B类网段,即 172.16.0.0~172.31.255.255。 C类:256个C 类网段,即 192.168.0.0~192.168.255.255。 NAT 路由器的工作原理: ①假设用户主机 10.0.0.1(随机端口 3345) 向Web 服务器 128.119.40.186(端口 80)发送请求。 ②NAT 路由器收到 ip 分组后,为该 ip 分组 生成一个新端口号 5001,将IP 分组的源地址更改为 138.76.29.7(即 NAT 路由器的全球 IP 地址), 将源端口号更改为 5001。NAT 路由器在 NAT 转换表中增加一个表项。 ③Web 服务器并不知道刚 抵达的 iP 分组己被NAT 路由器进行了改装,更不知道用户的专用地址,它响应的 ip 分组的目的 地址是 NAT 路由器的全球 ip 地址,目的端口号是 5001。 ④响应分组到达 NAT 路由器后,通过 NAT 转换表将IP 分组的目的 IP 地址更改为 10.0.0.1,将目的端口号更改为 3345。
子网划分与子网掩码、CIDR
子网划分: 网络号, 子网号, 主机号
子网掩码: 标识子网号范围, 1 对应网络号和子网号, 0 对应主机号, 与运算
- 主机设置 ip 时必须设置子网掩码
- 同一子网的所有主机和路由器对应端口有相同子网掩码
- 路由器路由表中有子网掩码
无分类编址 CIDR (Classless Inter-Domain Routing or supernetting) 消除了地址分类和子网概念, 用网络前缀加以替补 ip::= 网络前缀, 主机号
, 128.14.32.5/20 20 指的是网络前缀是前 20 位 路由表的最长前缀匹配: 路由表条目: 网络前缀, 下一跳地址
, 路由器选择条目时按照最长前缀匹配选择
路由器转发表还有两种特殊路由
- 主机路由: 对特定主机专门设置路由, 方便调试, 其特点为网络前缀为 32
- 默认路由: 0.0.0.0/0 , 只要目的网络不在转发表中就会选择默认路由
网络层转发分组过程:
- 从 ip 报文提取目的 ip
- 在路由表中查找 主机路由
- 没有主机路由则按最长前缀匹配
- 未找到则按默认路由转发
转发时不会改变 ip 地址, 而是通过mac地址寻找下一条路由器
ARP、DHCP 与 ICMP
地址解析协议 ARP (address resolution protocol)
是网络层协议 每台主机都有一个 ARP 缓存, 存放本局域网的 ip - MAC 对应关系
根据目的主机的IP地址,获得其MAC地址,通过发送一个叫做arp请求的数据包广播到该局域网中 (arp数据包也是被包含在以太网帧中的,发送时,帧头部中的目的mac地址填写为0xffffffff,表示在本地局域网上广播) 而仅当某台机器的IP地址与该arp请求中的要询问的ip地址相同时,那台机器就才会向发送方返回一个arp回应数据包,这个回应包中就包含了先前要询问的机器的IP地址 + MAC地址 本地主机接收到这个回应的arp数据包后,会提取ip地址和mac地址,记录到一个叫做arp的表的表项中
当发送主机和目的主机不在同一个局域网中时,即便知道对方的MAC地址,两者也不能直接通信,必须经过路由器进行ip层的转发才可以 所以此时,发送主机会把一个网关ip地址作为目的ip地址,那么通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。
Advanced Research Projects Agency Network (ARPANET)
The Advanced Research Projects Agency Network (ARPANET) was the first wide-area packet-switched network with distributed control and one of the first networks to implement the TCP/IP protocol suite.
动态主机配置协议 DHCP(dynamic host configuration protocol) 为主机动态分配 ip 地址, 是基于 UDP 的应用层协议 工作原理: C/S 需要 ip 地址的主机启动时向 DHCP 服务器广播发送发现报文, 只有 DHCP 服务器会响应(提供报文), 如果数据库中有该主机配置则直接返回, 否则分配一个 ip
DHCP 是有时间限制的(租用期)
动态ARP,是由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。当到达老化时间、接口Down时会删除相应的动态ARP表项。
静态ARP,是指IP地址和MAC地址之间有固定的映射关系,是由手动配置生成。
网际控制报文协议 ICMP (Internet control message protocol) 主机和路由器报告差错和异常情况, 是网络层协议
ICMP 差错报告报文分类: 目标主机或路径上的路由器向源主机报告
- 终点不可达
- 源点抑制: 由于拥塞丢弃报文, 使源主机减小发送速率
- 超时: TTL=0
- 参数问题: ip 报文首部有值错误
- 重定向: 路由器通知主机有更好的路由器
不应发送 ICMP 差错报告报文的情况
- 对 ICMP 差错报文不再发送
- 对除第一个分片以外的后续分片不再发送(?网络层协议为什么考虑这个)
- 对有组播地址的数据报不发送
- 对特殊地址不发送(0.0.0.0, 127.0.0.0)
ICMP 询问报文
- 回送请求和回答报文
- 时间戳请求和回答报文
- 地址掩码请求和回答报文
- 路由器询问和通告报文
ping 在应用层, 直接使用 ICMP, 不使用传输层的 UDP tcp 回送请求和回答报文
traceroute 在网络层 时间超过报文
IPV6
IPV6 的主要特点
- 32bit->128bit
- 扩展地址层次结构
- 灵活首部格式
- 改进的选项
- 允许协议继续扩充
- 即插即用
- 支持资源预分配
- 只在源节点分片, 路由器不能分片
- 首部长为 8byte 整数倍
- 身份验证, 保密功能
IPv6 地址
目的地址
- 单播
- 多播
- 任播: 数据只交付给一组计算机中的任意一个
每个16 位域有 0 即可缩写, 连续的 0 又可以再次缩写(仅一处::) 4bf5:0000:0000:0000:ba5f:039a:000a:2176
4bf5:0:0:0:ba5f:39a:a:2176
4bf5::ba5f:39a:a:2176
ipv4 到 ipv6 过度
- 双协议栈
- 隧道技术: 将 ipv6 报文作为 ipv4 报文的数据部分
ipv6 写法标准:
- 一个块中前导的零不必书写。在前面的例子中,地址可写为 5f05:2000:80ad:5800:58:800:2023:1d71。
- 全零的块可以省略,并用符号:代替。例如,IPv6 地址0:0:0:0:0:0:0:1可简写为 ::1. 同样,地址 2001:0db8:0:0:0:0:0:2可简写为 2001:db8::2。为了避免出现歧义,一个 IPv6 地址 中符号 :: 只能使用一次。
- 在IPv6 格式中嵌入IPv4 地址可使用混合符号形式,紧接着 IPv4 部分的地址块的值为ffff,地址的其余部分使用点分四组格式。例如,IPv6 地址 ::ffff:10.0.0.1可表示 IPv4 地址 10.0.0.1。它被称为IPv4 映射的 IPv6 地址。
- IPv6 地址的低 32 位通常采用点分四组表示法。因此,IPv6 地址 ::0102:f001 相当于地址:::1.2.240.1。它被称为IPv4 兼容的 IPv6 地址。需要注意,IPv4 兼容地址与IPv4 映射地址不同;它们只是在能用类似 IPv4 地址的方式书写或由软件处理方面给人以兼容的感觉。这种地 址最初用于 IPv4 和 IPv6 之间的过渡计划,但现在不再需要 [RFC4291]。
- 前导的零必须压缩(例如,2001:0db8::0022变成 2001:db8::22)
- :: 只能用于影响最大的地方(压缩最多的零),但并不只是针对16位的块。如果多个块中包含等长度的零,顺序靠前的块将被替换为 ::
- a 到 f 的十六进制数字应该用小写表示。
IP 组播
发送的单个分组可以抵达用一个组标识的若干目标主机 仅用于 UDP 源主机将分组发送给一个组播地址 主机使用 因特网组管理协议 IGMP 加入组播组 组播需要路由器的支持
IP组播地址
使用 D 类地址 224.0.0.0 ~ 239.255.255.255 组播数据报不会产生 ICMP 差错报文
IGMP(Internet group management protocol) 与组播路由算法
IGMP工作原理
- 当某主机要加入某组播组时, 先向该组播地址发送报文请求加入, 组播路由器收到后将成员关系发送给其他组播路由器
- 组播路由器要周期性探寻主机是否仍是组成员
移动IP
4.7.1 移动IP 的概念
漫游, 把分组自动投递到移动站(即移动主机) 移动过程中 ip 地址不变 移动 ip 定义了三个功能实体
- 移动节点: 拥有永久 ip 的移动站
- 本地代理: 原始连接到的网络上的路由器
- 外地代理: 被访网络上的路由器
4.7.2 移动IP 通信过程
每个移动站都有一个永久地址 移动站原始连接网络称为 归属网络 归属代理是连接到归属网络的路由器 移动站移动时, 接入的外地网络称为 被访网络 外地代理是连接到被访网络的路由器 外地代理为移动站创建一个临时地址称为转交地址, 并把移动站的转交地址告诉归属代理
过程如下:
- 移动站在本归属网络中按 tcp/ip 通信
- 漫游到外地网络时, 向外地代理登记获得转交地址, 外地代理向原归属代理登记转交地址
- 归属代理得到转交地址, 建立通向转交地址的隧道, 将截获的发送给移动站的 ip 分组通过隧道发送给外地代理
- 外地代理把从隧道收到的 ip 报文拆封恢复, 发送给移动站
- 移动站发送数据时通过被访网络发送
- 移动站无论如何移动, 收到的数据都是由归属代理转发的
- 移动站回到归属网络时, 向归属代理注销转交地址
网络层设备
冲突域和广播域
- 冲突域 连接到同一物理介质上的所有结点的集合, 这些节点存在介质争用现象 例如第一层的集线器, 中继器属于同一个冲突域 网桥, 交换机, 路由器等可以划分冲突域
- 广播域 接收同样广播消息的节点集合 例如第一层的集线器, 第二层的交换机属于同一个广播域 第三层路由器等则可以划分广播域, 也可以连接不同广播域
路由器的组成和功能
任务: 连接不同网络 在网络层 若源主机与目标主机在同一网络, 那么直接交付无须通过路由器 如果不在同一网络, 则按路由器转发表转发到下一路由器
路由器的功能
路由选择: 根据路由协议构造路由表, 并更新维护路由表
分组转发
组成: 交换结构, 输入端口, 输出端口 输入输出处进行帧和 ip 报文的转换 交换结构: 根据转发表对分组进行处理, 交换方法有
- 通过存储器进行交换
- 通过总线进行交换
- 通过互联网络进行交换
传输层
传输层的功能
- 进程间的逻辑通信
- 对报文进行差错检测(首部和数据)
- TCP, UDP
端口是传输层的地址
端口号长 16bit, 65536 个端口号, 分类:
- 服务端端口号
- 熟知端口号 0~1023, 给了 tcp/ip 最重要的一些程序
- 登记端口号 1024~49151, 这些端口号必须在 IANA 互联网地址指派机构登记
- 客户端端口号: 短暂端口号(临时端口号): 49152~65535
套接字: 端口号拼接到 ip 地址即为套接字, 套接字唯一标识一个主机上的一个进程
UDP 协议
5.2.1 UDP 数据报
在 ip 数据报基础上+复用分用+差错检测 支持多对多
- 源端口号: 在需要对方回复时选用, 不需要可全为 0
- 目的端口号
- 长度: 包括首部和数据, 最小值为 8(仅包含首部)
- 检验和: 可选, 不需要可全为 0
如果接收方发现目的端口不正确, 则丢弃报文, 并用 ICMP 发送"端口不可达"给发送方
UDP 校验
需要添加只为计算校验和的伪首部:(伪首部是不发送的) 和 ip 数据报一样, 首先,把检验和字段值置为0.然后把整个首部和数据部分(如果不是偶数个byte 需要添加全 0 字节, 但是添加的字节不会发送出去)划分为16位的段,再将各段相加。把结果取反码,并插入检验和字段中。
TCP 协议
TCP 协议的特点
- 面向连接
- 一对一
- 可靠: 数据无差错, 不丢失, 不重复, 有序
- 全双工: 两端 都有发送接收缓存
- 发送缓存: 应用发出的准备发送的数据, 已经发送但未确认的数据
- 接收缓存: 按序到达但未被应用读取的数据, 不按序到达的数据
- 面向字节流: 应用程序和 TCP 之间是字节流
- 长度调节
TCP 报文段
- 序号: 本报文数据的第一个字节的序号
- 确认号: 期望收到的下一个报文的序号, 累计确认
- 数据偏移: 首部长度, 单位 4byte
- 保留: 目前未使用, 置 0
- 紧急位 URG, URG=1 代表紧急指针有效, 表明本报文应尽快传输, 从第一字节到紧急指针所指字节为紧急数据
- 确认位 ACK, ACK=1 代表确认号有效, tcp 规定连接建立后所有报文都必须 ACK=1
- 推送位 PSH, PSH=1 代表应尽快交付给应用程序而不必等缓存满再交付
- 复位位 RST, RST=1 代表 tcp 连接出现差错, 必须释放连接并重新建立连接
- 同步位 SYN, SYN=1 ACK=0 代表连接请求报文, SYN=1 ACK=1 代表连接响应报文
- 终止位 FIN, FIN=1 代表要求释放连接
- 窗口: 接收方发出的报文中的窗口值, 代表了接收方还有多少接收缓存(byte), 供发送方设置发送窗口参考
- 校验和: 校验首部和数据, 与 udp 类似
- 选项: 长度可变
- 填充: 使首部长度为 4byte 整数倍
TCP 连接管理
- three-way-handshake
- c: SYN(synchronize), random initial SYN = 1, SYNnum = x, c -> SYN_SEND, 不携带数据
- s: SYNACK, allocate TCP variables and buffer, initial SYN = 1, SYNnum = y, ACK = 1, ACKnum = x+1, s->SYN_RCVD, s->ESTABLISHED 不携带数据
- c: SYN = 0, allocate variables and buffer, carry payload, SYN = 0, SYNnum=x+1, ACK = 1, ACKnum = y+1, c->ESTABLISHED, 可以携带数据
- 四次挥手, c 或 s 都可发起, 这里以 c 发起举例
- c: FIN = 1, SYN = 0, SYNnum = x, 不携带数据, c->FIN_WAIT_1
- s: ACK = 1, ACKnum = x+1, SYNnum= y, s->CLOSE_WAIT, c->s 断开, 进入半关闭状态, c 收到后 c->FIN_WAIT_2
- s: FIN = 1, SYN=0, ACKnum = x+1, SYNnum = z (半关闭后 s->c 可能还有数据发送), s->LAST_ACK 若 s 端无数据需要传输, 2 3 可合一, ack=1 fin=1
- c: ACK = 1, SYNnum= x+1, ACKnum = z+1, c->TIME_WAIT, wait 2MSL(maximum segment lifetime), release resourses , c->closed, s 收到后 s->closed s 接收到 4 之后就断开, c 等 2MSL 再断开
- SYN flood 不断发送不存在的 ip 地址给 s 建立半连接 tcp 连接(即停在握手第二步结束), 消耗 s 资源
- SYN cookie: server 的 initial SYNnum 是 SYN segment 的 sourse dest ip port 做的 hash function(即 cookie) 当 client 发回 SYNACK 时, 用 hash function 再次计算, 如果得到的值和 ack 一样, 那么说明之前已经有过半连接
- 为什么三次握手
- 第一次握手: s 验证 c 发送能力, s 接收能力
- 第二次握手: c 验证 s 发送接收能力, c 发送接收能力
- 第三次握手: s 验证 s 发送能力, c 接收能力
- 为什么四次挥手
- 各自发送终止信号, 确认终止信号
TCP 可靠传输
- 有序
- 确认: 累计确认
- 重传
- 超时重传: 对每个已发出报文设置单独计时器 重传时间: 自适应算法
- sample RTT 从发送到收到 ack 的时间, This means it can take a new sample every RTT. By using the timestamp TCP option, it is also possible to use every ack as a sample.
- estimatedRTT = (1-α) * estimatedRTT + α * sampleRTT α = 0.125
- deviationRTT = (1-β) * deviationRTT + β * |sampleRTT - estimatedRTT| β = 0.25
- TimeoutInterval = estimatedRTT + 4 * deviationRTT
- 冗余确认(冗余 ack)和快速重传 tcp 规定, 接收方每收到比当前acknum 大的包时, 就发送之前已经发送的 ack 当发送方收到 3 个冗余 ack 时就认为之后的包已丢失, 进行快速重传
- 超时重传: 对每个已发出报文设置单独计时器 重传时间: 自适应算法
TCP 流量控制
将 sender 发送数据的速度和 receiver 应用读取的速度匹配, 接收方控制发送方发送窗口的大小(大小是指帧的数量)
receiver's last_byte_received, last_byte_read
- 接收窗口 receive_window = receive_buffer - (last_byte_received - last_byte_read),
- receiver tells sender the receive_window every segment,
- sender keeps tracking last_byte_sent and last_byte_acked, keeping 发送窗口 < 接收窗口
- 同时 sender 根据拥塞控制, 计算 cwnd 拥塞窗口, 保证发送窗口 < 拥塞窗口
- 综上, 拥塞窗口通过拥塞和快速重传限制, 接收窗口通过反馈限制, 二者共同限制发送窗口
TCP 拥塞控制
拥塞控制 cwnd
- 慢开始:cwnd<ssthresh: 即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。宏观上是指数, 实际上还是每收到一个确认段 cwnd+=1
- 拥塞避免:cwnd>=ssthresh: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1.
- 网络拥塞: 只要出现拥塞, ssthresh = cwnd/2, cwnd=1
- 快重传与快恢复:(fast retransmit and recovery,FRR)没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。
- 快重传: 3 个冗余 ack 立刻重传
- 快恢复: 当收到 3 个冗余 ack 时, ssthresh = cwnd/2, cwd = ssthresh
应用层
域名系统 DNS (domain name system)
层次域名空间
www. baidu .com |
关于域名:
- 不区分大小写
- 不能使用除
-
以外的符号 - 每个域名长度<=63, 总长度<=255
顶级域名分类
- 国家顶级域名 .cn .us .uk
- 通用顶级域名 .com .net .org .gov
- 基础结构域名(反向域名) .arpa, 用于反向域名解析
域名服务器
分布式服务器层次
- 根域名服务器 知道顶级域名服务器 ip, 一共 13 个根域名服务器, 根域名服务器管理顶级域名
- 顶级域名服务器 管理二级域名
- 授权域名服务器(权限域名服务器) 每台主机都必须在授权域名服务器登记, 为可靠一般登记至少两个授权域名服务器 授权服务器能将其管辖的主机名转换为 ip 地址
- 本地域名服务器 每个 ISP 都可以拥有一台本地域名服务器
域名解析过程
客户端构造 DNS 请求报文, 以 UDP 形式发往本地域名服务器 分类
- 递归查询: 对根域名服务压力很大, 基本不用 主机 -> 本地域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权限域名服务器
- 递归与迭代结合查询
- 主机->本地域名服务器: 递归查询
- 本地域名服务器 -> 根域名服务器: 迭代查询
域名服务器广泛使用高速缓存, 因为域名与 ip 不是永久对应, 高速缓存中的信息一段时间后会丢弃
文件传输协议 (FTP)
功能
- 提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。
- 以用户权限管理的方式提供用户对远程 FTP 服务器上的文件管理能力。
- 以匿名 FTP 的方式提供公用文件共享的能力。
TCP, C/S, 保留用户状态信息
ftp 服务器进程:
- 主进程: 接收新的请求
- 从属进程: 处理单个请求
两个并行 tcp 连接:
- 控制连接: 服务器监听端口 21 , 控制信息以 7bit ascii 格式发送, 整个会话期间一直打开
- 数据连接: 服务器接收文件传输请求后创建数据传送进程, 传完后进程关闭 模式分类
- 主动模式 port 客户端连接到服务端:21, 登录成功要读取数据时, 客户端随机开放一个端口并通知服务器, 服务器收到 port 命令和端口号后, 通过端口 20 和客户端连接
- 被动模式 PASV 客户端要读取数据时, 发送 PASV命令, 服务器随机开放一个端口并通知客户端, 客户端进行连接
电子邮件
电子邮件系统的组成结构
组成
- 用户代理 UA(user agent) 用户与电子邮件系统的接口, 一般来说 ua 就是电子邮件客户端软件
- 邮件服务器 C/S 模式, 能同事充当客户端和服务器
- 电子邮件协议 如 STMP, POP3
电子邮件收发过程
- 用户用 ua 发送邮件, ua 用 smtp 发送给邮件服务器
- 发送端邮件服务器将邮件存入缓存队列等待发送
- 发送端邮件服务器中的 smtp 进程与接收端 smtp 进程建立 tcp 连接
- 发送完所有邮件后关闭连接
- 接收端服务器收到邮件后, 将邮件放入收信人的用户邮箱, 等待收信人读取
- 收信人读取时, 调用 ua, 使用 POP3(或 imap)将邮件从接收端服务器的用户邮箱取回
电子邮件格式与 MIME
From:hoopdog@hust.edu.cn |
多用途网际邮件扩充 MIME (multipurpose Internet mail extensions) 定义了传输非 ascii 内容的编码规则 内容:
- 5 个新的邮件首部字段,包括 MIME 版本、内容描述、内容标识、传送编码和内容类型。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
SMTP POP3 IMAP
- 简单邮件传输协议 SMTP (simple mail transfer protocol) 推 TCP, 端口号 25
- 邮局协议 POP3 (post office protocol) 拉 tcp, 端口号 110 工作方式:
- 下载并保留: 拉取后服务器依然保留邮件
- 下载并删除: 拉取后服务器会删除邮件
- IMAP 提供了文件夹相关命令, 维护了会话用户状态, 允许用户只获取报文部分内容
现代浏览器邮箱在浏览器和服务器间用 http 通信, 在邮件服务器之间用 smtp 通信
万维网 www (world wide web)
组成:
- url: 唯一标识符
协议://主机:端口/路径
- http: tcp
- html
工作流程
- 用户使用浏览器指定 url 与服务器建立连接发送请求
- 服务器把 url 转换成文件路径, 数据返回给浏览器
- 关闭连接
超文本传输协议 (HTTP)
http 过程
- 浏览器分析 url
- 浏览器向 dns 请求 ip
- 浏览器与服务器建立 tcp 连接(端口号默认 80)
- 浏览器发出 http 请求
- 服务器 http 响应
- 释放 tcp 连接
- 浏览器解析文件, 显示给用户
http 特点
无连接
无状态: cookie
cookie 组成
- Cookie: from user to server
- Set-Cookie: from server to user
- cookie 文件 in user
- cookie db in server
cookie 过程
- c: request
- s: set-cookie, entry in db
- c: cookie
- s: identify in db, response
连接方式
- 非持久连接: 每个网页元素的传输都需要单独的 tcp 连接 每个对象 2 个 RTT
- 持久连接:
- 流水线(默认): 所有对象共计 1 个 RTT
- 非流水线: 每个对象 1 个 RTT
http 报文
request 报文
GET /dir/page.html
HOST: www.xxx.com
Connection: close
User-agent: Mozilla/5.0
(data data data)response 报文
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: 6811
Content-Type: text/html
(data data data)http 请求类型
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET:向特定的资源发出请求。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。???
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除 Request-URI 所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
协议
协议 | 简称 | 分层(例子) | 过程 | 其他 |
---|---|---|---|---|
高级数据链路控制协议 High-level Data Link Control | HDLC | 链路层 | 用标识位 F (01 111 110)来标识帧的开始和结束 | |
additive link on-line hawaii system | ALOHA | 链路层 | 纯 aloha 协议 任何站点不进行任何检测就可以发送数据, 如果未收到确认说明发生了冲突, 站点等待一段随机时间再发送数据 时隙 aloha 协议 把时间划分为时间片, 只有时间片开始时才可以发送数据 |
|
载波监听多路访问 carrier sense multiple access | CSMA | 链路层 | 1 坚持 CSMA 发送数据时, 先监听, 如果信道忙, 继续监听, 如果冲突, 等待随机时间再监听, 如果空闲, 立即发送数据 非坚持 CSMA 先监听, 如果信道忙, 等待随机时间再监听 p 坚持 CSMA 先监听, 如果信道忙, 继续监听, 如果空闲, 以概率 p 发送数据, 1-p 概率下一个时隙发送数据 |
|
载波监听多路访问/碰撞监听 collision detection | CSMA/CD | 链路层(以太网) | 发送前发送中都不停检测信道以及时发现碰撞, 如果发现碰撞停止传输, 等待随机时间再尝试 | **最短帧长=来回时间*发送速率*2** |
载波监听多路访问/碰撞避免 collision avoidance | CSMA/CA | 链路层(802.11) | 1)若站点最初有数据要发送(而不是发送不成功再进行重传),且检测到信道空闲,在等待时间 DIFS 后,就发送整个数据帧。 2)否则,站点执行 CSMA/CA 退避算法,选取一个随机回退值。一旦检测到信道忙,退避计时器就保持不变。只要信道空闲,退避计时器就进行倒计时。 3)当退避计时器减到0时(这时信道只可能是空闲的),站点就发送整个帧并等待确认。 4)发送站若收到确认,就知道已己发送的帧被目的站正确接收。这时如果要发送第二帧,就要从步骤2)开始,执行 CSMA/CA 退避算法,随机选定一段退避时间。 若发送站在规定时间内没有收到确认帧 ACK,就必须重传该帧,直到收到确认,或经过若干次重传失败后放弃发送 |
|
令牌传递协议 | token | 链路层(令牌环局域网) | 令牌是一个特殊的 MAC 控制帧 当要发送时, 必须等待令牌, 得到令牌才可开始发送, 令牌按顺序依次传递 令牌在设备间的逻辑通路是一个环 |
|
802.3局域网(以太网) | IEEE802.3 | 链路层 | 1. 无连接, 不对数据帧编号, 不要求确认, 尽最大努力交付, 不可靠, 差错纠正由高层完成 2. 使用曼彻斯特编码信号, 方便同步(10BaseT 就是 10Mbps 的以太网) |
|
802.11 无线局域网 | IEEE802.11 | |||
VLAN | 802.3ac | |||
点对点协议 | PPP | 链路层 | 提供差错检测但不提供纠错, 不可靠, 不使用序号和确认机制 只支持点对点 只支持全双工链路 ppp 两端可以使用后不同网络层协议 面向 byte |
|
IPV4 | 网络层 | |||
IPV6 | 网络层 | |||
地址解析协议 | ARP | 网络层 | A 网络层 -> B 网络层, 先在本机 ARP 缓存查找有无 B ip 如果有, 根据 mac 地址发送 如果没有, 设置 mac 目的地址为 ffff ffff ffff 广播 ARP 请求, 局域网内的主机都会受到请求, B 收到后向 A 发送 ARP 响应(单播, 此时B的 arp 表记录下 A 的 mac 地址), A 收到后写入ARP 缓存, 原报文根据 mac 地址发送到 B |
发送方接受方在同一局域网内: 直接发送 在不同网络: 主机 A 用 ARP 找到路由器, 剩下的由路由器完成 路由器 R1 到连接范围内主机 B: 用 ARP 发送到 B 路由器 R1 到连接范围外主机 B: 用 ARP 找到路由器, 剩下的由路由器完成 |
动态主机配置协议 | DHCP | 应用层, UDP | 主机广播 DHCP 发现消息, 源 ip = 0.0.0.0:67, UDP, 目的 ip=255.255.255.255 DHCP 服务器收到发现消息, 返回提供报文, 内含分配 ip, 源ip = 服务器 ip, 目的 ip=255.255.255.255 主机收到提供报文, 如果接受该 ip, 则广播 DHCP 请求 向服务器请求提供 ip, 源 ip = 0.0.0.0, 目的 ip=255.255.255.255 这一步是因为可能收到多个 DHCP 提供报文, 主机需要选择一个并通知其他 dhcp 服务器 服务器收到请求, 广播 DHCP 确认消息, 将 ip 分给主机, 源ip = 服务器 ip, 目的 ip=255.255.255.255 |
一般说来, 第一次分配 ip 所有通信都是广播通信 |
网际控制报文协议 | ICMP | 网络层 | ||
内部网关协议 | IGP | 如 RIP, OSPF | ||
路由信息协议 | RIP | 应用层, UDP | 每个路由器维护从它到各个目的网络的距离记录(所有的距离记录组成距离向量) 距离即跳数, 每经过一个路由器+1 跳数越少路由越好 最多 15 跳, 即距离<16, =16 表示不可达 任意两个路由器之间每 30 秒广播一次路由更新信息, 动态维护路由表 不支持子网掩码的 RIP 广播, RIP 中每个网络的子网掩码必须相同, 但 RIP2 支持变长子网掩码 和 CIDR |
仅和相邻路由器交换信息 交换信息为自己的全部路由表, 信息量大 固定时间交换信息 限制了网络的大小(15 跳) 出现故障时坏消息传的慢, 慢收敛 |
开放最短路径优先 | OSPF | 网络层 | 泛洪: 向 AS 中所有路由器发送信息 发送信息为本路由器相邻的所有路由器链路状态 只有在链路状态变化时才发送信息, 收敛快 对不同链路根据 ip 分组的不同服务类型设置不同代价 如果同一目的网络有多条相同代价的路径, 可以进行多路负载平衡 交换的分组具有鉴别功能, 保证仅在可信赖路由器间交换 支持子网划分和 CIDR 代价 = 100M/带宽 每隔 30 分钟刷新数据库中链路状态 |
所有路由器最终都能建立一个链路状态数据库。这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(称为链路状态数据 库的同步)。 每个路由器根据这个全网拓扑结构图,使用 Dijkstra 最短路径算法计算从自己 到各目的网络的最优路径,以此构造自己的路由表。 当链路状态发生变化时,每个路由器 重新计算到各目的网络的最优路径 虽然使用Dijkstra 算法能计算出完整的最优路径,但路由表中不会存储完整路径,而 只存储“下一跳” OSPF 将 As 再划分为更小的区域 |
外部网关协议 | EGP | 网络层, 如 BGP-4 | ||
边界网关协议 | BGP | 应用层, TCP | 每个 AS 选择几个路由器作为发言人 发言人与其他 AS的发言人交换路由信息, 通过 TCP 所有发言人都互相交换网络可达性信息后, 得到较好路由 |
支持 CIDR 刚运行时交换整个 BGP 路由表, 此后只在发生变化时交换变化的部分 |
组播协议 | IGMP | 网络层 | ||
用户数据报协议 | UDP | |||
传输控制协议 | TCP | |||
域名系统 | DNS | 应用层, UDP AXFR 等特殊查询会使用 TCP |
host -> 本地域名服务器: dns 请求报文 本地域名服务器查询本地缓存, 没有记录 本地域名服务器 -> 根域名服务器: 解析请求报文 根服务器判断顶级域名, 返回顶级域名服务器 ip 给本地域名服务器 本地域名服务器 -> 顶级域名服务器: 解析请求报文 顶级域名服务器判断二级域名, 返回授权域名服务器 ip 给本地域名服务器 本地域名服务器 -> 授权域名服务器: 解析请求报文 授权域名服务器返回查询结果 本地域名服务器保存结果至缓存, 返回结果给host |
|
文件传输协议 | FTP | 应用层, TCP | 打开端口 21 等待客户端连接 启动从属进程处理请求, 与主进程并发执行, 处理完请求后从属进程终止 回到等待连接状态 |
|
简单邮件传输协议 | SMTP | 应用层, tcp | 连接建立 发送方邮件服务器每隔一段时间就对邮件缓存扫描, 如果有邮件就与接收方服务器建立 tcp 连接, smtp 不使用中间服务器 邮件传送 客户端先发送 MAIL命令, 服务端若准备好接受则回复 250 ok 客户端发送多个 RCPT, 确认接收方是否做好接收邮件准备 客户端发送 DATA 命令, 标识要开始传输, 服务端回复 354 start mail input; end with <CRLF>.<CRLF> 此时客户端开始传输内容, 并以<CRLF>.<CRLF> 表示内容结束 连接释放 客户端发送 QUIT 命令, 服务器回复 221 |
它定义了电子邮件的传输方式,负责将邮件从发件人的电子邮件服务器发送到接收人的电子邮件服务器。SMTP负责处理邮件的路由和传输,确保邮件能够准确地传递到目标服务器。 |
邮局协议 | POP3 | 应用层, tcp | pull 通信方式, 用户读取邮件时, ua 向邮件服务器发出请求, 拉取邮箱中的邮件 | 它允许用户从邮件服务器上下载和接收邮件。 |
超文本传输协议 | HTTP |
网络设备
中继器、集线器、网桥、交换机、路由器和网关。
一、中继器
中继器是最简单的网络互联设备,主要完成物理层的功能,负责在两个节点的物理层上按位传递信息,完成信号的复制、调整和放大功能,以此来延长网络的长度。
由于存在损耗, 在线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,因此会导致接收错误。中继器就是为解决这一问题而设计的。中继器完成物理线路的连接,对衰减的信号进行放大,保持与原数据相同。它属于一种模拟设备,用于连接两根电缆段。中继器不理解帧、分组和头的概念,他们只理解电压值。 中继器,就是简单的信号放大器,信号在传输的过程中是要衰减的,中继器的作用就是将信号放大,使信号能传的更远。
二、集线器
集线器(Hub)是中继器的一种形式,区别在于集线器能够提供多端口服务,也称为多口中继器。集线器在OSI/RM中的物理层。
集线器,差不多就是个多端口的中继器,把每个输入端口的信号放大再发到别的端口去,集线器可以实现多台计算机之间的互联,因为它有很多的端口,每个口都能连计算机。工作于物理层
三、网桥
网桥(Bridge)是一个局域网与另一个局域网之间建立连接的桥梁。网桥是属于数据链路层的一种设备,它的作用是扩展网络和通信手段,在各种传输介质中转发数据信号,扩展网络的距离。同时又有选择地将现有地址的信号从一个传输介质发送到另一个传输介质,并能有效地限制两个介质系统中无关紧要的通信。
网桥工作在数据链路层,将两个LAN连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”。
四、交换机
交换机(Swich)工作在第二层(即数据链路层),它要比集线器智能一些,它能分辨出帧中的源MAC地址和目的MAC地址,因此可以在任意两个端口间建立联系,在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。
交换机通过对信息进行重新生成,并经过内部处理后转发至指定端口,具备自动寻址能力和交换作用。但是 交换机并不懂得IP地址,它只知道MAC地址。
交换机是使用硬件来完成以往网桥使用软件来完成过滤、学习和转发过程的任务。交换机速度比HUB快,这是由于HUB不知道目标地址在何处,发送数据到所有的端口。
交换机中有一张MAC地址表,如果知道目标地址在何处,就把数据发送到指定地点,如果它不知道就发送到所有的端口。这样过滤可以帮助降低整个网络的数据传输量,提高效率。但是交换机的功能还不止如此,它可以把网络拆解成网络分支、分割网络数据流,隔离分支中发生的故障,这样就可以减少每个网络分支的数据信息流量而使每个网络更有效,提高整个网络效率。
现代交换机是这样处理数据帧的:一旦目标头域(目标地址)已经进来了,尽管帧的其他部分还没有到达,则只要输出线路可以使用,交换机就开始转发该帧,而不需理会帧后面的内容,也即是说交换机并没有使用“存储—转发”交换方式。
总结:交换机,可以理解为高级的网桥,他有网桥的功能,但性能比网桥强。交换机和网桥的细微差别就在于:交换机常常用来连接独立的计算机,而网桥连接的目标是LAN,所以交换机的端口较网桥多。
五、路由器
路由器(Router)工作在第三层(即网络层),它比交换机还要“聪明”一些,它能理解数据中的IP地址,如果它接收到一个数据包,就检查其中的IP地址,如果目标地址是本地网络的就不理会,如果是其他网络的,就将数据包转发出本地网络。
例如,一台支持IP协议的路由器可以把网络划分成多个子网段,只有指向特殊IP地址的网络流量才可以通过路由器。当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到。而要送给不同IP于网上的主机时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把IP分组送到目的地。
如果没有找到这样的路由器,主机就把IP分组送给一个称为“缺省网关(default gateway)”的路由器上。对于每一个接收到的数据包,路由器都会重新计算其校验值,并写入新的物理地址。
网络中的设备用它们的网络地址(TCP/IP网络中为IP地址)互相通信。IP地址是与硬件地址无关的“逻辑”地址。目前TCP/IP网络,全部是通过路由器互连起来的,Internet就是成千上万个IP子网通过路由器互连起来的国际性网络。
路由器用于连接多个逻辑上分开的网络,几个使用不同协议和体系结构的网络。路由器利用网络层定义的“逻辑”上的网络地址(即IP地址)来区别不同的网络,实现网络的互连和隔离,保持各个网络的独立性。
当一个子网传输到另外一个子网时,可以用路由器完成。它具有判断网络地址和选择路径的功能,过滤和分隔网络信息流。一方面能够跨越不同的物理网络类型(DDN、FDDI、以太网等等),另一方面在逻辑上将整个互连网络分割成逻辑上独立的网络单位,使网络具有一定的逻辑结构。
总结:路由器的主要工作就是为经过路由器的每个IP数据包寻找一条最佳传输路径,并将该数据有效地传送到目的站点。路由器的基本功能是,把数据(IP报文)传送到正确的网络。
六、网关
网关(Gateway)又称网间连接器、协议转换器。
网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
总结:网关,通过字面意思解释就是网络的关口。从技术角度来解释,就是连接两个不同网络的接口,比如局域网的共享上网服务器就是局域网和广域网的接口。
RSA
随机质数 p, q, n=pq, 1< e < φ(n) e与φ(n) 互质, ed ≡ 1 (mod φ(n))
公钥(n, e)
私钥(n, d)
ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
n=pq。只有将n因数分解,才能算出p和q。
socket
# udp |
# tcp |