计算机通信与网络 | HUST.CS | 《计算机网络自顶向下方法》
计算机网络和因特网
什么是因特网
具体构成描述
端系统(主机):连入因特网的设备
端系统通过通信链路和分组交换机连接在一起
链路的传输速率以比特/秒,即 bps 衡量。
分组交换机最出名的类型为路由器和链路层交换机。
ISP:因特网服务提供商。端系统通过 ISP 接入互联网,低级的 ISP 通过高级的 ISP 连接起来
通信链路:点到点链路、广播链路
ICP:互联网内容提供商
ISP:互联网服务提供商
服务描述
因特网:为应用程序提供服务的基础设施
服务原语是计算机网络中定义的一种通信机制,用于描述下层协议如何向上层协议提供服务。服务原语主要包括四种类型:请求(request)、指示(indication)、响应(response)和证实(confirm)。
什么是协议
协议三要素:语法、语义、同步
协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和/或接收一条报文或其他事件所采取的动作。
网络边缘
主机和端系统位于因特网的边缘,有时又被划分为客户和服务器。
接入网
接入网指将端系统物理连接到其边缘路由器的网络。边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器。
家庭接入:DSL、电缆、FTTH、拨号和卫星
宽带住宅接入最流行的类型:数字用户线(DSL)、电缆。
DSL 调制解调器使用现有的电话线(双绞铜线)与位于电话公司本地中心距的数字用户线接入复用器(DSLAM)交换数据。家用电话线同时承载数据与传统电话信号,用不同的频率进行编码。
不对称接入:DSL 的上下行速率不相同,这种接入被称为不对称的
电缆因特网接入:利用有线电视基础设施。光缆将电缆头端连接到地区枢纽,从这里使用传统的同轴电缆到达用户。应用了光纤和同轴电缆,经常被称为混合光纤同轴(HFC)系统
电缆因特网接入需要特殊的调制解调器:电缆调制解调器(CMTS),将 HFC 划分为上下行两个信道。下行速率通常比上行高。电缆因特网接入的一个重要特征是共享广播媒体。因此需要一个多路访问协议来协调传输和避免碰撞。
FTTH(光纤到户):从本地中心局直接到家庭提供一条光纤路径,分为主动光纤网络(AON)和被动光纤网络(PON)
网络核心
分组交换
通过链路传输大小为 的分组,链路速率为 ,则通过该链路的时间为
存储转发传输
多数分组交换机在链路的输入端使用存储转发传输。
排队时延和分组丢失
对于每条相连的链路,有一个输出缓存(输出队列),如果出链路正忙,需要排队,引入排队时延。
输出缓存溢出,产生丢包。
分组交换网络中的时延、丢包和吞吐量
时延概述
分组在途径的每个节点经受不同类型的时延。最为重要的是节点处理时延、排队时延、传输时延和传播时延。
- 节点处理时延
检查分组首部和决定将该分组导向何处所需要的时间是处理时延的一部分。
- 排队时延
队列中,当分组在链路上等待传输时,它经受排队时延。如果队列为空,排队时延为 0。如果流量很大,排队时延很长。
- 传输时延
分组长度 ,链路速率 bps,传输时延为 。
- 传播时延
传播时延取决于链路的物理介质。
传输时延可以理解为路由器将分组推向链路所需要的时间,传播实验可以理解为链路中物理传播的时间。
用 表示节点总时延,
排队时延和丢包
用 表示分组到达队列的平均速率,单位 pkt/s。
流量强度为 ,即每秒到达链路的比特数与转发能力的比值。
若 ,队列长度将无限增加,设计系统时必须保证 。
随着 , 迅速增加
端到端时延
假定在源到目的地之间共有 台路由器,网络是无拥塞的,每台路由器和源主机的处理时延都是 ,输出速率都是 bps,每条链路的传播时延都是 。
那么,,其中 。
往返时延 RTT,Traceroute 程序
计算机网络中的吞吐量
考虑从 A 到 B 传输一个大文件。
瞬时吞吐量为当前时间主机 B 接收文件的速率。
如果文件大小为 ,主机 B 接收该文件用去 秒,则平均吞吐量为 。
协议层次及其服务模型
分层的体系结构
协议分层
网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件。
某层向上一层提供服务。各层的所有协议被称为协议栈。
- Internet 五层模型:应用层、运输层、网络层、链路层、物理层
- ISO OSI/RM 七层模型:应用层、表示层、会话层、运输层、网络层、链路层、物理层
- 应用层
应用层是网络应用程序及他们的应用层协议留存的地方。
如 HTTP、SMTP、FTP、DNS 等
应用层协议分布在多个端系统,而一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换分组,位于应用层的信息分组称为报文。
- 运输层
运输层在应用程序端点之间传输应用层报文。运输层的分组称为报文段。
如 TCP,UDP
- 网络层
网络层负责将称为数据报的分组从一台主机移动到另一台主机。
如 IP
- 链路层
链路层分组称为帧
- 物理层
物理层分组称为比特流。
应用层
应用层协议原理
网络应用程序体系结构
- 客户-服务器体系结构
- P2P 体系结构
进程通信
在一对进程之间的通信会话场景中,发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器。
进程通过套接字向网络发送报文和从网络接收报文。
应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。
特别是应用层协议定义了:
- 交换的报文类型,例如请求报文和响应报文
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的
- 字段的语义,即这些字段中的信息的含义
- 确定一个进程何时以及如何发送报文,对报文进行响应的规则
Web 和 HTTP
Web 构成:浏览器、WEB 服务器、协议
HTTP 概况
Web 的应用层协议是超文本传输协议 HTTP
Web 页面是由对象组成的。一个对象是一个文件,可由一个 URL 地址寻找。
非持续连接和持续连接
- 非持续连接:HTTP/1.0,每次传输一个对象即关闭 TCP。每次耗时 2RTT+文件传输时
- 持续连接:HTTP/1.1,服务器保持到超时
HTTP 报文格式
请求报文
例子:
GET /somedir/page.html HTTP/1.1 HOST: www.someschoole.edu Connection: close User-agent: Mozilla/5.0 Accept-language: fr
格式:
方法 URL 版本 // 请求行 首部行 空行 实体体
请求方法有 GET POST HEAD PUT DELETE,大部分通过 GET 完成。
响应报文
例子:
HTTP/1.1 200 OK Connection: close Date: Tue, 18 Aug 2015 15:44:04 GMT Server: Apache/2.2.3 (CentOS) Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT Content-Length: 6821 Contest-Type: text/html (data data data)
格式:
版本 状态码 短语 //状态行 首部行 空行 实体体
cookie
HTTP 是无状态的,用 cookie 标识用户
服务器在数据库为用户创建 cookie,之后通信报文里携带 cookie 标识身份
因特网中的电子邮件
组成部分:用户代理、邮件服务器、简单邮件传输协议 SMTP
运输层
可靠信道传输
SR 选择重传
表示期待收到,还未收到的第一个分组
待收窗口:
超时窗口:
窗口长度必须小于或等于序号空间大小的一半。
TCP 协议
TCP 连接:三次握手
两个进程在相互通信之前,必须先互相发送某些预备报文段。
clientSocket.connect(serverName, serverPort));
客户端首先发送一个特殊的 TCP 报文段,服务器用另一个特殊的 TCP 报文段相应,客户再用第三个特殊报文段作为响应。前两个报文段不承担有效载荷,第三个可以。
TCP 建立后,从上层接受数据,引入 TCP 发送缓存。每次 TCP 从缓存中取出并放入报文的数据量受制于最大报文长度(MSS)
注意 MSS 指的是报文中含有的应用层数据的最大长度,而不是 TCP 报文的最大长度,TCP 报文需要在应用层数据的基础上增加 TCP Header。MSS 通常根据最大链路层长度(最大传输单元 MTU)设置,保证 MSS + TCP Header + IP Header
TCP 报文结构
- 源端口号 16 bits
- 目的端口号 16 bits
- 序号 32 bits
- 确认号 32 bits
- 首部长度 4 bits,指示 TCP 首部长度,单位为 32 bits,通常选项字段为空,典型 TCP 首部的长度为 20 Bytes
- 保留未用 4 bits
- CWR 1 bit
- ECE 1 bit
- URG 1 bit
- ACK 1 bit
- PSH 1 bit
- RST 1 bit
- SYN 1 bit
- FIN 1 bit
- 接收窗口 16 bits
- 因特网检验和 16 bits
- 紧急数据指针 16 bits
- 选项
- 数据
假设数据 。数据流中每一个字节编号,填入序号的是数据开头的字节编号。
TCP 是全双工的,同一份报文填入确认号的,是 A 希望从 B 收到的下一字节的编号。
下一字节。
RTT 估计与超时
SampleRTT:某个数据包从发出(交给 IP)到收到 ACK 的时间
指数加权平均移动(EWMA):
|
TCP 可靠数据传输
超时间隔加倍
每次超时之后,将 TimeoutInterval 翻倍,保证重传的频率越来越低,是某种形式的拥塞控制。需要注意的是,如果是因为收到 ACK 或者发送新的数据包而重置定时器,TimeoutInterval 依然是用 EstimatedRTT 和 DevRTT 计算出的值。
快速重传
产生 TCP ACK 的建议(RFC 5681):
事件 | TCP receiver |
---|---|
具有所期望序号的按序报文段到达。所有在期望序号及以前的数据都已经被确认 | 延迟的 ACK。对另一个按序报文段的到达最多等待 500ms。如果下一个按序报文段在这个时间间隔内没有到达,则发送一个 ACK |
流量控制
防止接收方缓存溢出导致丢包
维护接收窗口
- RcvBuffer:缓冲区大小
- LastByteRead:接收方从缓存读出的数据流的最后一个字节的编号
- LastByteRcvd:已经放入缓存的最后一个字节编号
发送方需要维护 和 , 就是已经发送还未确认,可能已经放入缓冲区的数据量,要保证这个值不超过
连接管理
三次握手,四次挥手
三次握手
- 客户端向服务器发送一个特殊报文段。首部标志位 SYN 为 1,选择一个随机的初始序号 client_isn,放在报文段中。(称为 SYN 报文段)
- 服务器提取出 TCP SYN 报文段,为客户端分配缓存和变量,并发送允许连接的报文段。SYN=1, ACK=client_isn+1, 初始序号为 server_isn。(称为 SYNACK 报文段)
- 客户端收到 SYNACK 报文段,客户端分配缓存和变量。客户端向服务器发送另外一个报文段,ACK=server_isn+1,用于确认 SYNACK 报文段。在本报文中,SYN=0,可以携带应用层数据。
四次挥手
- 客户端:FIN
- 服务器:ACK
- 服务器:FIN
- 客户端:ACK
三次握手四次挥手的报文丢失怎么办?
拥塞控制原理
拥塞控制方法
- 端到端拥塞控制:网络层不为运输层拥塞控制提供显式帮助
- 网络辅助的拥塞控制:路由器向发送方提供关于网络中拥塞状态的显示反馈信息
TCP 拥塞控制
维护拥塞窗口 ,对发送速率进行限制:
TCP 拥塞控制算法
- 慢启动 Slow Start
TCP 连接开始时,cwnd=1MSS,每次收到一个报文段的 ACK 则 +1MSS,cwnd 在一个 RTT 内翻倍
当存在超时指示的丢包事件,将 ssthresh 设为 cwnd/2,重新慢启动。
当 cwnd>=ssthresh,进入拥塞避免模式
当存在 3ACK 执行快速重传并进入快速恢复
- 拥塞避免
每个 RTT 将 cwnd 增加 1MSS
超时:设置 ssthresh,重新慢启动
3ACK:设置 ssthresh,快速恢复
- 快速恢复
Tahoe:无快速恢复,一律慢启动
Reno:设置 ssthresh,设置 cwnd=ssthresh+3MSS,线性增长
公平性
TCP 以折线渐进平分带宽
UPD 可能会压制 TCP 流量
网络层:数据平面
网络层概述
网络层可以分为数据平面与控制平面
网络层主要功能:
- 转发(数据平面)
- 路由选择(控制平面)
路由器中关键元素:转发表
路由器工作原理
路由器组件:
- 输入端口
- 交换结构
- 输出端口
- 路由选择处理器(控制平面,计算转发表)
输入端口处理与基于目的地转发
输入端口:线路端接(物理层)、数据链路处理(链路层)、查找转发排队(网络层)
交换
三种交换结构:
- 经内存交换
- 经总线交换
- 经互联网络交换
图见 P207
何处出现排队
在输入和输出端口都可以形成分组队列,缓存耗尽时出现丢包。
- 输入排队
线头阻塞:前面的分组因为输出端口被占用而排队,后面的分组要跟着排队。
- 输出排队
丢包策略:
- 弃尾
- 主动队列管理
分组调度:输出端口选择哪一个分组传输
分组调度
分组调度:输出端口确定传输次序的问题
- 先进先出 FIFO
按照分组到达输出端口的时间推向链路
- 优先权排队
每一个优先权有一个队列,优先从更高优先权的队列里传输分组,同一优先权内使用 FIFO
- 循环和加权公平排队
网络层:控制平面
路由选择算法
距离向量路由选择算法(DV)
DV 是一种迭代的、异步的、分布式的算法
Bellman-Ford 方程: 表示 的最低开销,有
Bellman-Ford 方程的解为 提供转发表项。假设 是上面方程取得最小值的解,那么 就是 转发的下一跳。
用 表示 的距离向量,DV 算法维护信息:
- 对于每个邻居 ,从 到直接相连邻居 的开销为 .
- 节点 的距离向量 ,包含了 到 中所有目的地 的开销估计值
- 它的每个邻居的距离向量,即对 的每个邻居 ,有
- 不定时向邻居发送自己的距离向量, 收到 的距离向量,保存该距离向量,并使用 Bellman-Ford 方程更新自己的距离向量:
链路层和局域网
差错检测和纠正技术
循环冗余检测 CRC
比特数据, 比特校验码
发送方和接收方协商一个生成多项式 G,最高项为 ,共 位。
D | R |
---|---|
bits | bits |
每个 CRC 标准都能检测小于 bits 的突发差错,适当的假设下,长度大于 bits 的差错可以以 的概率被检测到。
任何奇数个差错也可以被检测。
多路访问链路和协议
多路访问协议规范节点在共享的广播信道上的传输行为。
主要有:
- 信道划分协议
- 随机接入协议
- 轮流协议
信道划分协议
-
TDM(时分复用)将时间划分为时间帧,并进一步把每个时间帧划分为 个时隙
-
FDM(频分复用)将信道划分为不同的频段,每个节点分配一个频段
-
CDMA(码分多址):TDM 与 FDM 分别为节点分配时间和频率,CDMA 则为每个节点分配一个不同的编码,每个节点用唯一的编码进行传输。编码类似于时间和频率,可以分配,不同节点可以同时传输
随机接入协议
在随机接入协议中,一个传输节点以最大速率进行发送,发生碰撞,涉及碰撞的节点则重发该分组,直到这个分组无碰撞的通过
时隙 ALOHA
假设:
- 所有帧 bits
- 时间划分为 秒的时隙,即一个时隙可以传输一帧
- 节点只在时隙起点开始传输帧
- 节点关于时隙是同步的
- 如果有碰撞,每个节点在时隙结束前检测到
令 是一个 0 到 1 之间的概率,在每个节点中,时隙 ALOHA:
- 当节点有一个新帧要发送时,等待到下一个时隙开始时发送
- 如果没有碰撞,顺利传输
- 如果碰撞,以概率 在后续的每个时隙中重传,直到传输成功
当有 个节点时,效率为 ,
ALOHA
纯 ALOHA 在不同节点间是不同步的,最大效率为 。
载波侦听多路访问(CSMA)
- 说话之前先听:如果其他节点正在传输,则等待到一段时间没有传输再开始(载波侦听)
- 如果与他人同时开始说话,停止说话:碰撞检测,如果发现另外一个节点在传输干扰帧,停止。再重复侦听-传输之前等待一段随机时间。
具有碰撞检测的载波侦听多路访问(CSMA/CD)
- 从上层协议获得数据,准备帧
- 侦听信道,空闲开始传输
- 传输过程中侦测信道
- 若无冲突,传输成功;若有冲突,停止传输
- 停止传输后,等待随机时间,返回 2.
二进制指数后退算法
一个帧经历 次碰撞后,从 中选择一个 ,,等待 比特时间
CSMA/CD 效率
表示信号能量在任意两个适配器之间传播的最大时间, 表示传输一个最大长度的以太网帧时间。
轮流协议
轮询
指定一个主节点,按顺序通知每一个节点可以发送的帧的数目
令牌传递协议
没有主节点,一个称为令牌的小帧在节点之间按照固定顺序进行交换
持有令牌,发送最大数目帧,传递给下一个
交换局域网
链路层寻址与 ARP
MAC 地址:6 Byte,共有 个不同的 MAC 地址。
IEEE 管理 MAC 地址空间,固定前 位,公司管理后 位。
地址解析协议 ARP
ARP 任务:将 IP 地址与 MAC 地址进行转换
ARP 为同一个子网中的主机和路由器解析 IP 地址
每台主机或路由器在内存中有 ARP 表,包含 IP 到 MAC 映射
如果发送方的 ARP 表里有 IP 对应的 MAC 地址,非常容易获得 MAC 地址。如果没有,需要用 ARP 协议来解析。构造一个 ARP Packet,用 MAC 广播地址 FF-FF-FF-FF-FF-FF 来发送,子网上所有适配器将收到 ARP Packet,如果发现自己匹配,则传回一个响应 ARP Packet。发送方更新自己的 ARP,继续发送 IP。
以太网
集线器:一种物理层设备,只是信号放大
以太网帧结构
- 前同步码:8 Bytes,前 7 个 Bytes 均为 AA,最后一个字节为 AB,前七个字节同步时钟,最后一个字节告警传输
- 目的地址:6 Bytes
- 源地址:6 Bytes
- 类型:2 Bytes
- 数据:46-1500 Bytes
- CRC:4 Bytes
链路层交换机
交换机转发和过滤
过滤是决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能。转发是决定一个帧应该被导向哪个接口
过滤和转发借助于交换机表完成。表项:MAC 地址,通往该 MAC 地址的交换机接口,表项放置在表中的时间
假定从 接口到来一个目的地址为 DD-DD-DD-DD-DD-DD 的帧,交换机查找 DD-DD-DD-DD-DD-DD 表项:
- 如果没有这个表项,向除 以外的所有端口转发。(即没有该表项则广播)
- 有一个表项联系 DD-DD-DD-DD-DD-DD 与 ,丢弃
- 有一个表项联系 DD-DD-DD-DD-DD-DD 与 ,转发到
自学习
交换机表是自动、动态、自治的建立的
- 初始表为空
- 每个入帧,在表中存储源地址中的 MAC 地址,入接口和时间
- 在一段时间(老化期)之后,没有收到该源地址的帧,删除表项
链路层交换机的性质
- 消除碰撞
- 异质链路
- 管理
交换机和路由器比较
交换机是第二层的分组交换机(物理层-链路层),路由器是第三层的分组交换机(物理层-链路层-网络层)
虚拟局域网 VLAN
支持 VLAN 的交换机允许经一个单一的物理局域网的基础设施定义多个虚拟局域网,在一个 VLAN 内的主机可以互相通信,把端口指定给某个 VLAN
跨越 VLAN 的流量:指定一个端口,配置给多个 VLAN,连接到路由器
连接多台 VLAN 交换机:通过干线链路连接,每台 VLAN 交换机的一个特殊端口被配置为干线端口,该端口属于所有 VLAN,发送到任何 VLAN 的帧通过干线链路转发出去
拓展以太网帧:802.1Q 用于跨越 VLAN 的帧,以标识它应该属于哪一个 VLAN
回顾:Web 页面请求的历程
便携机与以太网交换机相连,请求 www.google.com
准备:DHCP、UPD、IP 和以太网
- 操作系统生成 DHCP 报文,报文放入 UDP 报文段(源:Port 68,目的:Port 67),UDP 报文段放入具有 广播地址的 IP 数据报
- 该 IP 数据报被放在以太网帧中,目的 MAC 地址为广播地址 FF-FF-FF-FF-FF-FF,源 MAC 为便携机 MAC
- DHCP 帧到达以太网交换机,被广播
无线网络和移动网络
概述
无线网络要素:
- 无线主机
- 无线链路
- 基站
可以按照有无网络基础设施,经过几个无线跳进行分类:
- 单跳,基于基础设施
- 单跳,无基础设施
- 多跳,基于基础设施
- 多跳,无基础设施
无线链路和网络特征
有线链路和无线链路区别:
- 递减的信号强度
- 来自其他源的干扰
- 多径传播
一些度量标准:
- 信噪比(SNR)是所收到的信号和噪声强度的相对测量,单位是分贝
- 比特差错率(BER)是接收方收到有错传输比特的概率
对于给定的调制方案,SNR 越高,BER 越低
对于给定的 SNR,具有较高比特传输率的调制技术具有较高的 BER
隐藏终端问题:
- 在传输, 也在传输,传输在 处发生了干扰。但是由于环境的物理阻挡, 不能侦听到彼此正在发送数据
- 由于信号的衰减, 互相到达时信号强度已经不足以检测对方的传输,但在 处依然可以造成干扰
码分多址 CDMA
在 CDMA 中,每个要发送的比特都要通过乘以一个信号(编码)的比特来进行编码,这个信号的变化速率(码片速率)比初始数据别特序列的变化速率快多。
关注第 个数据比特 ,对于 比特传输时间的第 个微时隙,CDMA的输出 ,其中 是 CDMA 编码的第 比特。
接收方通过 来还原
CDMA 假设干扰信号是加性的,多个发送方正在发送,那么接收方收到的信号是 ,但同样可以通过 来还原
WiFi:802.11 无线 LAN
IEEE 802.11 无线 LAN,又称 WiFi,是无线 LAN 的主要标准
802.11 体系结构
802.11 体系结构的基本构建模块是基本服务机(BSS),一个 BSS 包含一个或多个无线站点和一个接入点(AP)的中央基站
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)