计算机网络期末考试
题型包括:
\1. 简答与分析,10题
\2. 综合应用,5题
考试内容包括基础知识测试,以及综合应用两部分。请大家注意复习:既要掌握基本的重要知识点,也要学会综合应用。
第一章 计算机网络和因特网
计算机网络的==两大功能==
- 连通性
- 共享性
Internet==具体构成==
数以亿计的计算互连设备、通信链路、分组交换:路由器和交换机
主机(host)=端系统(end system)
- 运行网络应用程序
通信链路(link)
双绞线,光纤, 无线电频谱, 卫星
传输速率 = 带宽(bandwidth)
带宽单位为bps,bit per second每秒传输的位数,例如百兆光纤就是100M bps,实际传输使用的单位为BPS,1B=8bit,所以传输速率为100/8=12.5M BPS,就是12.5MB/s
通信链路只有极限带宽,例如5号线极限带宽为300M,不能接千兆网卡,只能接百兆网卡
网卡有传输的能力,传输速率取决于网卡能传输的能力,例如百兆,千兆网卡分组(packet)交换:
- 路由器(Router)和交换机(Switch)
- 交换机:形成局域网
- 路由器:链接互联网
协议的==基本要素==
- 语法
- 语义
- 同步
网络核心
电路交换
- 每次会话预留沿其路径(线路)所需的独占资源--电话网
- 从主机A到主机B经一个电路交换网络需要多长时间发送一个640Kb的文件?
- 过程
- 建立连接
- 会一直霸占着这条路径
- 传输数据
- 释放连接
- 建立连接
- 优点
- 传输速度快、高效
- 实时
- 缺点
- 资源利用率低
- 新建连接需要占据一定的时间,甚至比通话的时间还长
多路复用
- 数据以离散的数据块通过网络来发送
- 分片分配到会话
- 分片没有被会话使用的情况下,分片空载(不共享)
- 电路级性能(有保证)
- 要求呼叫建立--建立一个专门的端到端线路(意味着每个链路上预留一个线路)
- 链路带宽分片
频分-frequency division
时分-time division
分组交换
每个端到端的数据流被划分成分组
- 所有分组共享网络资源
- 每个分组使用全部链路带宽
- 资源按需使用
比较分组交换与电路交换:
- 分组交换允许更多的用户使用网络
- 优势
- 适合大量的突发数据传输
- 资源共享
- 简单,无需连接
- 缺点
- 过渡竞争导致分组延迟与丢失
- 需要可靠数据传输、拥塞控制协议
网络的分类
- 虚电路网络一定是面向连接的
- 数据报网络既可以提供面向连接的服务,也可以提供无连接的服务
- 数据报网络既可以提供面向连接的服务,也可以提供无连接的服务
四种时延
1.节点处理时延nodal processing delay:
检查错误位
选择输出链路
高速路由器处理延迟-微秒级
- 排队时延queueing delay:
等待被发送到输出链路上的时间
取决于路由器的拥塞程度
- 传输时延Transmission delay
R=链路带宽 (bps)
L=分组长度 (bits)
发送分组比特流的时间 = L/R
- 传播时延Propagation delay
d = 物理链路的长度
s = 介质的信号传播速度 (~2x108 m/sec)
传播延迟 = d/s
注意: s和R是两个完全不同的速度参量!
总的节点延迟
- dproc = 处理时延
- dqueue = 排队时延
- dtrans = 传输时延
- dprop = 传播时延
流量强度
流量强度=分组长度*平均分组到达率/链路带宽R
=链路带宽 (bps)L=分组长度 (bits)
a=平均分组到达率 average packet arrival rate
流量强度:traffic intensity = La/R
流量强度与延迟关系
La/R ~ 0: 分组稀疏到达,无队列,平均排队延迟极小接近于0
La/R -> 1: 分组出发到达,形成队列,队列长度迅速增加,排队延迟大幅增大
La/R > 1: 输出队列平均位到达速率超过送走这些位的极限速率,输出队列持续增长,排队延迟趋于无穷大
吞吐量
网络吞吐量:
- 单位时间内整个网络传输数据的速率或分组数
bps或data packets per second
吞吐量: 接收端接收到数据的比特速率 (bps )
瞬时吞吐量: 某一瞬间的吞吐量
平均吞吐量: 一段时间内的吞吐量均值
各层次常用协议
应用层
支持网络应用,报文传
FTP, SMTP, STTP
传输层
- 主机进程间的数据段传送
- TCP、UDP
网络层
主机与主机间分组传送
IP、路由协议
链路层
- 相邻网络节点间的数据帧传送
- PPP, Ethernet
物理层
物理介质上的比特传送
对等实体:
- 两台计算机上同一层所属的程序、进程或实体称为该层的对等程序、对等进程或对等实体
第二章 应用层
客户机/服务器体系结构
服务器:具有客户资源
- 总是打开的主机
- 具有固定的、众所周知的IP地址
- 主机群集常被用于创建强大的虚拟服务器
客户机:发出请求和接受数据
- 同服务器端通信
- 可以间断的同服务器连接
- 可以拥有动态IP地址
- 客户机相互之间不直接通信
进程通信
- 进程
- 运行在端系统中的程序
- 同一主机上的两个进程通过内部进程通信机制进行通信
- 不同主机上的进程通过交换报文相互通信
套接字
- 又叫应用程序编程接口API
web应用和HTTP
网页
由许多对象组成
对象就是文件,可以是HTML文件, JPEG图像, Java applet, 音频文件…
多数网页由单个基本HTML文件和若干个所引用的对象构成
每一个对象对应一个URL
使用TCP:HTTP属于应用层,使用运输层的TCP进行传输
- 1 客户初始化一个与HTTP服务器80端口的TCP连接(创建套接字)
- 2 HTTP服务器接受来自客户的TCP连接请求, 建立连接
- 3 Browser (HTTP client)和Web服务器 (HTTP server) 交换HTTP消息(应用层协议消息)包括HTTP请求和响应消息
- 4 最后结束,关闭TCP连接
HTTP是无状态协议
- HTTP服务器不维护客户先前的状态信息
==非持久的HTTP连接==
每个TCP连接上只传送一个对象,下载多个对象需要建立多个TCP连接
HTTP/1.0使用非持久HTTP连接
非持久HTTP详解
- 假设用户输入URL http://www.someSchool.edu/someDepartment/home.index网页由1个HTML文件, 和10个jpeg图像构成
- 解析步骤
第一步:建立TCP连接
- HTTP客户机初始化与服务器主机中HTTP服务器的TCP连接
- 服务器中HTTP服务器在80端口监听TCP连接。收到请求连接,接受,建立连接,通知客户
第二步:HTTP请求连接
- HTTP客户发送HTTP请求消息,包含URL到TCP连接套接字,消息指出客户所需要的web对象
- HTTP服务器接受请求消息,产生一个响应消息,包含被请求对象,并发送这个消息到自身TCP连接套接字
- HTTP服务器结束TCP连接
- HTTP 客户接收包含html文件的响应消息, 显示html. 解析html文件,找出1个jpeg对象
- 对十个引用对象重复上述操作
在非持久HTTP连接下,上述只需4RTT
缺点:
- 每个对象都需要2个RTT
- OS必须为每个TCP连接分配主机资源
- 大量客户的并发TCP连接形成服务器的严重负担
持久HTTP连接
一个TCP连接上可以传送多个对象
HTTP/1.1默认使用持久HTTP连接
例题
不带流水线的持久HTTP连接
- 客户先前响应消息收到,才发出新的请求消息
- 每个引用对象经历1个RTT
带流水线的持久HTTP连接:最优解决方案
- HTTP/1.1默认使用
- 客户遇到1个引用对象就发送请求消息
- 所有引用对象只经历1个RTT
响应时间模型
- 定义往返时间RTT(Round-Trip Time):
- 响应时间:
- 1个RTT用于建立TCP连接
- 1个RTT用于HTTP请求/响应消息的交互
- Html文件传输时间
- total = 2RTT+transmit time
- 响应时间:
HTTP报文格式
- 请求报文
- 响应报文
web缓存
- 代表起始服务器满足HTTP请求
- 在不访问服务器的前提下满足客户端的HTTP请求
所有HTTP请求指向缓存
- 对象在缓存中:缓存器返回对象
- 否则缓存器向起始服务器发出请求,接收对象后转发给客户机
- 作用
- 减少客户机请求的响应时间
- 减少内部网络与接入链路上的通信量
- 从整体上大大降低因特网上的web流量
邮件服务器
电子邮件内容
- 由信封和内容两部分
- STMP文件只能传送ASCII码文本数据,不能传送可执行文件或者其他二进制对象
- 也就是说不能传送多媒体邮件,非英文国家的文字
邮件读取
基于万维网
例题
万维网
使用统一资源定位符URL指明因特网上任何种类“资源”的位置
HTTP1.0
- HTTP请求报文与第三次握手同时传输
- 每请求一个报文就会有2个RTT的开销
- 每请求一个对象都需要花费2RTT的时间
HTTP1.1
HTTP报文格式
- HTTP是面向文本的,其中每一个字段吧都是一些ASCII码串,并且每个字段的长度都是不确定的
cookies
web缓存与代理服务器
if-modified -since 文档的修改日期
- 服务器根据该日期判断文档是否被修改
- 若一致,发送304not modified响应,表示未修改
- 若不一致,服务器给代理服务器发送封装有该文档的响应报文,代理服务器更新文档
例题
SMTP
Simple Mail Transfer Protocol
客户使用TCP来可靠传输邮件消息到服务器端口号25
直接传送: 发送服务器到接收服务器
传输的3个阶段
- 握手
- 邮件消息的传输
- 结束
命令/应答的交互
- 命令: ASCII文本格式
- 应答: 状态码及其短语
eg
SMTP总结
- SMTP使用持久连接
- SMTP 要求邮件消息(header & body)必须是7-bit ASCII、
SMTP与HTTP的比较
HTTP:拉协议
SMTP:推协议
HTTP: 每个对象封装在它各自的HTTP响应消息中发送
SMTP: 一个邮件内各个对象置于同一个邮件消息的多目部分发送
邮件消息的格式
SMTP: 用来交换邮件消息的协议
RFC 822: 文本邮件消息格式标准
信头-头部行。如:
To:
From:
Subject:
这些头部不同于SMTP命令!
信体
邮件消息也必须是ASCII字符
DNS
- 例题
- 当主机的DNS高速缓存中有域名的DNS信息时,不需要查询任何域名服务器,无需发出DNS查询
- 当没有找到缓存时,如图查询四次
域名系统Domain Name System
- 功能
- 主机名到IP地址的转换
- 主机别名:一个主机可以有一个规范主机名和多个主机别名
- 邮件服务器别名
- 负载分配:DNS实现冗余服务器:一个IP地址集合可以对应于同一个规范主机名
- DNS分类
根名字服务器
- 根名字服务器负责记录顶级域名服务器的信息
顶级域名服务器
- 负责顶级域名 com, org, net, edu, etc, 和所有国家的顶级域名 uk, fr, ca, jp.
权威DNS服务器
在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,
这些记录将这些主机的名字映射为IP地址。
组织机构的权威DNS服务器负责保存这些DNS记录。
多数大学和公司维护它们的基本权威DNS服务器
本地DNS服务器
严格来说不属于该服务器的层次结构
每个ISP(如居民区ISP、公司、大学)都有一个本地DNS也叫默认服务器
当主机发出DNS请求时,该请求被发往本地DNS服务器。
起着代理的作用,转发请求到层次结构中。
递归查询
迭代查询
DNS缓存和权威DNS记录更新
- 一旦名字服务器获得DNS映射, 它将缓存该映射到局部内存
- 服务器在一定时间后将丢弃缓存信息
- 本地DNS服务器可以缓存TLD服务器的IP地址
DNS记录
RR 格式: (name, value, type,ttl)
Type=A(Address地址)
- name = 主机名
value = IP地址
- name = 主机名
Type=CNAME(canonical别名)
- name = 主机别名:www.ibm.com的真名为servereast.backup2.ibm.com
value = 真实的规范主机名
- name = 主机别名:www.ibm.com的真名为servereast.backup2.ibm.com
Type=NS( name server )
- name = 域名(如foo.com)
value = 该域权威名字服务器的主机名
- name = 域名(如foo.com)
Type=MX(mail exchange)
- name =邮件服务器的主机别名
value =邮件服务器的真实规范主机名
- name =邮件服务器的主机别名
DNS协议
查询报文与应答报文 , 但具有同样的报文格式
报文头部
标识符: 16位,查询和应答报文使用相同的标识符
标志:有若干个标志构成,分别标识不同的功能
查询/应答-0/ 1
查询希望是/非递归查询-1/0
应答可/否获得(支持)递归查询-1/0
应答是/否来自权威名字服务器-1/ 0
第三章 传输层
概念
在两个不同的主机上运行的应用程序之间提供逻辑通信
传输层协议运行在端系统
发送方: 将应用程序报文分成数据段传递给
网络层
接受方: 将数据段重新组装成报文传递到应
用层
两个进程之间的逻辑通信
- 可靠, 增强的网络层服务
多路复用和多路分解
- 多路复用
- 在发送主机
- 多个套接字收集数据,用首部封装数据,然后将报文段传递到网络层
- 多路分解
- 在接收主机
- 将接收到的数据段传递到正确的套接字
- 多路分解工作过程
- 主机收到IP数据报
- 每个数据报有源IP地址,目的IP地址
- 每个数据报搬运一个数据段
- 每个数据段有源和目的端口号
- 主机用IP地址和端口号指明数据段属于哪个合适的套接字
- 主机收到IP数据报
- TCP套接字由4部分指定
- 源IP地址
- 源端口地址
- 目的IP地址
- 目的端口地址
- TCP主机服务器支持很多的TCP套接字
- 每个套接字用四部分来表示
- Web服务器对每个连接的客户都有不同的套接字
- 非持久HTTP将每个请求有一个不同的套接字
==UDP==
https://blog.csdn.net/u010429831/article/details/120010948
概述
- 提供尽力而为的服务
- 数据报可能丢失、传递失序的报文到应用程序
- 无连接
- 发送数据之前不需要建立连接,减少了开销和和发送数据之前的时延
- UDP是面向报文的。
- 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付
- 保留报文的边界,一次发送一个报文
- UDP一次交付一个完整的报文
- 因此,UDP需要选择合适大小的报文,若报文太长,UDP把它交给IP层之后,IP层在传送时可能要进行分片处理,降低IP层的效率
- 反之,若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率。
- 没有拥塞控制
- 网络出现的拥塞不会使源主机的发送速率降低。
- 适用于实时应用
- UDP 支持一对一、一对多、多对一和多对多的交互通信
- UDP的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短
UDP 存在原因
- 无需建立连接,减少延迟
- 简单,在发送者和接受者之间不需要连接状态
- 很小的数据段首部。首部开销小,只有 8 个字节
- 没有拥塞控制,UDP 能够用尽可能快的速度传递
- UDP 支持一对一、一对多、多对一和多对多的交互通信
首部
- UDP首部格式
- 首部字段8字节,4个字段,每个字段2字节
- 长度是首部和数据的总长度
- 源端口: 源端口号,需要对方回信时选用,不需要时全部置0
- 长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
- 校验和:检测UDP数据报在传输中是否有错,有错则丢弃。该字段是可选的,当源主机不想计算校验和,则直接令该字段全为0
- 校验和的计算
- 17是协议代号,表示UDP
- 伪首部的作用:
- 通过伪首部的IP地址检验,UDP可以确认该数据报是不是发送给本机IP地址的
- 通过伪首部的协议字段检验,UDP可以确认IP有没有把不应该传给UDP而应该传给别的高层的数据报传给了UDP
- 伪首部的UDP长度=UDP数据包的UDP包长度字段值
- 识别一个通信应用需要5个因素。”**源IP地址”、”目标IP地址”、”源端口”、”目标端口”、”协议号”**。UDP首部只包含了(源端口和目标端口),用此来校验,如果其他三项信息被破坏,极有可能导致应收包应用收不到,不应该收包的应用收到。为此,有必要在通信中,验证这5项的识别码是否正确,就引入了伪首部的概念。
校验和
在计算校验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部
所谓“伪首部”是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算校验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。校验和就是按照这个临时的 UDP 用户数据报来计算。
伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。上图 5-5 的最上面给出了伪首部各字段的内容
UDP 计算检验和的方法和计算 IP 数据报首部校验和的方法类似。但不同的是:IP 数据报的校验和只检验 IP 数据报的首部,但 UDP 的校验和是把首部和数据部分一起都检验。
校验方法
- 发送方
在发送方,首先是先把全零放入首部中的校验字段和字段,再把伪首部以及 UDP 用户数据报看成是由许多 16 位的字串接起来的。若 UDP 用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。然后按照二进制反码计算出这些 16 位字的和。将此和的二进制反码写入检验和字段后,就发送这样的 UDP 用户数据报
- 接收方
在接收方,把收到的 UDP 用户数据报连同伪首部(以及可能的填充全零字节)一起,按二进制反码求这些 16 位字的和。当无差错时其结果应为全 1。否则就表明有差错出现,接收方就应丢弃这个 UDP 用户数据报(也可以上交给应用层,但附上出现了差错的警告)
- 校验和例子
- 求和时产生的进位必须回卷到结果上
- 产生的进位必须回卷到结果(累加和)
- 累加和按位取反得到校验和
(1)将UDP伪头部、UDP头部和数据部分全部用16进制数表示。
(2)将第一个16进制数与第二个16进制数相加。求和时产生的进位必须回卷加到结果上。
(3)将上一步得到的16位数与第三个数16进制的数相加,重复第二步,直到累加完所有的16进制数,并且得到的结果为16进制数。
(4)将累加最后得到的16进制数取反,得到校验和。
- 发送端
- 填上伪首部
- 全0填充检验和字段
- 全0填充和数据部分
- 伪首部+首部+数据部分二进制反码求和
- 把和求反码填入检验和字段
- 去掉伪首部,发送
- 接收端
- 填上伪首部
- 伪首部+首部+数据部分二进制反码求和
- 结果全1则无差错,否则丢弃数据报
当传输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程。图 5-6 是 UDP 基于端口分用的示意图。
如果接收方 UDP 发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议 ICMP(Internet Control Management Protocol) 发送 “端口不可达” 差错报文给发送方
请注意,虽然 在 UDP 之间的通信要用到其端口号,但由于 UDP 之间的通信是无连接的,因此不需要使用套接字socket(TCP 之间的通信必须要在两个套接字之间建立连接)
==可靠数据传输==
(3条消息) rdt 可靠数据传输协议_springtostring的博客-CSDN博客
- FSM:有限状态机
- 来表示发送方和接收方
Rdt1.0 完全可靠信道上的可靠数据传输
rdt1.0是基于理想情况下的协议,假设所有信道都是可靠的,没有比特位的翻转,没有数据包的丢失与超时
所以rdt1.0的传输功能就是 发送方发送数据,接收方接受数据
Rdt2.0 具有bit错误的信道
rdt2.0新增了3种机制:
1.错误检验
2.接收者反馈接收信息(ACK,NAK)
3.重传机制
* 在运输层对应用层的数据进行打包处理时,新增checksum,从而接收端可以对其数据包进行检验。正确返回ACK,错误返回NAK
提供了差错检测和接收方反馈(ACK,NAK)
当没有错误时:
当发生错误时:
停-等协议
- 发送方发送一个报文,然后等待接受方的响应
Rdt2.0的致命缺陷
如果ACK/NAK混淆了会发生什么?
发送方并不知道接收方发生了什么!
万能做法:重发
不能正确重发: 可能重复
处理重复:
发送方给每个分组加一个序号
在 ACK/NAK 混淆时发送方重发当前分组
接收方丢弃重复的分组(并不向上传递)
——停等协议数据包需要多少序号?
- ==两个序号 (0,1) 就可以满足==
rdt2.1发送方处理两个序号 (0,1) 就可以满足混乱的ACK/NAKs
rdt2.1接收方处理混乱的ACK/NAKs
rdt2.2一个NAK不要的协议
rdt2.2是在rdt2.1上的基础之上做了小小的改善,摒弃了NAK,只需采用ACK。我们在ACK的信息上加上了期望的顺序号,现在假设情景发送方向接收方发送0号数据包,如果接收方接收到0号数据包,返回(ACK,1),发送方接着发送1号数据包。如果接收方接收到0号数据包出现错误,返回(ACK,0),发送方重传0号数据包
rdt3.0 具有出错和丢失的信道
rdt3.0在rdt2.2的基础之上处理了数据包丢失的情况,增加了计时器的机制,如果在RTT时间段内,发送方没有接收到反馈信息,那么发送方默认数据包已经丢失了,会自动重传
性能
- 算出来的是发送方的利用率
停等协议SW
- 具体就是rdt
- 停等协议的信道利用率
信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道利用率是零
当往返时延RTT远大于发送时延TD时,信道利用率非常低
流水线技术 go-back-N
累计确认
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按需到达的最后一个分组数据发送确认。
ACKn表示序号n及以前的所有数据分组都已正确接收
- 好处
- 即使确认分组丢失,发送方也可能不必重传
- 缺点
- 当通信线路质量不好时,信道利用率不高
- 当发送方接收到非期望的分组后,会丢弃该分组并发送最后一个收到的分组的序号
- 收到几个错误的分组就发送几个期望的ACKn
- 超时重传时,在发送窗口内且已经发欧神诺跟到数据分组也必须全部重传。
- 接收方只能按序接收正确到达的数据分组,一个数据错误会导致后续多个分组不能被接收方正确接收而丢弃。
- 导致对通信资源的极大浪费
- 当通信线路质量不好时,信道利用率不高
- 好处
若窗口大小WT超出取值范围
- 接收方无法分辨新旧分组
- 发送窗口1<WT≤2^n^-1
总结
例题
- 注意:重传只重传发送窗口已发送但未确认的帧
- 陷阱:
- 没有收到1的确认帧,但是收到3的确认帧,即表示0-3号全被接收
流水线: 发送方允许发送多个 “在路上的”, 还没有确认的报文
- 序号数目的范围必须增加
增加了利用率
滑动窗口
发送方:
在分组头中规定一个k位的序号
窗口:允许的连续未确认的报文
接收方:
ACK-only: 总是为正确接收的最高序号的分组发送ACK
可能生成重复的ACKs
只需要记住被期待接收的序号expectedseqnum
接收到失序分组:
丢弃(不缓冲) ->==没有接收缓冲区==!
重发最高序号分组的ACK
选择性重传 Selective Repeat, SR
接收方分别确认已经收到的分组
- 必要时,缓冲报文, 最后按序提交给上层
发送者只重发没有收到确认的分组
- 对每个没有确认的报文发送者都要启动一个定时器(每个未被确认的报文都有一个定时器)
发送窗口
N 个连续序号
限制被发送的未确认的分组数量
不再采用累计确认,而是逐一确认
-
- 接收方收到窗口第一个ACK之后,向后移动一位
- 收到非首位的ACK,窗口不移动
- 接收方收到窗口第一个报文之后,向后移动一位
- 当失序接收时,窗口不移动,记下已接收的报文序号,当窗口中的序号全部接收时,整体移动
- 接收方收到窗口第一个ACK之后,向后移动一位
窗口大小和序号大小的关系
窗口≤序号空间大小的一半
发送窗口尺寸WT必须满足1<Wt≤2^(n-1)^
T接收方的接收窗口尺寸必须满足1<WR≤WT
例题
==TCP==
特点
- 点到点:
- 一个发送者,一个接收者
- 可靠按序的字节流
- 没有信息边界
- 流水线
- TCP拥塞控制设置窗口大小
- 收发缓冲区
- 全双工数据
- 同一个连接上的双向数据流
- MSS: 最大报文段长
- 面向连接
- 在数据交换前握手
- 初始化发送方和接收方数据
- 流量控制
- 发送方不会淹没接收方
- 面向字节流
- 虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序看成是一连串的无结构字节流。
- TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些在传送。
- 如果应用程序一次只发送一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去
报文段结构
- 首部格式
- 最小长度20字节
- 最大长度60字节
- TCP的全部功能都体现在它首部的各字段中
源端口目的端口:2字节
序号Seq:4字节,[0,2^32^-1],TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
确认号ack:[0,2^32^-1],期望接收的下一个报文段的数据的第一个字节的序号。同时也是对之前收到的所有数据的确认
eg:ack=n,表明到序号n-1的所有数据都已正确接收,期 望接收序号为n的数据
数据偏移:4比特,以32位为单位,首指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远
即指出TCP报文段的首部长度
首部的最小长度为20B,因此数据偏移字段的最小值为 0101,最大长度为60B,所以偏移字段的最大值为1111
保留字段:6比特,保留为今后使用,目前置为0
ACK:确认。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效
SYN:SYN=1 表示这是一个连接请求或连接接收报文
RST:当rst=1时表示出现严重差错,必须释放连接重新建立连接
FIN:FIN=1,表明次报文段的发送端数据已发送完毕并要求释放连接
窗口:2字节,让对方设置发送窗口的依据。单位是字节
检验和:2字节,检验首部和数据两个部分。计算检验和时,要在TCP报文段前面加上12字节的伪首部
保留字段:6位,全为0
可靠数据传输
TCP基于以字节位单位的滑动窗口实现可靠传输
- 发送方在未收到接收方的确认时,可以将发送窗口内还未发送的数据全部发送
- 接收方只接受序号落入发送窗口内的数据
对于不按序到达的数据
- TCP没有明确规定如何处理
- 通常先临时存放在接收窗口中,等到字节流中缺少的字节收到后,再按需交付上层的应用层
接收方必须有累计确认和捎带确认机制
- 减小传输开销
- 接收方不应过分推迟发送确认,否则会导致不必要的超时重传,反而浪费了网络资源
TCP的通信是全双工的
例题
- 重发场景
快速重传
超时触发重传存在问题:超时周期往往太长——重传丢失报文之前要等待很长时间,因此增加了网络的时延
发送方可以在超时之前通过重复的ACK检测丢失报文段
发送方常常一个接一个地发送很多报文段
如果报文段丢失,则发送方将可能接收到很多重复的 ACKs
如果发送方收到一个确认后再收到3个对同样报文段的确认,发送方应意识到不对劲——生成三个重复ACK,是因为接收方存在缺失报文段
启动快速重传: 在定时器超时之前重发丢失的报文段
==流量控制==
使用滑动窗口机制
举例
- 当主机A收到0窗口通知时,启动持续计时器,当计时器超时,发送**零窗口探测报文段(1字节)**。主机B接收该报文段进行确认,并告知自己的接收窗口值
- 若零窗口报文段丢失?
- 零窗口报文段也有重传计时器
例题:
TCP连接的接收方有一个接收缓冲区
发送速率和接收应用程序的提取速率匹配
流量控制:发送方不能发送的太多太快,让接收缓冲区溢出
- 应用程序可能从这个缓冲区读出数据很慢
工作机制(假设 TCP 接收方丢弃失序的报文段)
- 流量控制使用接收窗口:接收缓冲区的剩余空间
- 接收方在报文段中宣告接收窗口的剩余空间
- 发送方限制没有确认的数据不超过接收窗口
通过TCP报文段中的窗口字段大小限制
TCP三次握手
解决三个问题
1.使TCP双方能够确认对方的存在
2.使TCP双方能够协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等)
3.使TCP双方能够对运输实体资源(如缓存大小、链接表中的项目等)进行分配
具体过程
- TCP规定SYN=1的报文段不能携带数据,但要消耗一个序号
- TCP普通的确认报文段可以携带数据,但如果不懈怠数据,则不消耗序号
为什么不能使用两次握手?
- 当有重复的TCP连接请求时,会造成TCP服务器进程错误进入连接已建立状态
- 防止已失效的报文段又传到服务器进程,造成服务器进程资源
例题
- 服务器进程TCP连接请求确认报文段中的seq是服务器进程中的序号字段,由服务器随机指定,与其他其他报文段中的值无关
用户发送TCP SYN报文段到服务器
- 指定初始的序号
- 没有数据
服务器接收SYN,回复SYN/ACK报文段
- 服务器分配缓冲区
- 指定服务器的初始序号
客户接收SYN/ACK,回复ACK报文段
- 可能包含数据
TCP四次挥手
FIN=1的报文段即使不携带数据,也要消耗掉一个序号
客户端进程等到2MSL才关闭
- MSL:最长报文段寿命
为什么TCP客户端进程不直接关闭
- 防止最后普通的确认报文段在传输时丢失,接收TCP服务器发送的TCP确认报文段
客户关闭套接字clientSocket.close
Step 1: 客户发送 TCP FIN 控制报文段到服务器
Step 2: 服务器接收 FIN, 回复 ACK. 进入半关闭连接状态;
Step 3: 服务器发送FIN到客户,客户接收 FIN, 回复 ACK,
进入 “time wait”状态等待结束时释放连接资源
Step 4: 服务器接收 ACK. 连接关闭.
TCP超时重传的时间选择
- RTO略大于RTT
- 问题
- 网络环境复杂,每次测的的RTT不同
- RTTs计算方法
- RTO略大于RTTs
- RTO计算方法
- 发生重传时无法确定RTT
==拥塞控制原理==
部分报文段丢失,发生超时
- 具体操作见下面
采用快速重传算法可以让发送方尽早知道个别报文段的丢失
- 不至于等到超时重传计时器超时再重传
- 要求收到失序报文段立即发出对上一报文段的重复确认
快恢复算法
- +3的原因:3个重复的报文段表明有3个数据报文段已经离开了网络,这3个报文段不在消耗网络资源,而是停留在接收方的接收访存中
举例
例题
术语
- MSS:最大报文段
- rwnd:拥塞控制窗口
- ssthresh:慢启动门限
拥塞:
从信息系角度:太多源主机发送太多的数据,速度太快以至于网络来不及处理
与流量控制不同
表现:
丢失分组 (路由器的缓冲区溢出)
长延迟 (在路由器的缓冲区排队)
控制方法
TCP的拥塞控制主要依赖于**==拥塞窗口cwnd==**
端到端拥塞控制
- 没有从网络中得到明确的反馈
- 从端系统观察到
- TCP采用的方法
网络辅助的拥塞控制
- 路由器给端系统提供反馈
- 单bit指示拥塞 (SNA, DECnet, TCP/IP ECN, ATM)
- 指明发送者应该发送的速率
TCP拥塞控制
- 三个机制
- 慢启动
- AIMD
- 对拥塞事件做出反应
慢启动(slow start)
cwnd初始化为1个最大报文段MSS大小,发送端开始按照拥塞窗口大小发送数据
- 每当有一个报文段被确认,cwnd就增加1个MSS大小
连接开始时,CongWin=1MSS
- 以2的指数方式增加速率
什么时候从指数增加变为线性增加
- 当CongWin达到ssthresh时
- 每收到一个ACK,, CongWin =CongWin + (MSS/ CongWin)*MSS
AIMD
AIMD(加法增大乘法减小)
1. 乘法减小:无论在慢启动阶段还是在拥塞控制阶段,只要网络出现超时,就是将cwnd置为1,ssthresh置为cwnd的一半,然后开始执行慢启动算法(cwnd<ssthresh)。
2. 加法增大:当网络频发出现超时情况时,ssthresh就下降的很快,为了减少注入到网络中的分组数,而加法增大是指执行拥塞避免算法后,是拥塞窗口缓慢的增大,以防止网络过早出现拥塞。
快速恢复的主要步骤是:
1 | 1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。 |
这两个结合起来就是AIMD算法,是使用最广泛的算法。拥塞避免算法不能够完全的避免网络拥塞,通过控制拥塞窗口的大小只能使网络不易出现拥塞。
发送方增加传输速率(窗口大小),探测可用带宽,直到发生丢包事件
- 乘性递减: 发生丢包事件后将拥塞窗口减半
- 加性递增: 窗口减半之后,每个RTT内如果没有丢失事件发生,拥塞窗口增加一个MSS
对拥塞事件的反应
- 当超时事件发生时,CongWin立即设置为1个MSS;
- 窗口开始指数增长(慢启动)
- 达到一个阈值后再线性增长
- 什么时候?
- 当 CongWin达到超时前的一半的时候
- ssthresh
- 什么时候?
当收到三个重复的确认时:
- CongWin减半+3(Reno版)
- 然后窗口线性增长
拥塞避免
- cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫**慢启动门限(ssthresh)**的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段
- cwnd超过ssthresh之后,开始加法增加,避免增长过快
但发生超时, 么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了消息,在这种情况下,TCP反应比较“强烈”:
1.把ssthresh降低为cwnd的一半
ssthresh=cwnd/2
2.把cwnd重新置为1
3.重新进入慢启动过程
- TCP还有一种情况会进行重传:那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传
1.把ssthresh设置为cwnd的一半
ssthresh=cwnd/2
2.把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)
cwnd=ssthresh+3
3.重新进入拥塞避免阶段。
加性递增
TCP拥塞控制的FSM图
- 当 CongWin 低于阀值, 发送方处于慢启动阶段, 窗口指数增长.
- 当 CongWin 高于阀值, 发送方处于拥塞避免阶段, 窗口线性增长.
- 当三个重复的ACK 出现时,阀值置为CongWin/2 并且CongWin 置为阀值加上3个MSS并进入快速恢复阶段,此时每收到一个重复的ACK拥塞窗口增加1MSS,如果收到新的ACK则拥塞窗口置成阀值).
- 当超时发生时 ,阀值置为CongWin/2 并且CongWin 置为1 MSS.
https://blog.csdn.net/ydyang1126/article/details/72842274
第四章 网络层
概念
- 从发送方主机传输报文段到接收方主机
- 发送方主机封装报文段(segments)为数据报(datagrams)
- 接收方主机递交报文段给传输层
- 在每个主机、路由器上都需要运行网络层协议
- 路由器会检查通过它的所有IP数据报头部字段,然后根据目的的IP地址对数据报进行转发
两个主要的网络层功能
转发**(forwarding)**
- 将分组从路由器的输入端口转移到正确的路由器输出端口
路由(routing)
- 确定分组从发送方传输到接收方(目的主机)所经过的路径(或路由)
- 路由算法
- 路由是端到端的路线。整体路线
- 转发是局部具体怎么走
- 两者的相互作用
- 路由算法确定通过网络的端到端路径
- 转发表确定本路由器上的本地转发
数据平面和控制平面
数据平面
本地的,每个路由器自身的功能
决定抵达路由器输入端口的数据包如何转发到输出端口
控制平面
- 整个网络范围
- 决定数据报在端到端路径上的路由器之间如何路由
- 两种控制平面的实现方式
- 传统的路由算法
- 软件定义网络 SDN
虚电路和数据报网络
虚电路
- 可靠通信应该由网络来保证
数据报
- 可靠通信应该由用户主机来保证
数据报网络提供网络层的无连接服务
虚电路网络提供网络层的连接服务
任何网络中的网络层只提供两种服务之一,不会同时提供
传输层:面向连接服务在网络边缘的端系统中实现
网络层:面向连接服务在端系统及网络核心的路由器中实现
数据报网络特点
- 网络层服务模型简单
- 端系统功能复杂
- 高层实现许多功能,如按序传送、可靠数据传送输、拥塞控制与DNS名字解析
- 服务模型提供的服务保证最少(可能没有!),对网络层的需求最小,使得互连使用各种不同链路层技术的网络变得更加容易
- 许多应用都在位于网络边缘的主机(服务器)上实现
数据报转发表
- 采用地址范围建立表项
- 对于给定的目的地址,使用最长地址前缀匹配来完成输出端口的查找
- 路由器转发表只维持转发状态信息
- 转发表由选路算法修改;虚电路网络转发表随虚电路的建立和拆除更新
- 一个端系统发送给另一个端系统的一批分组可能在网络中选择不同的路径,到达的顺序可能不一致
- 数据报网络的特点
- 网络层服务模型简单
- 端系统功能复杂。高层实现许多功能,如按序传送、可靠数据传输、拥塞控制和DNS名字解析等
- 带来的结果
- 因特网服务模型提供的服务保证最少(可能没有!),对网络层的需求最小,使得互连使用各种不同链路层技术的网络变得更加容易
- 许多应用都是在位于网络边缘的主机(服务器)上实现
路由器的工作原理
结构及功能
两个核心功能
- 运行路由算法/协议(OSPF,RIP,BGP)
- 将分组从路由器的输入端传送到正确的输出链路
路由器的体系结构
输入端功能
- 线路端接模块
- 将一条物理链路端接到路由器的物理层
- 数据链路处理模块
- 实现路由器的数据链路层功能
- 查找与转发模块
- 实现查找与转发功能,以便分组通过路由器交换结构转发到适当的输出端口
- 确定将一个到达的分组通过交换结构转发给哪个输出端口。通过查找转发表实现,这里的转发表是存储在输入端口的内存中
- ==分布式交换==
- 选路处理器计算转发表,给每个输入端口存放一份转发表拷贝
- 在每个输入端口本地作出交换决策,,无需激活中央选路处理器
- 可避免在路由器中某个单点产生转发处理瓶颈
- 目的:以线速完成输入端口的处理
- 排队:如果数据报到达输入端口的速度快于输入端口将数据报转发到交换结构的速度,就会发生排队
三种交换结构
经内存的交换结构
输入端口与输出端口之间的交换由CPU(选路处理器)控制完成
输入端口与输出端口类似I/O设备:
当分组到达输入端口时,通过中断向选路处理器发出信号,将分组拷贝到处理器内存中;
选路处理器根据分组中的目的地址查表找出适当的输出端口,将该分组拷贝到输出端口的缓存中
交换速度受总线带宽的速度限制(每个分组穿过两次总线)
若总线带宽为每秒写入或读出B个分组,则总的转发吞吐量 (分组从输入端口被传送到输出端口的总速率)小于B/2
经总线的交换结构
- 输入端口通过一条共享总线将分组直接传送到输出端口,不需要CPU选路处理器的干预
- 每次只能有一个分组通过总线传送
- 分组到达一个输入端口时,若总线正忙,会被暂时阻塞,在输入端口排队
- 路由器交换带宽受总线速率控制
- 输入端口通过一条共享总线将分组直接传送到输出端口,不需要CPU选路处理器的干预
经交换矩阵的交换结构
纵横式交换机:由2n条总线组成,n 个输入端口与n 个输出端口连接
到达输入端口的分组沿水平总线穿行,直至与所希望的输出端口的垂直总线交叉点
- 若该条垂直总线空闲,则分组被传送到输出端口
- 否则,该到达的分组被阻塞,必须在输入端口排队
输出端口:
- 取出存放在输出端口内存中的分组,并将其传输到输出链路上
- 当交换结构将分组交付给输出端口的速率超过输出链路速率,就需要排队与缓存管理功能。当输出端口的缓冲区溢出时,就会出现延时和丢包
输入端口排队
==IPV4==
https://blog.csdn.net/wangzhen209/article/details/74453548
格式
- IPv4头部:20B
- 各功能
- 版本号:4位。表示该IP数据报使用的IP协议版本。目前Internet中使用的主要是TCP/IP协议族中版本号为4的IP协议
- 首部长度:4位。此域指出整个报头的长度(包括选项)
- 该长度是以32位二进制数为一个计数单位的
- 接收端通过此域可以计算出报头在何处结束及从何处开始读数据
- 普通IP数据报(没有任何选项)该字段的值是5(即20个字节的长度)
- 服务类型(TOS、type of service):8位。服务类型字段的8位分成了5个子域
- 长度:16位。总长度字段是指整个IP数据报的长度(报头区+数据区),以字节位单位
- 利用头部长度字段和总长度字段就可以计算出IP数据报中数据内容的起始位置和长度
- 生存时间(寿命 TTL,time to live):占用8位二进制位
- 指定了数据报可以在网络中传输的最长时间
- TTL的初始值由源主机设置(通常为32、64、128或256),一旦经过一个处理它的路由器,它的值就减1。当该字段为0时,数据报就丢弃,并发送ICMP报文通知源主机,因此可以防止进入一个循环回路时,数据报无休止地传输下去
- 高层:占用8位二进制位
- IP协议可以承载各种上层协议,目标端根据协议标识就可以把收到的IP数据报送到TCP或UDP等处理此报文的上层协议了
- 首部检查和
- 占用16位二进制数
- 用于协议头数据有效性的校验
- 保证IP报头区在传输时的正确性和完整性。头部检验和字段是根据IP协议头计算出的检验和,它不对头部后面的数据进行计算
- 原理:发送端首先将检验和字段置0,然后对头部中每16位二进制数进行反码求和的运算,并将结果存在校验和字段中。 由于接收方在计算过程中包含了发送方放在头部的校验和,因此,如果头部在传输过程中没有发生任何差错,那么接收方计算的结果应该是全1。
- 占用16位二进制数
- 源IP地址:占用32位二进制数,表示发送端IP地址
- 目的地址:占用32位二进制数,表述目的端IP地址
分片和重组
每个数据链路有自己的MTU,链路类型不同,MTU的值也不同,这里MTU指的是数据链路帧的数据区的最大字节数
分片:
- 把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机
- 一个IP数据报在传输过程中可能被分片,也可能不被分片。如果被分片,分片后的IP数据报和原来没有分片的IP数据报结构是相同的,即也是由IP头部和IP数据区两个部分组成
- 分片后的IP数据报,数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:**标志和片偏移 **
- 标志:在IP数据报头部有一个叫标志的字段,用3位二进制数表示
- —片偏移:IP数据报被分片后,各片数据区在原来IP数据区中的位置用13位片偏移来表示。上图中分片1的偏移为0;分片2的偏移为600;分片3的偏移为1200实际在IP地址中,由于偏移是以8个字节为单位进行计算的,因而在IP数据报中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150
重组
- 当分了片的IP数据报到达最终目标主机时,目标主机对各分片进行组装,恢复成源主机发送时的IP数据报,这个过程叫做IP数据报的重组。
- IP数据报头部中,标识用16位二进制数表示,它唯一地标识主机发送的每一份数据报
- 在一个数据报被分片时,每个分片仅把数据报“标识”字段的值原样复制一份,所以一个数据报的所有分片具有相同的标识
- 目标端主机重组数据报的原理:
- 根据“标识”字段可以确定收到的分片属于原来哪个IP数据报
- 根据“标志”字段的“片未完MF”子字段可以确定分片是不是最后一个分片
- 根据“偏移量”字段可以确定分片在原数据报中的位置
ip地址
IPV4编址
-
- 分为主机号和网络号
- 传统的IP地址分类
如果主机号全0,IP地址代表仅网络号指向的那个网段,该IP代表一个网段;如果主机号全1,IP地址代表网络号指向的全部主机,IP地址代表广播地址 ;其他就是普通的IP地址,指向网域中的一个主机了
-
A类地址:第一个字节作为网络地址,最高位为0,其余的三个字节作为主机地址。
最小网络号为0,保留不指派
最大网络号127,作为本地环回测试地址,不指派
B类地址:两个字节作为网络地址,最高位为10,其余的两个字节作为主机地址
C类地址:利用IP地址的前三个字节作为网络地址,最高位为110,最后一个字节作为主机地址
特殊IP地址段
同一局域网上的主机或路由器的IP地址中的网络号必须相同
交换机互连的网络仍然是一个局域网,只能有一个网络号
- 路由器总是具有两个或两个以上IP地址
当两个路由器直接相连时,在连线两端的接口处,可以指明IP地址也可以不指明IP地址
练习
- 三种情况不能指派给主机或者路由器接口
- A类网络号0和127
- 主机号全0,这是网络地址
- 主机号全1,这是广播地址
- 0.0.0.0是一个特殊的IPv4地址
- 只能作为源地址使用
- 表示“在本网络上的本主机”封装有DHCP发现报文的IP分组的源地址使用0.0.0.0
- 以127开头且后面三个字节”非全0”或者”非全1”的IP地址是一类特殊的IPv4地址
- 既可以作为源地址使用,也可以作为目的地址使用
- 用于本地软件的环回测试,例如常用的环回测试地址127.0.0.1
- 255.255.255.255是一个特殊的IPv4地址
- 只能作为目的地址使用
- 表示”只在本网络上进行广播”(各路由器均不转发)
- 三种情况不能指派给主机或者路由器接口
-
- 两个路由器直连,直连接口也属于同一段网络
IP数据报的发送和转发
怎么判断两个主机是否在同一网络
- 分别和子网掩码相与,得到网络号。比较是否在同一个网络中
默认网关
- 指定的默认路由器接口
- 发送时,主机先将IP数据报发送给默认网关
路由表结构
- 分别与地址掩码相与,结果与目的网络地址相匹配则发送
注意:路由器隔离广播域
- 当路由器收到目的IP为广播地址时,不会转发
例题
- 网络层不提供可靠传输。当路由器检测到错误时,直接丢弃并发送ICMP差错报告报文
- 网关错误的配置成了DHCP的IP地址,DHCP服务器不具备路由器的功能
划分子网
例题
默认子网掩码
- 划分子网的方法是从主机号借用若干个比特作为子网号,剩下的主机位为主机号
- 子网特点:
- 设备接口的IP地址具有同样的网络部分
- 没有路由器的介入,物理上能够相互到达
- 子网掩码
- 子网号字段长度是可变的,因此,为了确定子网地址,IP协议提供了子网掩码的概念 。
- 子网掩码用来确定网络地址(包括网络号和子网号)和主机地址的长度。子网掩码长为32位比特,其中的1对应于IP地址中的网络号和子网号,而子网掩码中的0对应于主机号。
子网划分技术
- 主机号全0的地址不能用,它被用做表示该子网的子网号;主机号全1的也不能用,它用于本子网的广播。因此每个子网所能容纳的主机数是2^N-2,N是主机号位数
无分类域间路由CIDR
例题
例题2
构造超网
- 网络前缀越长,地址块越小,路由越具体
- 若转发表转发分组发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配
-
- 192.168.4.3是该网络的广播地址,所以该网络中所有主机都能收到。该网络中主机数量为2。选c
IPv4地址的应用规划
定长的子网掩码FLSM
- 使用同一个子网掩码来划分子网
- 每个子网所分配的IP地址数量相同,造成IP地址浪费
例题
* 从中任选5个作为子网
- 每个子网所分配的IP地址数量相同,易造成浪费
变长的子网掩码VLSM
- 使用不同的子网掩码来划分子网
- 每个子网所分配的IP地址数量可以不同,近可能减少对IP地址的浪费
- 分配原则:
- 每个子块的起点位置不能随意选取
- 只能选取块大小整数倍的地址作为起点
- 建议先给大的子块进行分配
Classless Inter-Domain Routing,CIDR
lCIDR消除了传统的A类、B类和C类地址的概念。
使用斜线记法,又称为CIDR记法来区分网络前缀和主机号,即在IP地址后面加上一个斜线“/”,斜线后面用一个数字指定网络前缀的长度。
构造超网
层次寻址,路由聚合
练习:
(1)
以最多台数的部门(60台)为准,需要的最接近数为2^6=64,故要从最后个字节借8-6=2位,
子网分别为 202.1.1.0, 202.1.1.64, 202.1.1.128, 202.1.1.192,在这4个其中任选3个即可。掩码均为255.255.255.192。
(2)
若以最多台数的部门(120台)为准,仅能分两个子网,无法满足。故应采用CIDR法:
首先以最小需求台数部门为准(60台),此时主机号位数需要6位(因为60=<2^6-2),则子网号位数为8-6=2位,然后将子网划分出来。此时和(1)一样;
接下来,部门2、3可以直接在4个子网中任选两个,部门1选剩下2个以满足120台的要求(但这两个子网要连续,以便用CIDR法合并之,做超网)。比如202.1.1.128、202.1.1.192分别给部门2、3,部门1用202.1.1.0、202.1.1.64。
(3)最后将各部门IP段用CIDR超网形式描述,以便对外发布:
部门1:202.1.1.0/25; (注意含义:表示前25位是网络号,且最后一个字节最高位为0,后面7位是主机号)
部门2:202.1.1.128/26; (最后一个字节最高两位为10,后面6位是主机号)
部门3:202.1.1.192/26; (最后一个字节最高两位为11,后面6位是主机号)
说明:将202.1.1.128、202.1.1.192给部门1,202.1.1.0、202.1.1.64分别给部门2、3亦可。此时答案为:
部门1:202.1.1.0/26;
部门2:202.1.1.64/26;
部门3:202.1.1.128/25
动态主机配置协议DHCP
DHCP是应用层中的协议,使用运输层的UDP协议。也就是说DHCP报文在运输层会被封装成为UDP数据报
DHCP服务器端口是67
DHCP客户端端口是68
DHCP: Dynamic Host Configuration Protocol
- 自动从一个DHCP服务器得到IP地址
工作过程
1:DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文
2:DHCP 客户从 UDP 端口 68发送 DHCP 发现报文,IP地址为0.0.0.0 该地址只能作为源地址。目的IP地址为广播地址255.255.255.255
3:凡收到 DHCP 发现报文的 DHCP 服务器
都发出 DHCP 提供报文,因此 DHCP 客户
可能收到多个 DHCP 提供报文。DHCP提供报文的源IP的该DHCP服务器的IP,目的IP是255.255.255
4:DHCP 客户从几个 DHCP 服务器中选择
其中的一个,并向所选择的 DHCP 服务
器发送 DHCP 请求报文。
5:被选择的 DHCP 服务器发送确认报文
DHCPACK,客户进入已绑定状态,并可
开始使用得到的临时 IP 地址了。
DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的超时时间分别是 0.5T 和 0.875T。当超时时间到就要请求更新租用期。
6:租用期过了一半(T1 时间到),DHCP 发送
请求报文 DHCPREQUEST 要求更新租用期。
7: DHCP 服务器若不同意,则发回DHCP否认报文DHCPNACK。这时 DHCP 客户必须立即停止使用原来的 IP 地址,而必须重新申请 IP 地址发送DHCP发现报文(回到步骤2)
8: DHCP 服务器若同意,则发回确认报文DHCPACK。DHCP 客户得到了新的租用期,重新设置计时器。
若DHCP服务器不响应步骤6的请求报文DHCPREQUEST,则在租用期过了 87.5% 时,DHCP 客户必须重新发送请求报文 DHCPREQUEST(重复步骤6),然后又继续后面的步骤。
若服务器没有反应,当租用期到期之后,客户端立即停止使用之前租用的IP,重新发送DHCP发现报文
- 服务场景
- DHCP分配的不仅仅是IP地址,还可以分配
- 客户的第一跳路由器的地址(网关)
- DNS服务器的IP地址或域名
- 子网掩码
- DHCP是应用层协议
NAT网络地址转换
- Network Address Translation
NAT工作在网络层(第三层),它通过维护一个转换表(也称为NAT表),将内部IP地址和端口与外部IP地址和端口进行映射。当内部主机发送数据包到外部网络时,NAT会修改数据包的源IP地址和端口,将其替换为公共IP地址和一个未被使用的端口号。在收到外部网络的响应时,NAT会根据转换表将响应数据包转发给正确的内部主机。
如某些P2P应用程序或实时通信应用程序的支持可能有限,因为它们依赖于直接的点对点连接。此外,NAT还可能引入一定的网络延迟和复杂性。
使本地网络分组离开时具有同样的IP地址
执行NAT时路由器要求:
- 外出的分组: 替换每个外出的分组的 (源IP 地址, 端口号) 为 (NAT IP 地址, 新端口号)
- 远程客户/服务器用(NAT IP地址, 新端口号)作为目的地来响应。
- (在NAT转换表中)记录每个(源IP 地址, 端口号)到 (NAT IP地址, 新端口号) 转换配对
- 进来的分组: 对每个进来的分组,用保存在NAT表中的对应的(源IP 地址, 端口号) 替换分组中的目的域 (NAT IP 地址, 新端口号)
地址转换过程
因特网控制报文协议ICMP
- Internet Control Message Protocol
- 用于主机路由器之间彼此交流网络层信息
- 差错报告: 不可到达的主机, 网络,端口,协议
- 请求/应答
- 位于IP之上
- 因为ICMP消息是装载在IP分组里的
- 五种差错报告
- 目的(主机、网络、协议、端口)不可达
- 源抑制(Source Quench,拥塞)
- 超时/超期(TTL)
- 参数问题(头部损坏)
- 重定向
- 两种网络探询
- 回声(Echo)请求与应答报文(Reply):ping
- 时间戳请求与应答报文:tracerouter
IPV6
- IPv6 数据报格式
- 固定长度的 40 字节首部
- 不允许分片
IPV6地址表示
- 冒号十六进制表示法
==选路算法==
路由算法确定了通过网络的端到端路径
转发表确定了在路由器上的本地转发
默认路由器:
- 与主机直接相连的路由器,又叫第一跳路由器
- 每当主机发送一个分组时,都先传送给它的默认路由器
- 源路由器:源主机的默认路由器
- 目的路由器:目的主机的默认路由器
- 从源主机到目的主机的选路归结为从源路由器到目的路由器的选路
- 路由算法:是确定一个分组从源路由器到目的路由器所经路径的算法
网络的抽象图模型:费用(cost)
路由算法分类:
全局路由算法
所有路由器拥有完整的网络拓扑信息和链路费用信息。
链路状态路由算法LS:必须知道网络中每条链路的费用
分布式路由算法
- 以迭代的、分布式的方式计算最低费用路径
- 节点只有与其直接相连链路的费用信息:不需拥有所有网络链路费用的完整信息
- 通过迭代计算,并与相邻节点(邻居节点)交换信息
- 逐步计算出到达某目的节点或一组目的节点的最低费用路径
- 距离向量路由算法DV:每个节点维护到网络中所有其他节点的费用(距离)的估计向量
静态路由算法
- 路由确定后基本不再变化。只有人工干预调整时,可能有一些变化
==动态路由算法LS==
- 网络的流量负载或拓扑发生变化时,路径可能发生改变
- 可以周期性地或直接地响应拓扑或链路费用的变化
- 易受选路循环、路由振荡之类问题的影响
链路状态算法
==Dijkstra最低费用路径算==
- 计算任意一个节点(源节点)到所有其他节点的最低费用路径
- 给出该节点的转发表
- 迭代:通过k次迭代后可以知道到达k个目的节点的最低费用路径
- 基本思想:
- 以源节点为起点,每次找出一个到源节点的费用最低的节点,直到把所有的目的节点都找到为止
- 算法描述:
- 1、初始化
- 2、找出一个到源节点的费用最低的节点w,并以此更新其它点D(v) 值
- 3、重复步骤2
- 直到所有的网络结点都在N’中为止
例题
eg:
计算从u到所有可能目的节点的最低费用路径。
计算过程如表,表中的每一行表示一次迭代结束时的算法变量值。
==构建从源节点到所有目的节点的路径==
- 对于每个节点,都得到从源节点沿着它的最低费用路径的前驱节点
- 每个前驱节点,又可得到它的前驱节点;以此继续,可以得到到所有目的节点的完整路径
==构建最低费用路径树==
- 根据目的节点找出顺序和其费用以及前驱节点,可以画出源节点u到所有目的节点的最低费用路径树
- 根据得到的所有目的节点的完整路径,或最低费用路径树,可以生成源节点的转发表
- 转发表
- 存放从源节点到每个目的节点的最低费用路径上的下一跳节点
- 即指出对于发往某个目的节点的分组,从该节点发出后的下一个节点
转发表
- 构建转发表
dijkstra复杂度
==距离向量路由算法DV==
- 距离向量路由算法是一种迭代的、异步的和分布式的算法
- 分布式:每个节点都从其直接相连邻居接收信息,进行计算,再将计算结果分发给邻居
- 迭代:计算过程一直持续到邻居之间无更多信息交换为止
- 异步:不要求所有节点相互之间步伐一致地操作
- 自我终结:算法能自行停止
最低费用表示
dx(y):节点x到节点y的最低费用路径的费用
v: 节点x的邻居节点
c(x,v)+ dv(y):x与某个邻居v之间的直接链路费用c(x,v)加上邻居v到y的最小费用。即x经v到节点y的最小的路径费用
minv :从所有经直接相连邻居节点到节点y的费用中选取的最小路径费用
B-F方程举例
对每个结点x
- 初始化
- 更新自己的距离向量
- 重复执行(2),直到没有更新的距离向量发出
距离向量表
行:该节点的距离向量Dx和其邻居的距离向量Dv
列:所有目的节点
节点x的距离向量Dx ,即节点x到每个目的节点y的估计费用; Dx = [Dx(y):y在N中]
节点x每个邻居的距离向量Dv ,即x的邻居v到每个目的节点y的估计费用,Dv = [Dv(y):y在N中]
更新其距离向量
链路费用改变与链路故障
当一个节点检测到从它到邻居的链路费用发生变化时,就更新其距离向量,如果最低费用路径的费用发生变化,通知其邻居
某链路费用减少时情况
- 好消息在链路中能迅速传播
某链路费用增加时情况
链路费用增加的“坏消息”传播很慢
c不知道坏消息已经影响他了,局部形成环路
LS算法与DV算法的比较
LS算法:
- 知道网络每条链路的费用,需发送O(nE)个报文;当一条链路的费用变化时,必须通知所有节点
- 需要O(nE)个报文和O(n2)的搜寻,可能会振荡
DV算法:
- 迭代时,仅在两个直接相连邻居之间交换报文
- 当链路费用改变时,只有该链路相连的节点的最低费用路径发生改变时,才传播已改变的链路费用
- 收敛较慢。可能会遇到选路回环,或计数到无穷的问题。
健壮性
- LS:
- 路由器向其连接的一条链路广播不正确费用,路由计算基本独立(仅计算自己的转发表),有一定健壮性
- DV:
- 个节点可向任意或所有目的节点发布其不正确的最低费用路径,一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。一个不正确的计算值会扩散到整个网络
- 无健壮性
- LS:
消息:距离矢量算法DV好
收敛时间:链路状态算法LS收敛性好
健壮性:链路状态算法LS健壮性好
分层次的路由选择协议
- 域(自治系统)内路由选择
- 内部网关协议 IGP :AS内使用的
- RIP,OSPF
- 外部网关协议EGP:AS之间使用的
- BGP
==RIP==
基于距离向量DV
运输层使用UDP
路由器到直连网络的距离定义为1
路由器到非直连网络的距离定义为1+所经过的路由器数
例题
- 注意:距离为16表示不可达
例题
- 因为R3检测到网络不可达可知,R3与网络是直连的
- R1和R3都会给R2发送更新报文,R1选择了距离更近的R1
基于距离向量的路由选择协议
距离:
- 通常为跳数,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数+1
- 特别的,从一路由器到直接的网络距离为1
RIP允许路由最多包含15个路由器
- 距离16表示不可达
- RIP适用于小的互联网
交换信息
- 仅和相邻的路由器交换信息
- 路由器交换的信息是自己的路由表
- eg
- 修改发来的路由更新信息,距离+1,下一跳路由器改为发送来的路由器
- 更新距离
- eg2:
OSPF
基于链路状态LS
IP数据报
基于链路状态算法LS
- 使用了dijkstra最短路径算法
交换信息
- 通过洪泛法向自制系统内所有的路由器发送信息
- 广播
- 交换本路由器相邻的所有路由器的链路状态
- 当链路状态发生变化时交换信息
域间选路BGP
BGP发言人建立TCP连接。端口号为179
- 建立BGP会话交换路由信息
BGP发言人除了运行BGP外,还要运行自己所在自制系统的内部网关协议IGP(OSPF或RIP)
四种报文
例题:
- BGP报文封装在TCP报文段中进行传输
RIP协议通过UDP协议传送
OSPF通过IP协议传送
BGP协议通过TCP协议传送
- 从相邻AS获取子网可达信息
- 向该AS内部的所有路由器传播这些可达性信息
- 域间寻路任务:
- 基于距离矢量算法DV
SDN
- 软件定义网络(SDN,SoftwareDefinedNetwork)
- SDN并不是一个具体的技术,它是一种网络设计理念,规划了网络的各个组成部分(软件、硬件、转发面和控制面)及相互之间的互动关系
第五章 链路层
概述
主要术语
链路层的节点包括了主机和路由器;
我们将沿通信路径,将相邻节点连接起来的通信信道称为链路,这里的链路可以将主机与路由器,或者路由器与路由器连接起来。
为了将一个数据报从源主机传输到目的主机,数据报必须通过沿端到端路径上的各段链路传输。
链路主要包括:有线链路和无线链路。在实际链路上传输时,传输节点需要将数据报封装成数据帧进行传输。
数据链路层的职责是将数据报从一个节点传送到与该节点直接有物理链路相连的另一个节点。
类比
链路层提供的服务
- 封装成帧,链路接入
- 封装数据报为数据帧,增加头部尾部信息
- 若是共享链路,接入链路
- 如果是共享链路,需要解决信道接入(channel access)
- 在数据帧头部中,用MAC地址来表示源目的MAC地址
- 不同于IP地址
- 在相邻节点之间可靠传输数据帧
- 在比特错误率很低的链路(光纤、双绞线)很少使用
- 无线链路:高比特错误率,需要可靠交付
- 封装成帧,链路接入
为什么要在链路层和端到端都实现可靠传输?
在链路层实现可靠传输的主要原因是链路层是网络通信中的第一层,它负责将数据从一个节点传输到另一个相邻节点。在链路层上实现可靠传输可以处理物理链路上的错误和丢包,例如传输噪声、信号干扰等。链路层的可靠传输通常通过使用错误检测和纠正技术(如CRC校验)以及重传机制来实现。这样可以确保数据在链路上的可靠传输,减少错误和丢失
链路层的可靠传输仅限于相邻节点之间的传输,无法解决整个网络范围内的传输问题
在端到端层面也需要实现可靠传输。端到端的可靠传输通常由传输层协议(如TCP)负责实现。传输层的可靠传输通过使用序列号、确认应答、重传机制、拥塞控制等技术来确保数据在源和目的地之间的可靠传输。传输层可靠传输可以处理网络中的错误、丢包和延迟,并提供可靠性和完整性保证
帧头和帧尾的作用
- 帧定界
==链路层提供的服务==
- 在相邻节点之间可靠传输数据帧
- 流量控制(flow control):
- 用于控制发送节点向直接相连的接收节点发送数据帧的频率
- 差错检测(error detection):
- 差错可能由信号衰减、噪声引入
- 接收方检测是否出现错误
- 通知发送方重传或丢弃数据帧
- 错误纠正(error correction):
- 接收方标识和纠正比特错误,而不需要请求重传
- 半双工和全双工(half-duplex and full-duplex):
- 在半双工模式,链路的两个节点都可以发送数据,但是不能同时发送
- 在全双工:链路两个节点同时双向传输
链路层实现的位置
- 在主机和网络设备(路由器)上实现
- 在主机上,链路层的主体部分是在网络适配器上实现的(称为网卡)
差错检测和纠错
发送节点
接收节点
差错检测和纠正技术不能保证接收方检测到所有的比特差错,即可能出现未检测到的比特差错,而接收方并未发现
选择一个合适的差错检测方案使未检测到的情况发生的概率很小即可。
差错检测和纠错技术越好,越复杂,开销更大
奇偶校验
在待发送的数据后面添加1位奇偶校验位。
- 使整个数据(包括添加的校验位在内)中1的个数为奇或者偶
二维奇偶校验
第一行有3个1,因此第一行的校验位为1,
第二行有4个1,因此第二行的校验位为0,
第三行有3个1,因此第三行的校验位为1,
最终得到得到左边这个图。
假设在传输过程中,有一个比特错误,例如第二行第二列的1发生了翻转,变为了0,
在接收方进行检验时,会发现第二行的校验位不对,以及第二列的校验位不对,这样一交叉就会发现,第二行第二列的比特发生错误。
因此二维奇偶校验可以检测并纠正单个比特差错;能够检测分组中任意两个比特的差错。
Internet校验和
在发送方:
首先,将数据的每两个字节当作一个16位的整数,可分成若干整数;
其次,将所有16 位的整数求和;
最后,对得到的和逐位取反,作为检查和,放在报文段首部,一起发送。
在接收方:对接收到的信息 (包括检查和项)按与发送方相同的方法求和。
如果结果为全“1”:则收到的数据无差错;
如果结果中有“0”:则收到的数据出现差错。
- 特点:
- 分组开销小,检查和位数比较少
- 差错检测能力弱
- 适用于运输层
- 链路层的差错检测由适配器中专用的硬件实现,采用更强的CRC方法
==循环冗余检测CRC==
即多项式编码,把要发送的比特串看作为系数是0或1的一个多项式,对比特串的操作看作为多项式运算
基本思想
- 设发送节点要把数据D(d 比特)发送给接收节点
- 发送方和接收方先共同选定一个生成多项式G(r+1比特),最高有效位 (最左边)是1。
把要发送的比特串看作为系数是0或1的一个多项式,对比特串的操作看作为多项式运算。
这里我们来看这样一个例子,10111这个比特序列,如果用多项式表示,每个比特作为多项式的系数,因此10111等价于x的4次方+x的2次方+x的1次方+1
基本思想
模2运算
加法不进位,减法不借位
乘以2r,即比特模式左移r 个位置。
D×2r XOR R = D 00…00 XOR R
= DR (d+r 比特)·
如何计算CRC码。
首先将数据D称为2的r次方,这里r表示CRC编码的位数,
然后将其除以给定的生成多项式G,
所得的余数为CRC编码
-
我们通过一个具体的例子来说明,CRC编码的计算过程。
假设数据D为101110,生成多项式G为1001,CRC编码为3比特,是生成多项式的位数减1.
这里用模2运输,计算CRC编码。
首先将D乘以2的3次方,即可得101110000;
然后将101110000除以生成多项式1001,最后可得余数为0011,因为CRC编码只取3比特,因此为011。
因此发送方最终发送的数据为101110011。
例题
- 接收方进行校验
- 接收方不在末尾添加0
- 检错码只能检测出是否有差错,但无法定位错误,因此无法纠正错误
- 接收方进行校验
CRC特点
- 生成多项式G的选择:常见的有8、12、16和32 比特生成多项式G
- 能检测小于 r+1 位的突发差错、任何奇数个差错。
三种方法的比较
多路访问链路和协议
两种网络链路
- 点对点链路
- 链路两端各一个节点。一个发送和一个接收
- 如点对点协议ppp
- 广播链路
- 多个节点连接到一个共享的广播信道
- 广播:
- 任何一个节点传输一帧时,信号在信道上广播,其他节点都可以收到一个拷贝
广播信道
多路访问协议
目的:
- 避免多个节点同时使用信道,发生冲突,产生互相干扰
冲突(collide):
- 两个以上的节点同时传输帧,使接收方收不到正确的帧(所有冲突的帧都受损失)
- 造成广播信道时间的浪费
- 多路访问协议可用于许多不同的网络环境,如有线和无线局域网、卫星网等
- 两个以上的节点同时传输帧,使接收方收不到正确的帧(所有冲突的帧都受损失)
理想的多地址访问协议
信道划分协议
- 媒体接入控制
- 共享信通要着重考虑如何协调多个发送和接收站点对一个共享传输媒体的占用
- 即媒体接入控制MAC(Medium Access Control)
- 把信道划分为小片(时隙)
- 给节点分配专用的小片
- 主要有TDMA、FDMA、CDMA三种
TDMA
将时间划分为时间帧,每个时间帧再划分为N**个时隙(长度保证发送一个分组),分别分配给N个节点。每个节点只在固定分配的时隙中传输
设信道支持 N 个节点,传输速率是 R b/s
时分多路访问TDMA (time division multiple access)
将时间划分为时间帧,每个时间帧再划分为N个时隙(长度保证发送一个分组),分别分配给N个节点。每个节点只在固定分配的时隙中传输。
例:6个站点的LAN, 时隙1、3、4 有分组, 时隙2、5、6 空闲
频率相同,每个用户占用不同时隙
TDMA特点:
- 避免冲突、公平
- 每个节点专用速率R/N b/s
- 节点速率有限:R/N b/s
- 效率不高:节点必须等待它的传输时隙
- 避免冲突、公平
每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙
FDMA
- 频分多路访问FDMA (frequency division multiple access)
- 每个用户占一个频段
CDMA
码分多路访问CDMA (frequency division multiple access)
主要应用域多址接入
在同样的时间使用同样的频带进行通信
随机访问协议
- 基本思想
- 发送节点以信道全部速率(R b/s)发送
- 发生冲突时,冲突的每个节点分别等待一个随机时间,再重发,直到帧(分组)发送成功
- 节点间没有协调者
- 典型随机访问协议:
- ALOHA协议(纯ALOHA,时隙ALOHA)
- 载波监听多路访问CSMA协议
- 带冲突检测的载波监听多路访问CSMA/CD
- 带冲突避免的载波监听多路访问CSMA/CA
ALOHA
首先介绍ALOHA协议。
ALOHA是夏威夷大学研制的一个无线电广播通信网,采用星型拓扑结构,使地理上分散的用户通过无线电来使用中心主机。
中心主机通过下行信道向二级主机广播分组;
二级主机通过上行信道向中心主机发送分组(可能会冲突,无线电信道是一个公用信道)。如图所示。
ALOHA有两种形式:时隙ALOHA和纯ALOHA。我们将分别进行介绍。
纯ALOHA
- 非时隙ALOHA:简单,不需同步
- 不监听信道(发送时不知道是否冲突),不按时间槽发送,随机重发
- 若发生冲突,接收方就会检测出差错然后不予确认
- 发送发在一定时间内收不到就判断发生冲突
- 帧一到达,立即传输
- 如果与其他帧产生冲突,在该冲突帧传完之后:
- 以概率p立即重传该帧
- 或等待一个帧的传输时间,再以概率p传输该帧,或者以概率1-p 等待另一个帧的时间
- 纯ALOHA效率
时隙ALOHA
把时间分成若干时间片,所有用户在时间片开始时刻同步接入网络信道。
- 若发生冲突,则必须等到下一个时间片开始时刻再发送
控制发送的时间
比纯ALOHA效率更高
效率
- 当有很多节点,每个节点有很多帧要发送时,成功时隙所占的百分比
效率:
CSMA(载波侦听多路访问)
载波侦听
- 某个节点在发送之前,先监听信道
- 信道忙:有其他节点正往信道发送帧,该节点随机等待(回退)一段时间,然后再侦听信道
- 信道空:该节点开始传输整个数据帧
CSMA特点:
- 发前监听,可减少冲突
- 由于传播时延的存在,仍有可能出现冲突,并造成信道浪费
CSMA发送冲突的例子
在时间t0:节点B侦听到信道空,开始传输帧,沿着媒体传播比特。
在时间t1:节点D有帧要发送。B的传输信号未到达D,因此D检测到信道空,开始传输数据帧。很快,B的传输开始在D节点干扰D的传输(冲突)
我们可以看到传播时延越长,节点不能侦听到另一个节点已经开始传输的可能性越大。
带来的问题:信道浪费
- 节点没有进行冲突检测,既使发生了冲突,节点仍继续传输它们的帧。但该帧已经被破坏、是无用的帧,信道传输时间被浪费
带冲突检测的CSMA(==CSMA/CD)==
征用期
- 主机最多经过2τ就能检测到碰撞
- 将2τ作为征用期或碰撞窗口
最小帧长
- 若帧长太短,当主机将帧发送完毕之后将不再对该帧进行检测碰撞
- 若发出之后在遭遇碰撞,检测不到,也不会重发该帧
- 显然,以太网帧长不能太短、
以太网规定最小帧长为64字节,即512b
512比特时间即为征用期
若发送的数据非常小,则需要加入一些填充字节,使帧长不小于64字节
- 目的:
- 最小帧长确保了主机可在帧发送完成中之前检测到该帧在发送过程中是否遭到了碰撞
- 若征用期内没后检测碰撞,则之后一定不会发生碰撞
信道利用率
提高信道利用率
- 以太网端到端的距离受到限制,应该小
- 传输时延应该大,即帧的长度应该长
最小帧长=征用期×数据传输速率
例题
- 最短τ
- 最长2τ
CS:载波侦听/监听,每一个站在发送数据之前以及发送数据时都要检查总线上是否有其他计算机在发送数据
MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上
CD:碰撞检测(冲突检测),边发送边监听,判断自己在发送数据时其他站是否也在发送数据
基本原理:传送前侦听
- 信道忙:延迟传送
- 信道闲:传送整个帧
发送同时进行冲突检测:一旦检测到冲突就立即停止传输, 尽快重发
目的:缩短无效传送时间,提高信道的利用率
CSMA/CD举例
可以看到CSMA/CD中虽然也会发生碰撞,但是两个节点B、D在检测到冲突之后很短的时间内都放弃传输。
(备注)
黄色表示B节点的传播物理范围,红色表示D节点的物理传播范围
怎么看时空图,横轴表示四个节点在空间中的位置,纵轴表示时间
在时刻t0,节点B侦听到信道是空闲的,因为当前没有其他节点在传输,于是节点B开始传输
在t1时刻,由于B节点的电磁波还没有传播到D能检测的范围,因此D节点发现信道空闲,开始传输,这个时候就会产生相互干扰
D节点检测到干扰后,会立即放弃传输,B节点也会放弃
以太网CSMA/CD的运行机制
我们说以太网也是采用CSMA/CD机制来访问共享信道。
其基本思想如下:
首先,适配器从网络层获得一个数据报,封装成帧,准备发送;
第二,如果适配器侦听到信道空闲,开始传输帧;如果检测到信道繁忙,将等待一段时间,直到侦听到信道空闲,开始传输帧;
第三,在传输过程中,适配器会同时监听是否有其他适配器的信号能量;
如果适配器在整个帧的传输过程中,没有监听到其他信号,则完成该帧的传输;如果监听到来自其他适配器的信号,则中止传输帧;
中止传输后,适配器会等待一个随机时间,重新执行步骤2
以太网CSMA/CD的运行机制讨论
拥塞信号
- 48比特,确保所有传送者知道冲突发生
比特时间
- •对于10 Mbps Ethernet 为0.1微秒,
当K=1023,等待时间大约50毫秒
- •对于10 Mbps Ethernet 为0.1微秒,
二进制指数回退算法
•目标:适配器依据当前负载情况重传,重负载时等待时间变长
•第一次冲突: 在{0,1}中选k值;延迟Kx512比特时间传送
•第二次冲突:在{0,1,2,3}中选k值…
•10次以后,在 {0,1,2,3,4,…,1023}中选k值。
•K是等概率选择
最迟要多久才能检测到碰撞?
截断二进制指数规避算法
CSMA/CA
- 无限局域网中为什么不能使用碰撞检测CD
- 无线信道的传输条件特殊,其信号强度的动态范围大,无限网卡上接收到的信号强度往往会远小于发送信号的强度。
- 若要在无线网卡上实现碰撞检测CD,对硬件要求非常高,不易实现
- 无限局域网存在隐蔽站问题
CA:避免碰撞
可以适用于无线局域网
- 这是CSMA/CD无法检测的
工作原理
- 预约信道
- ACK帧
- RTS/CTS帧
两者区别
介质访问控制协议
- MAC协议:
轮询协议
- 轮询开销
- 等待延迟
- 单点故障
令牌传递协议
- 令牌:
- 一个特殊格式的MAC控制帧,不含任何信息
- 确保同一时刻只有一个节点独占信道
第二种轮流协议是令牌传递协议。
在这种协议中没有主节点,一个称为令牌的小的特殊帧在节点之间以某种固定的次序进行交换。
例如节点1可能总是把令牌发送给节点2,节点2可能总是把令牌发送给节点3,而节点4总是把令牌发送给节点1.
当一个节点收到令牌时,仅当它有一些数据帧要发送时,它才持有这个令牌,否则,它立即向下一个节点转发该令牌。
当一个节点收到令牌时,如果它确实有数据帧要传输,它发送最大数目的帧数,然后把令牌转发给下一个节点。
令牌传递是分布式的,有很高的效率。但是它也有一些问题:
例如一个节点的故障可能会使整个信道崩溃。
交换局域网
概述
局域网:Local Area Network ( LAN )
多址访问协议广泛应用于局域网
基于随机访问的CSMA/CD广泛应用于局域网
局域网按拓扑结构进行分类:
- 星形网、环形网、总线网、树形网和网状网
计算机与局域网通过网络接口板进行连接
- 网络接口板又称通信适配器(Adapter)或网络接口卡NIC(Network Interface Card),通常我们称为“网卡”
==链路层寻址和ARP==
- 每个节点有网络层地址和链路层地址
- 网络层地址
- 节点在网络中分配的一个唯一地址(IP地址)。用于把分组送到目的IP网络。长度为32比特(IPv4)
- 链路层地址
- 又叫做MAC地址或物理地址、局域网地址
- 用于把数据帧从一个节点传送到另一个节点(同一网络中)
- 网络层地址
- MAC地址
- LAN地址、物理地址
- 节点“网卡”本身所带的地址(唯一)
- MAC地址长度通常为6字节(48比特),共248个
- 6字节地址用16进制表示,每个字节表示为一对16进制数
- 1A-2F-BB-76-09-AD
- 网卡的MAC地址是永久的(生产时固化在其ROM里)、
- 对网络上各设备的唯一标识
MAC地址分配
- MAC 地址是平面结构
- 带有同一网卡的节点,在任何网络中都有同样的MAC地址
- IP地址具有层次结构
- 当节点移动到不同网络时,节点的IP地址发生改变
MAC地址识别
- 广播信道的局域网中,一个节点发送的帧,在信道上广播传输,其他节点都可能收到该帧
- 大多数情况,一个节点只向某个特定的节点发送
- 由“网卡”负责MAC地址的封装和识别
- 发送适配器:
- 将目的MAC地址封装到帧中,并发送。所有其他适配器都会收到这个帧。
- 接收适配器:
- 检查帧的目的MAC地址是否与自己MAC地址相匹配:
- 匹配:接收该帧,取出数据报,并传递给上层。不匹配:丢弃该帧
- 广播帧:发送给所有节点的帧 全1地址:FF-FF-FF-FF-FF-FF
回顾:节点的三种不同地址
刚刚我们讲到在单条链路上,数据帧的接收是根据目的MAC地址。
这里我们简单回顾下,一个节点的三种不同的地址表示。
第一种表示是:应用层的主机名,例如域名;
第二种表示是:网络层的IP地址,用于在网络层寻址,即路由器根据目的IP地址来进行转发;主机也根据目的IP地址是否是本机地址来判断是否接收。
第三章表示是:链路层的MAC地址,用于在链路层寻址,即实际链路传输时,每个主机网卡根据目的MAC地址是否是本机的MAC地址来判断是否接收。
在本页的例子中,标出了每个主机的IP地址和每个网卡的MAC地址。
回顾:地址之间的转换
那么,我们说实际的数据帧发送,需要目的主机的IP地址和MAC地址,这就需要提供地址之间的转化服务。
例如已知主机名,怎么查找该主机名对应的IP地址呢?这就需要用到DNS域名解析服务;
那么如果已知目的主机的IP地址,怎么查找它在同一个局域网中的MAC地址呢?这就需要用到ARP协议。ip->MAC
我们说ARP协议的主要作用是将IP地址解析为其对应的MAC地址。
需要说明的是ARP协议只为在同一个局域网内部的节点进行IP地址解析。
ARP地址地址解析协议
下面我们来看一下ARP协议是如何帮助进行IP地址解析的。
我们说局域网上的每个节点都会维护一个ARP表,这个表中会记录节点当前所知的IP地址到MAC地址的映射信息。
< IP address; MAC address; TTL>
这里的TTL是指的这个表项的存活时间,通常20分钟以后,这个表项就会被删除。
ARP*表:* 局域网上的每个节点(主机、路由器)都有这个表
•为某些局域网节点进行IP/MAC地址映射:
< IP address; MAC address; TTL>
•TTL (存活时间): 地址映射将被删除的时间(通常为20分钟)
两个主机位于同一个LAN
- 1.主机A希望发送数据报给主机B
- B的MAC地址不在A的ARP映射表中
- 2.主机A 广播 ARP查询分组, 其中包含B的IP地址
- 目的MAC地址 = FF-FF-FF-FF-FF-FF
- 局域网中所有节点收到ARP查询分组
- 3.主机B收到ARP查询分组,返回B的MAC地址给主机A
- 包含有B的MAC地址的帧发送给主机A(单播)
- 4.主机A在它的ARP表中缓存 IP-to-MAC 地址对,直到信息
- 软状态:信息超时会被删除,除非有新的更新消息
- ARP是即插即用的:
- 节点创建ARP表不需要网络管理员的干预
发送数据报到子网以外
主机A构建IP数据报,源地址是A的IP地址,目的地址是B的IP地址
主机A构建链路层数据帧,目的MAC地址是路由器左边端口的MAC地址
1.
首先主机A构建IP数据报,数据报的源IP地址是自己的111.111.111.111,目的IP地址是主机B的IP地址222.222.222.222。
那么该数据报封装成数据帧的源MAC地址是自己的MAC地址,74-29-9C-E8-FF-55,目的MAC地址是谁的呢?是B主机的MAC地址,还是路由器左边端口的MAC地址呢?
我们首先分析这个数据帧的发送路径。我们说当主机A判断该数据报的接收主机与自己不在同一个局域网时,它会首先将数据报发送到自己的第一跳路由器,即这里的路由器R,
因此该数据帧的目的MAC地址应该是R的左边端口的MAC地址,E6-E9-00-17-BB-4B。
2.
该数据帧到达路由器R后,路由器R接收数据帧,然后抽取出数据报递交给网络层,网络层根据目的IP地址,判断该数据报要往右边的端口转发,且接收主机B与自己右边端口属于同一个局域网。
3.
因此向右边端口输出数据帧时,数据帧的源MAC地址是路由器右边端口的MAC地址1A-23-F9-CD-06-9B,
数据帧的目的MAC地址是主机B的MAC地址49-BD-D2-C7-56-2A。
这里需要强调的是,在整个传输过程中,数据报的源IP地址和目的IP地址是不会发生改变的,改变的只是数据帧的源和目的MAC地址。
- IP地址不变
- MAC地址在改变
以太网
以太网的帧结构
- 发送方:
- 发送适配器将IP数据报封装成以太网帧,并传递到物理层
- 接收方:
- 接收适配器从物理层收到该帧,取出IP数据报,并传递给网络层
- 以太网的帧结构
接着,我们再介绍以太网的帧结构,如图所示,包括了前同步码、目的MAC地址、源MAC地址、类型、数据和CRC校验码。
注意这里CRC检验的数据只包含目的MAC地址、源MAC地址、类型、数据四部分。
首先发送方的发送适配器将IP数据报封装成以太网帧,并传递到物理层。
接收方的接收适配器从物理层收到该数据帧,抽取出IP数据报,并传递给网络层。
Ref : https://blog.csdn.net/eliot_shao/article/details/123473548
前同步码(8 字节)
- 前7字节是10101010,最后一个字节是10101011
- 使接收方和发送方的时钟同步,接收方一旦收到连续的8个字节前同步码,可以确定有帧传过来
- 前同步码是“无效信号”,接收方收到后删除,不向上层传
- CRC的校验范围不包括前同步码
-
前同步码有8个字节,其中前7字节是“10101010”,最后一个字节是“10101011”。
前同步码的作用是使接收方和发送方的时钟同步,接收方一旦收到连续的8字节前同步码,可确定有帧传过来。
注意:前同步码是“无效信号”,接收方收到后删除,不向上层传。CRC的校验范围不包括前同步码。
源、目的MAC地址(各6字节)
- 适配器只接收目的地址与其MAC地址匹配或广播地址的帧,并将数据字段的内容传递给网络层。否则,丢弃该帧
-
然后是各6个字节的源、目的MAC地址。
如果主机A向主机B发送一个IP数据报,主机B只接收目的MAC地址与自己MAC地址匹配的数据帧或广播地址的数据帧,并将数据字段的内容传递给网络层。否则,丢弃该帧。
类型字段(2 字节)
帧结构中类型字段主要是支持以太网中的多种网络层协议的复用的,绝大多数这里的类型是指IP协议。
数据字段(46-1500字节)
- 携带网络层传来的IP数据报
- 以太网的最大传输单元MTU是1500字节
- 若IP数据报超过1500字节,必须将该数据报分段
- 最小长度是46字节
- 如果IP数据报小于46字节,必须填充为46字节。接收方网络层去除填充内容
- 然后是数据字段,以太网的最大传输单元MTU是1500字节,最小长度是46字节。
- 携带网络层传来的IP数据报
循环冗余检测CRC(4字节)
帧结构的尾部是CRC循环冗余校验码。它主要是用于帮助接收主机检测数据帧中是否出现比特差错。
最后,需要说明的是以太网向网络层提供的是不可靠的无连接服务。
这里的无连接服务是指通信时,发送方适配器不需要先和接收方适配器“握手”。
这里的不可靠的服务是指接收到的数据帧可能包含比特差错。
在以太网中,收到正确帧,不发确认帧通知;收到出错帧,直接丢弃该帧,不发否定帧通知。
发送适配器不会重发出错帧。丢弃数据的恢复是通过终端传输层的可靠数据传输机制来实现的
最后,以太网的MAC协议采用的是带二进制指数回退的CSMA/CD协议
不可靠的无连接服务
- 以太网向网络层提供的服务:
- 无连接服务:
- 通信时,发送方适配器不需要先和接收方适配器”握手”
- 不可靠服务:
- 接收到的帧可能含有比特差错
- 收到正确帧,不发确认帧
- 收到出错帧,丢弃该帧,不发否定帧
- 发送适配器不会重发出错帧
- 丢弃数据的恢复是通过终端传输层的可靠数据传输机制来实现的
- 接收到的帧可能含有比特差错
- 无连接服务:
交换机
链路层设备
- 存储转发数据帧
- 检查到达的数据帧的MAC地址,有选择的转发数据帧到一个或多个输出链路,当数据帧被转发到一个共享网段时,使用CSMA/CD来访问共享链路
- 透明
- 主机不关心是否存在交换机
- 即插即用和自学习
- 交换机不需要手工配置
- 支持多节点同时传输
- 每个主机由单独的链路直接连到交换机端口
- 交换机可以缓存数据帧
- 以太网协议在每个输入链路使用,无碰撞,全双工
- 每条链路自身是一个碰撞域
在组网时加入交换机后,可以支持多个节点同时传输数据帧。
可以看上边这幅图,每个主机由单独的链路与交换机端口相连,因此交换机每个端口对应的链路和主机是一个独立的碰撞域。
又因为交换机对于收到的数据帧可进行缓存,因此在上边这幅图中,A主机和B主机同时发送数据帧,将不会发生冲突。
因此交换机具有较高的转发率。
本次课将详细讲解链路层交换机的工作原理。
首先交换机是属于链路层的设备,其主要作用是存储转发数据帧。
对于到达交换机的数据帧,交换机首先检查其目的MAC地址,然后根据MAC地址,有选择的将数据帧转发到一个或多个输出链路;
如果输出链路是一个共享网段,将使用CSMA/CD来访问共享链路。我们这里给出了一幅图来帮助大家理解后面这句话。
在这幅图中A、B、C主机和交换机的端口1由集线器设备互连,因此这里,A、B、C主机和交换机的端口1构成了一个共享网段,在共享链路发送数据帧,需要用到我们前面学习到的以太网链路访问协议CSMA/CD。
链路层交换机的第二个特点是透明,这里的透明是指的当一个主机向另一个主机发送数据帧时,它并不会知道某个交换机会收到这个数据帧,并将其转发到另一个节点。
交换机的第三个特点是即插即用和自学习,也就是说交换机是不需要手工配置的,插上就可以用。
支持多节点同时传输
在组网时加入交换机后,可以支持多个节点同时传输数据帧。
可以看上边这幅图,每个主机由单独的链路与交换机端口相连,因此交换机每个端口对应的链路和主机是一个独立的碰撞域。
又因为交换机对于收到的数据帧可进行缓存,因此在上边这幅图中,A主机和B主机同时发送数据帧,将不会发生冲突。
因此交换机具有较高的转发率。
转发表
- 每个交换机有一个交换机转发表,其中每个条目:
- 主机的MAC地址,到达主机的端口,时戳
- 转发表的条目通过自学习建立
在右边这幅图中,我们有这样一个疑问:交换机是怎么知道A’可通过端口4达到, B’ 可通过端口5到达呢?
这是因为每个交换机都有一个转发表,其中的条目如下:(主机的MAC地址,到达主机的端口,时戳);
因此当数据帧的目的MAC地址为A’主机时,我们通过查找相应的转发表项,就可获知该主机对应的端口。
那么转发表中的条目是怎么建立的呢?我们说是通过自学习机制。
- 自学习
下面我们就来介绍交换机的自学习机制。非常简单。
每当交换机收到一个数据帧时,交换机会学习发送主机的位置及进入的局域网段和到达端口,并在转发表中进行记录。
如这里的例子所示,主机A发送数据帧给主机A’,数据帧到达交换机时,交换机会在转发表中记录这样一个表项:
A主机的MAC地址和可达端口号1,生存时间60秒,这就表示通过端口1可达到A主机。
数据帧的过滤/转发
下面我们来学习交换机收到数据帧后,是如何进行查表转发的。我们说根据如下规则:
首先,记录到达链路和发送主机的MAC地址;
第二步,使用数据帧的目的MAC地址,在转发表中进行检索:
如果在转发表条目中找到对应的MAC地址,则执行:
如果目的MAC地址对应的端口与数据帧的到达端口相同,说明接收主机属于同一个共享网段,则直接将该数据帧丢弃。因为接收主机也会收到该数据帧;
否则,转发端口与达到端口不一致,则将该数据帧转发到指定端口
如果数据帧的目的MAC地址在转发表中没有找到,则交换机将该数据帧向除到达端口之外的所有端口转发,也就是泛洪。
自学习/转发例子
我们来看一下自学习和转发的例子。
这里初始时转发表是空的,当主机A发送数据帧给主机A’时,该数据帧到达交换机,
交换机首先根据收到数据帧的端口和该数据帧的源MAC地址,建立表项1,说明通过端口1可达到主机A,这就是自学习。
然后交换机根据数据帧的目的MAC地址(A’)在转发表中查找,由于没有找到A’的MAC地址,则交换机将该数据帧向除1端口之外的所有端口转发,
只有A’主机会发现数据帧的目的MAC地址与自己的MAC地址一致,接收该数据帧。
注意,这里主机A’发往主机A的数据帧,在到达交换机后,由于转发表中已经有目的MAC地址对应的表项,因此交换机将只向1端口转发数据帧。
交换机互连
交换机也可以进行互连,以组成更大的局域网。如本页的图所示。
那么请大家思考,这样一个问题,如果主机A发送数据帧给主机G,那么交换机S1是怎么知道需要先把数据转发到S4和S3的?
我们说仍然是通过自学习。当数据帧到达S1时,可能S1的转发表中没有G主机的MAC地址的表项,于是S1将该数据帧泛洪,那么S4的端口也会收到这个泛洪的数据帧,
如果S4的转发表也没有G主机的MAC地址对应的表项,则S4会继续泛洪,于是S3也会收到数据帧,如果S3的转发表仍然没有G主机的MAC地址,则S3会继续向它的端口泛洪,直到数据帧到达G主机。
- 多个交换机自学习的例子
交换机交换特点和方式
特点
- 识别目的MAC地址,根据交换表进行端口选择
- 识别源MAC地址更新交换表
在识别目的MAC地址和源MAC地址的过程中是否需要接收并缓存完整的帧呢?
在识别目的MAC地址和源MAC地址的过程中,需要接收并缓存完整的帧。这是因为MAC地址是位于数据链路层的帧的头部中,用于标识帧的源和目的设备。
当一个设备接收到一个帧时,它需要读取帧头部中的目的MAC地址和源MAC地址字段来确定该帧是否是针对自己的,或者是从哪个设备发送过来的。因此,设备需要接收并缓存完整的帧,以便能够从帧头部提取MAC地址信息进行判断和处理
交换方式
- 存储转发(缓存整个帧后再转发)
- 具有差错检测功能,转发时延较大,适用于出错率高的链路
- 快速分组(直通交换)
- 识别出目的地址直接转发
- 不具有差错检测功能,转发时延较小,适用于时延要求高,出错率低的链路
- 存储转发(缓存整个帧后再转发)
存储转发交换方式
快速分组交换方式
存储转发:具有差错检测功能,转发时延较大,适用于出错率高的链路。
快速分组又称直通交换:不具有差错检测功能,转发时延较小,适用于时延要求高,出错率低的链路。
路由器和交换机的区别
最后我们将交换机和路由器进行简单的对比。
首先,路由器和交换机都是存储转发设备(中转设备),其中路由器是网络层设备,交换机是链路层设备。
第二,路由器和交换机都需要维护转发表,其中路由器使用路由算法来计算转发表,基于IP地址转发;而交换机是通过泛洪和自学习来建立转发表,基于MAC地址进行数据帧转发。
集线器和交换机的区别
使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议
集线器只工作在物理层,它的每个接口仅简单的转发比特,不进行碰撞检测
集线器共享总线
发送单播帧
广播帧没有什么区别
多态主机同时给一台主机发送单播帧
- 集线器会发生碰撞
- 交换机可以缓存数据帧,不会发生碰撞
扩展以太网
- 发送单播帧
- 发送广播帧
- 效果是一样的
- 仅适用集线器扩展的以太网在逻辑上仍然是共享总线的的,并且形成了一个更大的碰撞域
- 参与竞争总线的主机比扩展前更多了
-
- 交换机只扩大广播域而不会扩大碰撞域
- 集线器既扩大了广播域也扩大了碰撞域
总结
考点
简答题
协议和服务
- 协议的实现保证了能够向上一层提供服务。
- 本层的服务用户只能看见服务而无法看见下面的协议。下面的协议对上面的服务用户是透明的
- 协议是水平的,是控制两个对等实体进行通信的规则
- 服务是垂直的,服务是由下层通过层间接口向上层提供的
IOS七层
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
协议分层的好处
结构清晰,有利于识别复杂系统的部件及其关系
模块化使得系统升级、维护
有利于标准化
PDU
- 发方添加首部信息创建新的数据单元(封装),收方去掉首部(解封)
为什么要封装数据
增加控制信息
- 构造协议数据单元(PDU)
控制信息包括
地址(Address): 标识发送端/接收端
差错检测编码(Error-detecting code): 用于差错检测或纠正
协议控制(Protocol control): 实现协议功能的附加信息,如: 优先级(priority)、服务质量(QoS)、 和安全控制等
五层协议要点和各层功能
- 各层主要功能:
- 物理层:透明的传送比特流
- 数据链路层:两个相邻节点间的线路无差错的传送以帧为单位的数据
- 每一帧包括数据和必要的控制信息
- 网络层:选择合适的路由,使发送站的运输层所传下来的分组能够 正确无误地按照地址找到目的站,并交付给目的站的运输层
- 任务是向上一层的进行通信的两个进程之间提供一个可靠的端到端服务,使它们看不见运输层以下的数据通信的细节。应用层直接为用户的应用进程提供服务
边缘与核心
因特网的两大组成部分
- 边缘部分
- 由各主机构成,用户直接进行信息处理和信息共享
- 低速连入核心网
- 核心部分
- 由各路由器连网,负责为边缘部分提供高速远程交换分组
- 边缘部分
分组交换特点
- 报文分组,加首部
- 经路由器存储转发
- 在目的地合并
电路交换特点
- 建立电路连接、通话、拆除连接
运输层提供服务
- TCP服务:
- 面向连接,可靠数据传输
- 流量控制
- 拥塞控制
- 无时延和带宽保证
- UDP
- 无连接,不可靠数据传输
- 不提供流量控制、拥塞控制
- 时延和带宽保证
网页/HTTP
- 由许多对象组成。每一个对象被一个URL寻址
HTTP:超文本传输协议
client/server模式:客户端浏览器请求+ Web服务器响应
工作过程:
- 客户初始化一个与HTTP服务器80端口的TCP连接 (创建套接字)
- HTTP服务器接受来自客户的TCP连接请求, 建立连接
- Browser (HTTP client)和Web服务器 (HTTP server) 交换HTTP消息(应用层协议消息)包括HTTP请求和响应消息
- 最后结束(或叫关闭)TCP连接
HTTP是无状态的协议
HTTP持久连接和非持久连接
流水持久性、非流水持久性
响应时间(RTT)计算
==DNS==
假设用一个全新的浏览器(第一次启动的那种),访问百度(http://www.baidu.com/),在敲入网址并按下回车之后
- 首先搜索浏览器的DNS缓存,缓存中维护一张域名与IP地址的对应表
- 若没有命中,则继续搜索操作系统的DNS缓存
- 若仍然没有命中
- 则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的DNS缓存,查找成功则返回结果
- 若本地域名服务器的DNS缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
- 本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器地址给本地服务器
- 本地域名服务器拿到顶级域名服务器地址后,向其发起请求,获取权威域名服务器地址
- 本地域名服务器根据权威域名服务器地址,向其发起请求,得到该域名对应的 IP 地址
- 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
- 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存。浏览器得到域名对应的 IP 地址,并将 IP 地址缓存(缓存时间)
- 和起始服务器(或者WEB缓存/代理服务器)建立TCP连接
- 得到百度的IP,下一步是使用TCP协议,建立TCP连接
- 向起始服务器发送请求报文,用HTTP协议请求域网页内容
- 浏览器收到响应报文并解析
传输层的连接和网络层连接区别
- 传输层连接
- 在传输层,连接通常是指传输控制协议(TCP)提供的面向连接的可靠数据传输服务。这种连接是通过三次握手建立的,包括建立连接、传输数据和释放连接等阶段
- 传输层连接提供了可靠性和流量控制机制,确保数据的有序传输和数据的完整性。它使用序列号、确认应答、超时重传等技术来处理数据的可靠传输
- 传输层连接是全双工的,允许双方同时发送和接收数据。它提供了端到端的通信,允许应用程序之间建立可靠的通信信道
- 网络层
- 在网络层,连接通常是指网络之间的逻辑连接,也称为网络层连接或逻辑连接。它是通过IP协议实现的,包括IP地址和路由器之间的路由选择
- 网络层连接用于将数据包从源主机传输到目标主机,通过选择合适的路径和路由器进行转发。它提供了网络互连的功能,使得不同网络之间可以进行通信
- 网络层连接是无连接的,每个数据包都是独立地进行路由选择和转发。它不提供可靠性和流量控制机制,数据包的传输顺序和完整性依赖于下层的传输层或应用层协议
使用户子网掩码分组转发
运输层和链路层的可靠交付
运输层提供了可靠交付服务,而有些链路层协议也提供可靠交付服务,为什么在协议栈的两层都提供这种可靠交付服务?两者的区别是什么?有什么共同点?
链路层的可靠交付,主要用于易产生高差错的链路,其目的是在本地纠正一个错误,而不是通过运输层或应用层进行端到端的数据重传来进行纠正
运输层的可靠传输服务,是因为并不是所有的链路层协议都提供了可靠数据传输服务,要实现端到端的数据可靠传输,需要运输层提供可靠的传输服务
运输层提供的可靠传输服务是在端到端的基础上为两个进程之间提供可靠服务;而链路层提供的可靠传输服务是在一条链路的两个节点之间提供的可靠传输
两者都是通过确认和重传实现的
计算
数据报分片
TCP首部20字节
UDP首部8字节
DF don’t fragment
DF=1 不允许分片
DF=0 允许分片
MF more fragment
MF=1 后面还有分片
MF=0 后面没有分片
片偏移字段,单位为8字节
- 数据报长度和数据部分长度
数据报长度包括了首部的长度
数据部分长度不包括了首部的长度
例题
UDP数据报总长度=6192+8=6200B
题目中没有给出IP数据报分片的最大长度,默认为1500B(总长度),也就是说数据部分只有1480B
UDP数据报封装在IP数据报的数据部分
6200/1480= 4…180
需要分成5片
剩下的做法与上题一样
MTU :数据字段,以太网的最大传输单元MTU是1500字节,最小长度是46字节
地址聚合
将IP转换成2进制,找最长前缀
路由表更新
对于发来的路由表,所有距离+1
-
- 当下一跳路由器不相同但是距离相同是不更新,当下一跳不同时只有距离更小才更新
路由表下一跳
交换机自学习
子网划分
IP地址的分类:
A类:(1.0.0.0-126.0.0.0) 网络号 8位 主机号 24位
B类:(128.0.0.0-191.255.0.0) 网络号 16位 主机号 16位
C类:(192.0.0.0-223.255.255.0) 网络号 24位 主机号 8位
子网是从主机号借位
例题:
-
思路1:先从子网号需求最多的开始分
思路2:CIDR,见PPT
注意: CIDR主机号可以全0或者全1,而ABC类地址主机号不能全0或者全1