计网笔记(updating~)

2025年9月14日 · 25065 字 · 51 分钟

主要参考文末,以及偶尔听一节的我

网络概述

因特网概述

具体构成角度
  • 节点:
    • 主机及其应用程序
    • 路由器、交换机等网络设备
  • 边(通信链路 communication link) – 接入网:
    • 媒介:同轴电缆、铜线、光纤、无线电频谱
    • 传输速率:宽带bps
    • 接入网链路:主机连接到互联网的链路
    • 主干链路:路由器之间的链路
  • 接入网络的设备–网络边缘
    • 主机(host)= 端系统(end system)
    • 运行的联网app
  • 分组交换机 – 网络核心
    • 路由器(router)和链路层交换机(link-layer switch)
  • 协议:规范和控制消息的发送和接受
    • 如 TCP、 IP、 HTTP、 FTP
    • 对等层实体沟通的标准,包括报文格式、次序及传输动作
  • 网络标准
    • 因特网工程任务组(IETF):制定网络标准的组织
    • 请求评论(RFC):IETF的标准文档 image.png
服务角度
  • 分布式应用:如Web、VoIP、Email、电子商务、社交网络、分布式游戏
  • 通信基础设施:
    • 提供应用程序接口(API)
    • 连接发送和接收数据的应用程序
    • 提供服务类型:无连接不可靠服务(Connectionless Unreliable Service)或面向连接的可靠服务(Connection-Oriented Reliable Service)

网络边缘(Network Edge)

网络边缘包括主机及其运行的应用程序

与因特网相接的计算机及其他设备位于因特网的边缘,称为端系统

端系统 = 主机,可以被划分为下面两种:

  • 客户(client)
  • 服务器(server):比如有企业存储大量数据的大型数据中心(data centers)

通信模式

  • C/S模式(Client/Server Model):客户端请求服务,服务器响应
    • 如Web浏览器和服务器、Email客户端和服务器
  • P2P模式(Peer-toPeer Model):每个主机同时是客户端和服务器
    • 如Gnutella、KaZaA、Emule

传输协议

  • 传输控制协议(Transmission Control Protocol, TCP):
    • 可靠、保序(不重复,不失序,不丢失,不出错,不乱序)的数据传输
    • 流量控制和拥塞控制
    • HTTP、FTP、Telnet、SMTP
    • 流媒体、远程会议、DNS、Internet 电话
  • 用户数据报协议(User Datagram Protocol, UDP):
    • 无连接、不可靠、不保序的数据传输
    • 无流量控制和拥塞控制

接入网(Access Networks)

网络边缘的端系统通过接入网(物理链路)连接到边缘路由器(端系统到任何其他远程端系统路径上的第一台路由器

家庭接入:DSL、电缆、FTTH、拨号和卫星

  • 数字用户线(digital subscriver line, DSL)

利用电话线路接入网络。ADSL是非对称的数字用户线,基本都用ADSL,因为一般下行的数据量远大于上行的数据量,所以要设计成非平衡的链路。

采用独占的频分多路复用来传输。因为利用的是原有的电话线路,所以需要将DSL传输的网络信号(上行、下行)和电话信号通过频分多路复用来区分开来。

频段 传输信号
0-4K 电话语音线路
4K-50K 上行信号
50K-1M 下行信号

image-1.png

  • 电缆因特接入(cable internet access)

    利用有线电视网接入网络。结构上,通过粗的同轴电缆接入社区,再利用细的同轴电缆接入每家每户。

    采用共享频分多路复用来传输

image-2.png

  • 混合光纤同轴电缆(HFC)

    同轴电缆光纤节点相连再接入边缘路由器。

    不对称的竞争式协议,最高可达到30Mbps的下行速率和2Mbps的上行速率。由于采用竞争式协议,在用户少时使用体验优于普通电缆因特网接入,但是在用户多时容易造成卡顿

image-3.png

企业(家庭)接入:以太网和WiFi

  • 以太网:使用双绞铜线与一台以太网交换机相连,速率可达到100Mbps、1Gbps、10Gbps
  • WiFi:IEEE802.11技术无线LAN,范围在几十米内

广义无线接入:4G和5G

后面会讲

物理媒体(Physical Media)

  • 导引型媒体(guided media):信号在固体媒体中传输,比如光缆、双绞铜线和同轴电缆
  • 非引导型媒体(unguided media):电波在空气中传播,比如无线局域网或数字卫星频道

网络核心(Network Core)

网络核心:由端系统的分组交换机和链路构成的网状网络。下图标亮部分即是网络核心。 一共有三种交换方式:报文交换、分组交换和电路交换 image-4.png

电路交换(Circuit Switching)

端到端连接(end-to-end connection):在发送数据之前,必须先在发送和接收两端建立端到端连接,并预留一部分带宽。而分组交换不预留,所以会造成排队和丢包

  • 信令系统为每个呼叫预留专有电路
  • 独享资源,适合电话网
  • 不适合计算机通信,因连接建立时间长、资源浪费
  • 网络资源被分成片,有频分(Frequency Division)、时分(Time Division)、波分(Wavelength Division),为呼叫分配片,如果某呼叫没有数据,则其资源片处于空闲状态 image-5.png
频分多路复用(FDM)

链路中的每条连接专用一个频段

image-6.png

时分多路复用(TDM)

远距离传输会有衰减,所以考虑用数字信号进行传输。在时域上对信号进行采样,接收时再将采样信号恢复。

TDM在时域上被划分为固定的帧(frame),每帧又被划分为固定数量的时隙(slot),链路中的每条连接专用一个时隙。

image-7.png

image-8.png

分组交换(Packet Switching)

端系统之间彼此传输报文,分组交换将长报文划分为分组,分组再通过通信链路和分组交换机(分为路由器和链路层交换机)传送。

  • 将要传输的数据分成一个个单位(分组),以分组为单位进行存储、转发
  • 将分组从一个路由器传到相邻路由器(Hop)一段段最终从源端传到目标端
  • 在转发之前,节点必须收到整个分组
  • 排队延迟和丢失:如果分组到达速率高于链路传输速率,分组会排队等待传输;如果路由器缓存用完了,分组会被抛弃
存储转发传输(Store-and-Forward Transmission)

分组交换和报文交换都采用了存储转发的传输形式。但分组交换的存储转发以分组为单位,即交换机接收了整个分组后才能输出该分组的数据;而报文交换的存储转发单位为报文,需要交换机接收到整个报文后才能输出

image-9.png

传输相同大小的数据包,分组交换比报文交换更快。下面是分组交换传输3L大小的报文的时间流,报文分为3个大小为L的分组,根据分组交换原理,一共耗费了4L/R时间完成传输( 即存储转发时延)。如果使用报文传输同样的3L大小的报文则需要耗费6L/R时间

image-10.png

排队时延(Queuing Delay)和分组丢失(Packet Loss)

分组交换机有一个输出缓存(output buffer),分组可能会在分组交换机上排队等待输出,造成排队时延

分组交换机的缓存空间是有限的,所以在过于拥堵时会产生分组丢失(丢包)

image-11.png

image-12.png

转发表(Forwarding Table)和路由选择协议(Routing Protocol)
  • 路由(Routing):分组中包括IP地址,用路由算法决定分组采用的从源到目标的路径 image-13.png
  • 转发(Forwarding):将分组从路由器的输入链路转移到输出链路
数据报(Datagram)的工作原理
  • 通信之前无须建立起连接,有数据就传输
  • 每一个分组都独立路由(由于路径不一样,可能会失序)
  • 路由器根据分组的目标地址进行路由
虚电路(Virtual Circuit)的工作原理
  • 在数据传输前,发送方和接收方之间通过信令协议建立一条逻辑连接
  • 网络节点根据路由算法选择路径,并预留资源(如带宽、缓冲区)。建立完成后,网络会分配一个虚电路标识符(Virtual Circuit Identifier, VCI),用于标识该连接

分组交换&&电路交换

分组交换的性能优于电路交换,适用于随机数据,可以满足更多用户

电路交换需要预留带宽,相当于固定了链路用户的数量

而分组交换不需要预留带宽,用户使用网络是有一定概率的,在一个时刻多人使用的概率其实相对较低,所以一条链路可以给更多的用户使用

电路交换适用于特殊情况,比如要保障传输数据能力

接入网

怎样将端系统和边缘路由器连接?

住宅接入网络

  • 调制(Modem):将上网数据调制加载到音频信号上,在电话线上传输,端系统将数据解调出来;拨号调制解调器以56kbps的速率直接接入路由器,不能同时上网和打电话
    • 调幅(Amplitude Modulation)
    • 调频(Frequency Modulatioin)
    • 调相位(Phase Modulation)
    • 综合调制(Hybrid Modulation)
  • 数字用户线路(DSL, Digital Subscriber Line):一种通过普通电话线提供高速互联网接入的技术
    • 它利用电话线中的高频段传输数据,不影响低频段的语音通话,因此可以同时上网和打电话
    • DSL线路上的数据被传到互联网(4kHz 以上),语音被传到电话网(4kHz 以下)
    • 分给数据的线路分为上行和下行 image-18.png
  • 线缆网络(Cable Network):
    • 有线电视信号线缆双向改造:在不同频段传输不同信道的数据,数字电视和上网数据(上下行)
    • 光纤和同轴电缆:线缆和光纤将家庭用户接入到ISP路由器,各用户贡献到线缆头端的接入网络 image-19.png

单位接入网络

  • 端系统直接接到以太网交换机上 image-32.png

无线网络

  • WLAN(Wireless Local Area Network):建筑物内部
  • 广域无线接入(Wide-Area Wireless Acess):由电信运营商提供

物理媒体

导引性(Guided Media)

  • 同轴电缆(Coaxial Cable):两根同轴地铜导线、双向
    • 基带电缆(Baseband Cable):电缆上有单个信道
    • 宽带电缆(Broadband Cable):电缆上有多个信道
  • 光纤和光缆(Fiber Optics):光脉冲,一个脉冲代表1bit,高速、低误码率、安全

非引导性媒体(Unguided Media)

  • 无线电(Radio):开放空间传输电磁波无需物理线缆
    • 传播环境效应:反射、吸收、干扰
    • 类型:地面微波、WLAN(wifi)、wide-area(蜂窝)、卫星

因特网结构和ISP

ISP(Internet Service Provider)

ISP是向用户提供互联网接入和服务的公司或组织,ISP分为许多层级,比如第一层ISP(tier-1 ISP)、区域ISP(regional ISP)、接入ISP(access ISP)。端系统通过接入ISP与因特网相连,全球的ISP通过各个层级相连,形成了互联网的互联

  • 主要服务包括:
    • 互联网接入:通过宽带、光纤、DSL、无线等方式连接互联网
    • 电子邮件和网页托管:提供电子邮箱和网站托管服务
    • 虚拟专用网(VPN):提供安全的远程访问服务
    • 云服务:提供数据存储、备份等云服务
    • 技术支持:提供网络设置、故障排除等帮助
  • 类型:
    • 拨号ISP:通过电话线接入,速度较慢
    • 宽带ISP:提供高速连接,如DSL、光纤
    • 无线ISP:通过无线技术提供接入
    • 卫星ISP:通过卫星为偏远地区提供连接

端系统通过接入ISP链接到互联网,接入ISP是互相连接的;每个ISP都连接到全局ISP(Global ISP),接入ISP和全局ISP往往有经济合约

  • 对等连接(Peering Connection):对等连接是指两个或多个ISP之间直接互联,以交换流量,而不通过第三方网络
  • IXP(Internet Exchange Point):互联网交换点,是不同网络服务提供商(ISP)和内容分发网络(CDN)之间交换流量的物理基础设施 image-33.png

ICP(Internet Content Provider)

ICP是指在互联网上提供各类消息、服务或应用的公司或组织。它们通过网站、应用程序等平台向用户提供内容

  • 主要类型
    • 新闻门户
    • 视频平台
    • 社交网络
    • 电子商务
    • 搜索引擎

ICP为了减少运营支出、给用户提供更好地服务,会在全球各地部署数据中心机房,用专线连接在一起,数据中心机房往往靠近核心ISP的路由设备 image-34.png

网络结构

网络结构是网中之网,具有层次结构

image-14.png

分组延时、丢失和吞吐量

分组延时(Packet Delay)

在路由缓冲区有分组队列,分组等待排到队头被传输

  • 四种延时
    • 节点处理延时$D_{proc}$:检查bit级差错,检查分组头部并决定将分组导向何处,耗时很短,毫秒级
    • 排队延时$D_{queue}$:在输出链路上等待传输的时间,依赖于路由器的拥塞程度
    • 传输延时:$D_{trans}$ = L/R,R是链路带宽(bps),L是分组长度(bits)将分组的比特流传输到链路的时间(比如进行编码转换成查分曼切斯特编码的时间)
    • 传播延时:$D_{prop}$ = d/s,d是物理链路长度,s是信号在媒介中的传播速度,信号在媒体上传播的时间
  • 流量强度:I = La/R 流量强度不能超过1,L是分组长度(bits),a是平均分组到达速率(packets/sec),R是链路带宽/传输速率(bps), 代表了路由器上排队的拥堵率

分组丢失(Packet Loss 丢包)

由于链路的队列缓冲区容量有限,当分组到达一个满的队列时,该份组会丢失。丢失的分组可能会被前一个节点或端系统重传,或根本不重传

  • 流量强度接近0时,几乎没有分组到达,排队延时很小;
  • 流量强度0~1,平均排队长度越来越长,排队延时越来越长;
  • 流量强度接近1时,存在到达率超过传输时间间隔,拥堵 image-36.png

吞吐量(Throughput)

在源端和目标端之间的传输速率(数据量/单位时间)

  • 瞬间吞吐量(Instantaneous Throughput):某一时刻的传输速率,反应当前网络的瞬时性能,从主机A到主机B传文件,B接收文件的速率
  • 平均吞吐量(Average Throughput):在一段时间内的平均传输速率,反映网络的整体性能
  • 瓶颈链路(Bottleneck Link):端到端的路径上,限制端到端吞吐的链路 image-35.png

协议(Protocol)

协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送和/或接受一条报文或其他时间所采取的动作。

协议三大要素:

  • 语法(Syntax):每一段内容符合一定规则的格式,比如一个报文前8位是原地址,后8位是目的地址(just example)之类
  • 语义(Semantics):每一段内容需要代表某种意义,比如原地址部分的二进制到底是指哪个地址。
  • 同步(Timing):通信的过程,即每一段任务的执行顺序

image-15.png

协议层次(Protocol Layer)及其服务模型

层次化方式实现复杂网络功能

  • 将网络复杂的功能分成功能明确的分层次,每一层实现其中一组功能,功能中有其上层可以使用的功能:服务
  • 本层协议实体相互交互执行本层的协议动作,目的是实现本层功能,通过接口为上层提供更好的服务
  • 在实现本层协议的时候,直接利用了下层所提供的服务

服务(Service)

下层实体向上层实体提供的它们之间通信的能力

原语(Primitive)

上层使用下层服务的形式,上层使用下层提供的服务以及下层向上层提供服务都是通过服务访问源于来进行交互的

服务访问点(Service Access Point, SAP)

上层使用下层提供的服务通过的曾简介口,用于下层服务区分不同的上层用户

  • 传输层的SAP:端口(Port)
  • 邮箱的SAP:地址(Address)

服务类型

  • 面向连接的服务(Connection-Oriented Service):建立连接、通信、拆除连接,网络层的连接成为虚电路,适合传输大的数据块
  • 无连接的服务(Connectionless Service):两个对等层实体在通信前不需要建立连接,

数据单元(Data Unit)

  • 服务数据单元(Service Data Unit, SDU):某一层从上层接收到的数据单元,是该层需要处理或传输的有效载荷(Payload)
  • 协议数据单元(Protocol Data Unit, PDU):头部 + 服务数据单元

五层因特网协议栈

因特网协议栈由5个层次组成:物理层、链路层、网络层、传输层和应用层,因特网协议栈是一个理想模型

下层为上层提供服务,越下面的层,越靠近硬件;越上面的层,越靠近用户 image-16.png

层次 功能 PDU名称
应用层(Application Layer) 支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层进行通信,为应用进程提供网络应用服务,如FTP、SMTP、HTTP、DNS 消息(Message)
传输层(Transport Layer) 负责为信源和信宿提供应用程序进程间的数据传输服务,这一层上主要定义了两个传输协议,传输控制协议即TCP和用户数据报协议UDP 段(Segment, TCP)或数据报(Datagram, UDP)
网络层(Network Layer) 为数据报从源主机到目标主机选择路由,负责将数据报独立地从信源发送到信宿,主要解决路由选择、拥塞控制和网络互联等问题传输以分组为单位的端到端的数据,如 IP、路由协议 分组(Packet,有连接)或数据报(Datagram,无连接)
链路层(Link Layer) 负责将IP数据报封装成合适在物理网络上传输的帧格式并传输,或将从物理网络接收到的解封,取出IP数据报交给网络层,传输相邻两个网络节点之间传输以帧为单位的数据,如点对点协议、802.11(WiFi)、Ethernet 帧(Frame)
物理层(Physical Layer) 负责将比特流在结点间传输,即负责物理传输。该层的协议既与链路有关也与传输介质有关 比特流(Bit Stream)

OSI模型

OSI模型由国际标准化组织(ISO)制定,实际并没有应用,只有理论。

OSI模型由7层组成:应用层、表示层(Presentation Layer 允许解释传输的数据,加密、压缩、及其相关的表示转换)、会话层(Session Layer 数据交换的同步、检查点、恢复)、传输层、网络层、数据链路层、物理层

封装(Encapsulation)

在发送端,

  • 应用层:将应用层报文(application-layer message)M传送给传输层
  • 传输层:接收报文M,附上传输层首部信息Ht(包括差错检测位信息等),构成传输层报文段(transport-layer segment),将其传递给网络层
  • 网络层:接受传输层报文段,附上网络层首部信息Hn(包括源和目的地址等),构成网络层数据段(network-layer datagram),将其传递给网络层
  • 链路层:接收网络层数据段,附上链路层首部信息HI,构成链路层帧(link-layer frame),将其传递给物理层;
  • 物理层:负责比特流物理传输 在接收端以反方向重构报文段

image-17.png

应用层(Application Layer)

网络应用原理

  • 可以在不同类型主机运行
  • 可以在不同终端间相互通讯
  • 在编写网络应用的过程中,不需要考虑网络核心设备,网络核心不会允许应用
  • 端系统上的应用开发发以快速,而且一与传播

网络应用结构

客户机-服务器体系结构(Client-server architecture)

HTTP、IMAP、FTP

服务器:

  • 永远在线
  • IP地址恒定
  • 服务器往往在数据中心,通过多台服务器进行拓展

客户机:

  • 可以和服务器进行通信
  • 可能间断性连接网络
  • 可能是动态的IP地址
  • 客户机之间不会直接通信

点对点体系结构(Peer-peer architecture)(P2P的文件分享)

  • 没有一个一直在线的服务器
  • 任意端系统之间直接进行通信
  • 每个点(peer)向其他的点请求服务,同时作为回报也会提供相应的服务

优点:自拓展性(self-scalability):新的点都会提供服务容量和负荷

缺点:每个点都是间断性连接,而且IP地址会改变

进程通信(Processes Communicating)

客户机和服务器进程

进程(Process):一台主机上运行的程序

  • 在同一台主机上,两个进程通过进程间通信(inter-process communication)进行通信。进程间通信由操作系统定义
  • 不同主机之间,进程通信通过报文交换

比如并行计算中的MP和MPI,MP(Multi Process)只能用于统一太主机间的通信,MPI(Message Processing Interface)主要用于不同主机间的通信,也适用于同一台主机

客户机进程(client process):发起通信的进程

服务器进程(server process):等待连接的进程

P2P应用也存在客户机进程和服务器进程

套接字(Sockets)

进程之间通过socket来接收/发送消息

socket在进程通信中的作用相当于一个信封:

  • 通信的信息需要装进socket
  • 应用层下的各层作为基础设施,将信传到另一个进程
  • 两个进程间的通讯会有两个socket image-37.png
进程寻址(Addressing Processes)

如果两个主机之间的进程进行通信,发送端不仅要知接接收端的IP地址还需要知道进程相应的端口号

  • IP地址:IPv4中32位IP,负责找到接收端主机 -端端口号(port number):每台主机都可能运行着多个进程,每个进程对应一个端口号,比如HTTP服务端口号80、邮件服务端口号25

应用层协议(Application-Layer Protocols)

网络应用的开发必须遵守网络协议

应用层协议的分类

公开网络协议

  • 定义在RFC中
  • 统一标准,易于相互操作
  • 例如:HTTP、SMTP

专用网络协议

  • 一些非公开的网络协议
  • 例如:Skype
应用层协议内容

应用层协议定义了

  • 消息交换的类型:比如请求、响应
  • 消息的语法:消息中有那些字段以及这些字段如何定义
  • 消息的语义:消息字段内容的含义
  • 规则:进程什么时候、如何发送/接受消息
app对传输服务的需求
  • 数据完整性(data integrity)
    • 一些app需要100%可靠的文件传输,如文件传输;有一些运行一部分的丢失,比如语音
  • 时效性(timing)
    • 一些app要求较少的延时,比如对话直播
  • 吞吐率(throughput)
    • 吞吐率,即最小带宽,一些app存在一个吞吐率下限才能正常使用,比如视频音频等多媒体;有些app运行弹性的吞吐率,比如有间传输,吞吐率小可以慢慢穿过去

image-38.png

网络传输协议服务

传输层提供为应用层提供的两种传输服务

TCP

传输控制协议(TCP)

  • 面向连接(connection-oriented):需要客户端和服务器之间能够建立连接
  • 可靠传输(reliable transport):数据完整性高
  • 流量控制(flow control):发送方不能发送太多数据导致接收方过载
  • 阻塞控制(congestion control):不能有太多个主机同时发送导致网络过载
  • 不提供的服务:时效性、最小带宽(吞吐率)、安全性
UDP

UDP是一种不提供不必要服务的轻量传输协议,优点是速度快、灵活性好

  • 不需要建立连接
  • 不可靠的数据传输
  • 不提供的服务:基本都不提供,不提供包括可靠传输、流量控制、阻塞控制、时效性、最小带宽(吞吐率)、安全性
不同app网络传输协议

image-39.png

Web和HTTP

World Wide Web中的网页由超链接(hyperlink)连接

  • 页面由很多对象(object)组成,对象存储在服务器中
  • 对象有多种类型,可以是HTML文件,JPEG图片,Jav啊小程序,MP3文件等
  • 网页以HTML文件为基础,包括了许多参考对象,每个对象都可以通过URL来寻址

URL格式:

协议名称://用户:口令@主机名/名径名:端口

HTTP概述

超文本传输协议(hypertext transfer protocol, HTTP)

  • 王爷的应用曾协议
  • 基于客户机-服务器体系结构
    • 客户机:负责请求、接收和显示Web对象
    • 服务器:Web服务器负责发送对象,响应客户机请求
  • HTTP的传输层使用TCP
    1. 客户端发起一个与服务器的TCP连接(建立套接字),服务器接受连接
    2. 浏览器与Web服务器交换HTTP报文(应用层报文)
    3. TCP关闭连接
  • HTTP是无状态的
    • 服务器不维护关于客户的任何信息
    • 协议要维持状态是很复杂的:保留之前的历史记录 很消耗资源;如果客户机或者服务器有死机,它们的状态会不一致,需要重新同步,这很麻烦
  • HTTP消息类型:请求(request)与响应(response)

HTTP连接类型

非持久性连接(Non-persistent HTTP)
  • 非持久性HTTP步骤

    1. TCP连接开启
    2. 通过这个TCP连接最多传输一个对象
    3. TCP连接关闭

需要加载多个对象时,需要多次非持久性HTTP连接 image-40.png

  • 方法:GET、POST、HEAD
  • 缺点:
    • 每个对象需要两个RTT(Round-Trip Time 一个很小的数据包(处理文件的时间可以忽略)从传到递户机服务器再传回来的时间):一个用于建立连接,一个用于传输数据
    • 操作系统必须为每个TCP连接分配资源
持久性连接(Persistent HTTP)
  • 持久性HTTP步骤

    1. 开启TCP连接
    2. 通过这一个TCP连接可以传多个对象
    3. TCP连接关闭
  • 持久性HTTP特点(HTTP1.1)

    • 服务器在发送响应后保持连接开启状态
    • 后续这个客户机/服务器的HTTP消息都通过该开启的连接发送
    • 两种发送对象方式:HTTP1.1采用流水的方式发送:一次性把对象拳法了;另一种是非流水线模式:客户机接收到一个对象后在发送下一个对象的请求
    • 至少需要一个RTT发完所有对象
HTTP请求报文格式

HTTP请求报文由请求行、请求头和请求体组成

image-41.png

HTTP响应报文格式
  • 状态行:包含协议版本、状态码和状态信息(如 200 OK、 404Not Found)等
  • 首都行:包含Content-length,因为TCP不维护报文边界

image-42.png

  • 数据:响应的实际内容
常见状态码
  • 200 OK:请求成功
  • 301 Moved Request:资源永久重定向
  • 400 Bad Request: 请求无效
  • 404 Not Found:资源未找到
  • 505 HTTP Version Not Supported:HTTP版本不支持

Cookie 是一小段数据(通常最大为 4KB),由网站服务器生成,并通过用户的浏览器存储在用户本地计算机上。它的主要目的是让网站能够“记住”用户的状态信息。

因为 HTTP 协议本身是 “无状态” 的。这意味着服务器在处理完一个请求后,不会记住你是谁。当你刷新页面或跳转到同一网站的另一个页面时,对服务器来说,你就是一个全新的、陌生的访客。

这带来了一个问题:如何实现购物车、用户登录、个性化设置等功能?Cookie 就是为了解决这个问题而诞生的。

首次请求(无Cookie): 用户第一次访问 example.com。

服务器响应(设置Cookie): 服务器在处理请求后,会在HTTP响应头中添加一个 Set-Cookie 字段,例如 Set-Cookie: session_id=abc123; Path=/。

浏览器存储: 用户的浏览器收到这个指令后,就会将 session_id=abc123 这个键值对保存起来。通常会关联到 example.com 这个域名。

后续请求(携带Cookie): 之后,每当用户再次访问 example.com 下的任何页面,浏览器都会自动在HTTP请求头中加上一个 Cookie 字段,例如 Cookie: session_id=abc123。

服务器识别: 服务器收到这个带有 Cookie 的请求,就能通过 session_id=abc123 识别出用户是谁,从而提供对应的服务(如显示登录名、保持购物车内容等)。

cookie类型

会话Cookie: 临时Cookie,存储在内存中,浏览器关闭后即被删除。

持久Cookie: 拥有一个特定的过期时间,会保存在硬盘上,直到过期。

第一方Cookie: 由当前正在访问的网站域名设置的 Cookie。

第三方Cookie: 由当前网页上嵌入的第三方内容(如广告、分析脚本)设置的 Cookie,常被用于跨站跟踪。现代浏览器(如Safari和Chrome)正在逐步淘汰第三方Cookie。

web cache

减少延迟: 从缓存(离用户更近)加载资源比从遥远的原始服务器加载要快得多,从而加快页面加载速度,提升用户体验。

减少带宽消耗: 重复的资源不需要在网络上反复传输,为用户和网站运营者节省流量和成本。

降低服务器负载: 缓存服务器处理了大量请求,原始服务器的压力会大大减小。

应对网络故障: 即使在原始服务器暂时不可用的情况下,缓存的内容仍然可以被访问。

服务器通过 HTTP 响应头来控制缓存行为:

Cache-Control: max-age=3600:指示资源可以被缓存 3600 秒(1小时)。

Expires: Wed, 21 Oct 2025 07:28:00 GMT:指定一个确切的过期时间。

ETag: "xyz789":资源的版本标识符。浏览器下次请求时会带上 If-None-Match: "xyz789",如果资源没变,服务器会返回 304 Not Modified,告诉浏览器使用缓存。

条件GET

在确保客户端获取的内容是最新的前提下,最大限度地减少不必要的数据传输,从而节省带宽和提高性能

  • 基于时间 (Last-Modified 和 If-Modified-Since)

    • 首次请求(缓存为空):

      • 浏览器向服务器请求一个文件,比如 logo.png。

      • 服务器在返回文件(状态码 200 OK)的同时,在响应头中加上:Last-Modified: Wed, 01 Oct 2023 10:00:00 GMT(这个文件的最后修改时间)。

    • 后续请求(条件GET):

      • 当浏览器再次需要这个文件时,发现本地有缓存,并且知道这个缓存的最后修改时间。

      • 浏览器在发送GET请求时,会附加一个请求头:If-Modified-Since: Wed, 01 Oct 2023 10:00:00 GMT。

    • 服务器端判断:

      • 资源未修改: 服务器会比较请求中的 If-Modified-Since 时间和资源的当前最后修改时间。如果资源在此时间后没有被修改,服务器会返回一个极简的响应:304 Not Modified,并且不携带文件内容。

      • 资源已修改: 如果资源在 If-Modified-Since 时间之后被修改了,服务器会视同一个全新的请求,返回 200 OK 和完整的文件内容。

  • 基于内容标识 (ETag 和 If-None-Match) 基于时间的检查有时不够精确,ETag 提供了更可靠的机制。

    • 首次请求(缓存为空):

      • 浏览器请求 logo.png。

      • 服务器返回文件(200 OK),并在响应头中加上:ETag: “abc123”。这个 ETag 值是由服务器生成的、代表资源唯一版本的标识符(通常是根据文件内容计算出的哈希值)。

    • 后续请求(条件GET):

      • 浏览器再次请求该文件时,会在请求头中附加:If-None-Match: “abc123”。
    • 服务器端判断:

      • 如果资源未修改: 服务器会计算当前资源的 ETag,并与请求头中的 If-None-Match 值比较。如果两者匹配,说明内容没变,返回 304 Not Modified。

      • 如果资源已修改: 当前资源的 ETag 变成了 “xyz789”,与 “abc123” 不匹配,则服务器返回 200 OK 和完整的新文件。

ETag 的优先级通常高于 Last-Modified。 当两者同时存在时,浏览器会优先使用 If-None-Match 和 ETag 进行验证。

文件传输协议(FTP)

文件传输协议(FTP):用于向远程主机传输文件或从远程主机接受文件

  • C/S模式:
    • 客户端:发起传输的一方
    • 服务器:远程主机
  • 默认端口:21(控制连接)和20(数据连接)
FTP控制连接和数据连接
  • 控制连接:用于身份验证和命令传输
  • 数据连接:用于文件传输
  • 特点:
    • 控制连接和数据连接分开
    • 服务器在受到文件传输命令时,主动建立数据连接
    • 传输完成后后,服务器关闭连接
    • 带内:数据连接,传输数据
    • 带外:控制连接,传输指令
    • FTP是有状态的协议,服务器维护客户端状态

电子邮件(Email)

三个主要组成部分

  1. 用户代理(User Agent):
    • 又名“邮件阅读器”,用于撰写、编辑和阅读邮件
  2. 邮件服务器(Mail Server):
    • 管理和维护发送给用户的邮件
    • 输出报文队列保持带发送邮件报文
    • 通过SMTP协议发送邮件报文
  3. 邮件传输协议
简单邮件传输协议(SMTP)
  • 使用TCP协议在客户端和服务器之间传输报文,端口为25
  • 传输分别为握手、传输报文、关闭连接三个阶段
  • 命令是ASCII码文本,响应是状态码和状态信息

image-44.png

多媒体邮件扩展(MIME)

MIME(Multimedia Mail Extension)用于支持多媒体邮件

  • 在报文首部用额外的行声明MIME内容类型 image-45.png
邮件访问协议
  • POP(Post Office Protocol):
    • 用户确认身份并下载邮件
    • 会话中是无状态的
    • 本地管理文件夹
  • IMAP(Internet Mail Access Protocol):
    • 在服务器上处理存储的报文
    • 支持目录组织报文
    • 会话中保留用户状态
  • HTTP:使用HTTP协议访问邮件,如Hotmail、Yahoo Mail

DNS

域名系统(Domain Name System,DNS)通过分布式的数据库来实现IP地址和域名的映射

  • 层级结构的域名服务器提供分布式的数据库
  • 应用层协议:主机和域名服务器通过通信来实现IP地址和域名的转换
DNS服务
  • 域名到IP地址的转换
  • 主机别名到规范名字的转换
  • 邮件服务器别名到邮件服务器正规名字的转换
  • 负载均衡:有些Web可能有多个服务器,即会有多个IP地址对应一个域名,可调整IP地址的顺序以分配负荷

DNS结构

DNS采用三层结构 image-46.png 一个客户机得到www.amazon.com的IP地址的步骤:

  1. 用户端先查询根域名服务器,得到顶级域名服务器.com DNS server的地址
  2. 客户机查询顶级域名服务器.com DNS server,得到权威域名服务器amazon.com DNS server的地址
  3. 客户机查询权威域名服务器amazon.com DNS server,得到www.amazon.com的IP地址
根域名服务器(Root Name Server)
  • 官方的服务器,是连接的最后的方法(如果知道下级域名服务器的地址就不需要再从头开始查询根域名服务器,不然会对根域名服务器产生很大的流量负载)
  • 对网络运行相当重要,离开根域名服务器网络无法正常工作
  • 域名系统安全扩展(Domain Name System Extensions, DNSSEC)–对DNS提供给DNS客户端(解析器)的DNS数据来源进行认证,并验证不存在性和校验数据完整性验证
  • ICANN(互联网名称与数字地址分配机构,Internet Corporation for Assigned Names and Numbers)–管理根域名服务器的组织
顶层域名服务器(Top-Level Domain Server, TLD)
  • 各种类型的TLD,比如com、org、net、edu等,国家的TLD,比如cn、uk
  • Network Solutions:管理com、net TLD的组织
  • Educause:管理edu的组织
权威域名服务器(Authoritative Domain Server)
  • 组织自己的DNS服务器,用来提供组织内部的域名到IP地址的映射
  • 由组织自己或者服务提供商来维护
本地域名服务器(Local DNS Name Server)
  • 严格来说不属于层级结构
  • 每个ISP都会有一个本地域名服务器,也叫做默认域名服务器(default name server)
  • 当主机要进行DNS查询时,查询会被直接送到本地的DNS服务器。
  • 作用:
    • 缓存:可以缓存最近收到的域名到IP地址的映射(缓存有时效,会过期)
    • 代理:可以作为代理,代替主机在层级结构中进行查询
域名的管理
  • 一个域名、管理其下的子域,如cn被划分为edu.cn、com.cn
  • 创建一个新的域必须征得它所属域的同意
  • 域的划分和物理网络结构无关
区域(Zone)
  • 将DNS名字空间划分为互不相交的区域
  • 每个区域都有一个权威名字服务器(Authoritative Record)维护它所管辖区域的权威信息,上层域的名字服务器中有指针指向下层域的名字服务器(NS记录)
  • 权威名字服务器允许被放置在区域之外,以保障可靠性
  • 对于权威名字,组织机构可以选择自己维护或者某个服务提供商来维护

image-47.png

DNS缓存和更新

  • 一旦域名服务器学习到了一个映射,它就会缓存这个映射。缓存往往在本地域名服务器里,这样可以减轻根域名服务器的压力。
  • 缓存有效时间TTL,过了有效时间该缓存就会被删除。
  • 更新/通知机制:由IETF制定的 RFC2136 标准。如果中途域名主机改变IP地址,整个网络可能都不知道真正的IP地址,直到TTL到时,所以需要更新/通知机制。
DNS 记录
  • RR 格式:(Name, Value, Type, TTL)
  • Type = A:Name 为主机,Value 为 IP 地址
  • Type = NS:Name 为子域的域名,Value 为子域的权威名字服务器的域名
  • Type = CNAME:Name 为规范名字的别名,Value 为规范名字
  • Type = MX :Name 为邮件服务器的别名,Value 为邮件服务器的规范名字
DNS工作过程
  1. 应用调用解析器(Resolver)
  2. 解析器向名字服务器发送查询报文
  3. 名字服务器返回报文

DNS消息

DNS有两种消息类型:查询(query)和回答(reply),两种消息格式相同 image-48.png

本地名字服务器(Local Name Server)

  • 每个 ISP 都有一个本地名字服务器
  • 当主机发起 DNS 查询时,查询被发送到其本地名字服务器
  • 本地名字服务器起着代理作用,将查询转发到层次结构中

名字解析过程

  • 若目标名字在本地名字服务器的缓存中:直接查询缓存中的IP地址。
  • 若目标名字不在本地名字服务器的缓存中:
    • 递归查询:联系根名字服务器,顺着根的顶级域名服务器一直找到权威名字服务器image-49.png
    • 迭代查询:服务器返回下一个 NS 的地址,最后由权威名字服务器给出解析结果image-50.png

DNS查询工具

nslookup直接查询

查询一个域名的A记录,如果没指定dns-server,用系统默认的dns服务器。

nslookup domain [dns-server]

nslookup查询其他记录

nslookup -qt=type domain [dns-server]

type可以是以下这些类型:

type 类型
A 地址记录
AAAA 地址记录
AFSDB Andrew文件系统数据库服务器记录
ATMA ATM地址记录
CNAME 别名记录
HINFO 硬件配置记录,包括CPU、操作系统信息
ISDN 域名对应的ISDN号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
MX 邮件服务器记录
NS 名字服务器记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP服务器信息记录
TXT 域名对应的文本信息
X25 域名对应的X.25地址记录

向DNS数据库插入记录

比如要创建一个networkutopia.com的网站

  • 先在.com的TLD提供商 Network Solution 注册 networkutopia.com
    • 提供信息:域名、权威域名服务器的IP地址
    • 提供商会向.comTLD服务器插入 NS、A 的RR(networkutopia.com, dns1.networkutopia.com, NS) (dns1.networkutopia.com, 212.212.212.1, A)
  • 在自己的权威域名服务器上进行配置
    • 插入www.networkutopia.com的type A记录
    • 如果是邮件服务,插入networkutopia.com的type MX记录

P2P

纯P2P架构
  • 没有一直运行的服务器
  • 任意端系统之间直接通信
  • Peer节点间歇上网,每次IP地址都有可能变化
  • 例子:文件分发,流媒体,VoIP

优点:自扩展性(self-scalability):新的点都会提供服务容量和负荷 缺点:每个点都是间断性连接,而且IP地址会改变

P2P类型
  • 非结构化P2P
  • 结构化P2P(DHT)
BitTorrent
  • 文件分为大小为256kb的块(chunk)

  • 每个节点负责上传和下载的文件块

  • 追踪器(tracker):追踪参加洪流的节点

  • 洪流(torrent):有一组节点相互交换文件块 image-51.png

  • 节点加入洪流:

    • 本身没有文件块,从其他节点获取文件块
    • 在tracker注册获得peers列表
    • 与相邻peers取得联系
  • 下载时,节点会上传文件块到其他节点

  • 节点可以更改文件块的其他节点

  • 节点随时会上线和下线

  • 一旦节点完整的文件,它可以离开或者留在洪流中

请求文件块
  • 在给定的时间,不同的节点拥有不同的文件块
  • 一定周期,新的节点会问每个节点有哪些块
  • 新节点会从其他节点处下载缺失的文件块
  • 最稀缺优先(rarest first):如果有10个节点都有第1、2块,只有一个节点有第3块,则先下载第3块。
发送文件块

发送文件块遵守一报还一报原则(tit-for-tat)

  • 节点会给目前给它发送文件块速率最高的四个节点发送文件块,其他节点就不发送了,每隔 10s 会选出新的top4

  • 每隔 30s 会随机选择其他节点发送文件块,这样这个随机节点可能就会成为新的top4

    tit-for-tat原则:上传速率快的节点相应地得到高下载速率的回报。
    

CDN

全网部署缓存节点,就近为用户提供内容加速服务

CDN部署策略
  • Enter Deep:将CDN服务器深入接入网,数量多、离用户近
  • Bring Home:部署在少数关键位置,采用租用线路将服务器簇链接起来

传输层(Transport Layer)

传输层服务

传输层为运行在不同主机上的应用进程提供逻辑通信。传输协议运行在端系统,可选择不同的协议(如TCP和UDP)

  • 发送方:将应用层的报文分成报文段,传输给网络层
  • 接收方:将报文段重组成报文,传递给应用层

传输层依赖网络层的服务,并对网络层的部分服务进行增强(如数据丢失、乱序、加密可以增强,但延时和带宽不可增强)

传输层网络层对比

  • 网络层:主机之间的通信
  • 传输层:进程之间的通信

传输层依赖于并能强化网络层服务

传输层协议

  • TCP:可靠的,有序的传送
    • 拥塞控制
    • 流量控制
    • 需要建立连接
  • UDP:不可靠的,无序的传送
    • 提供尽力而为交付服务

二者均不提供的服务:延时保障、带宽保障

多路复用(Multiplexing)与多路分用(Demutiplexing)

多路复用存在于发送方:发送方需要处理多个套接字,并且给套接字加上传输层的头部

多路分用存在于接收方:利用头部信息,将接收到的报文段传输给正确的套接字

多路复用与解复用

TCP的复用与解复用
  • 复用:
    • 应用层将消息和TCP Socket(包含源IP、源Port、目标IP、目标Port)传递给传输层
    • TCP层将源port、目标port和消息封装成TCP段(Segment),并与IP、目标IP一起传递给网络层
  • 解复用:
    • IP层将TCP段和源IP、目标IP传递给TCP层
    • TCP层根据TCP段中的源Port、目标Port和目标IP地址查询对应的Socket和PID,将信息传递给应用进程 image-53.png
UDP的复用与解复用
  • 复用:
    • 应用层将信息、UDP Socket(包含源IP、源Port)和目标IP、目标Port传递给传输层
    • UDP层将源Port、目标Port和消息封装成UDP段(Datagram),并与源IP、目标IP一起传递给网络层
  • 解复用:
    • IP层将UDP段和源IP、目标IP传递给UDP层
    • UDP层根据目标IP和目标Port查询对应的Socket和PID,将消息传递给应用进程 image-54.png
socket的作用
  • 复用:从多个套接字接受来自多个进程的报文,根据套接字对应的IP地址和端口号封装报文
  • 解复用:根据报文段头部信息的IP地址和端口号将接收到的报文段发给正确的套接字和对应的应用进程

用户数据协议(UDP)

UDP数据报格式
  • 头部(8字节):
    1. 源端口(Source Port):2字节,标识发送方的端口号;若不使用则置为0
    2. 目的端口(Destination Port):2字节 ,标识接收方的端口号
    3. 长度(Length):2字节,表示整个UDP报文的长度;最小值为8(仅头部),最大值为65535
    4. 校验和(Cheaksum):2字节,用于检测传输中的错误;在IPv4中可选,若未计算则置为0;在IPv6中强制使用
  • 应用程序数据:载荷 image-55.png

UDP的优点

  • 简单:发送端和接收端没有连接状态
  • 头部小:开销低
  • 快速发送:无需建立连接

校验和的工作原理

  • 发送方:
    1. 数据分块:将数据划分为16位(bit)的块
    2. 求和:对块进行二进制求和(进位回滚)
    3. 取反码:取反码得到校验和
    4. 插入校验和:将校验和插入报文头部
  • 接收方:
    1. 对接收到的数据(包括校验和)进行二进制求和
    2. 若结果不为0,数据有误,丢弃报文
  • 伪头部(UDP/TCP):
    • 在校验和计算中加入伪头部,包含源IP、目的IP、协议类型长度等信息,确保这些字段未被篡改

可靠数据传输

信道的不可靠特点决定了可靠数据传输协议的复杂性 image-56.png

RDT 1.0:可靠信道上的传输
  • 假设:信道完全可靠,无比特差错,无分组丢失
  • 发送方:封装,再直接发送数据
  • 接收方:直接接收数据,再解封装
RDT2.0:具有比特差错的信道————停止等待协议(Stop-and-wait)
  • 差错检测:校验和来检测比特级差错
  • 恢复机制:
    • 确认(ACK):接收方显式确认分组被正确接收
    • 否定确认(NAK):接收方显式通知发送方分组出错,发送方收到NAK后重传
    • 副本:发送方发完之后要留个副本,用于检错重传 image-57.png
RDT2.1:发送方处理出错的ACK/NAM

发送方收到的ACK/NAK有可能是出错(Corrupt)的

  • 发送方:为分组编号,若发现收到的ACK/NAK出错,重新上传分组
    • 在分组中加入序列号,若发现收到的ACK/NAK出错,重新上传分组
    • 必须检测ACK/NAK是否出错(Corrupt)
    • 状态机中的状态数变成了原来的两倍,因为需要记当前分组的序列号是0还是1 image-59.png
  • 接收方:为ACK/NAK添加差错控制编码(EDC);在等待n+1号packet时(说明之前已经收到过n号packet):
    • 再次收到没出错的n号packet,把收到的n号packet丢弃,并发送一个ACK
    • 再次收到出错的packet,就发送一个NAK
    • 收到没出错的n+1号packet,解封装、向上层传递数据,然后发送一个ACK,进入等待n+2号packet的状态 image-60.png
RDT2.2:无NAK的协议(NAK Free)
  • 特点:仅使用ACK,且ACK需编号
  • 恢复机制:若收到重复ACK,发送方重传当前分组
    • 接收方对最后正确接收的分组发ACK,以代替NAK;且发的ACK必须显式包含被正确接受的分组的序号;比如接收方接收1号packet出错,不是发NAK1,而是发ACK0,表示1号packet接收出错
    • 当发送方重复收到某编号的ACK(如再次收到ACK0)时,发送方重传当前分组 image-61.png
RDT3.0:超时重传机制

引入超时重传机制的原因:下层信道可能会丢失分组(ACK丢失或packet丢失)

  • 造成死锁
  • 目前的机制(检验和,序列号,ACK,重传)还不够处理这种状况

解决方法:

  • 发送端超时重传,每次发送分组后启动计时器,如果超过Timeout还没有受到该分组的ACK,就重传分组并重置计时器
  • 和RDT2.2不同,发送端收到上一个packet的ACK之后,并不会立即重传,而是“按兵不动”,等待超时,因为超时也会触发重传
  • 超时计时器需要设置合理的Timeout值,若Timeout值设置太短,也能正常工作,但是效率较低,会重复发送数据包
  • 数据链路层的Timeout时间是确定的,传输层的Timeout时间是适应性的(动态计算) image-13.png RDT 3.0的性能:信道容量较大的情况下,一次发一个协议数据单元不能充分利用链路的传输能力,瓶颈在于网络协议限制了物理资源的利用 image-14.png

流水线协议(Pipeline)– 区别于停止等待协议

允许发送方在未得到对方确认的情况下一次发送多个分组

  • 必须增加序号的范围,用多个bit表示分组序号
  • 发送方/接收方需要缓冲区:
    • 发送方缓存:
    1. 上层用户取用数据的速率 ≠ 接收到的数据速率,需要缓冲队列;
    2. 接收到的数据可能乱序,需要排序后交付上层 image-15.png

滑动窗口协议(Sliding Window)– 流量控制

滑动窗口协议通过动态调整发送窗口大小,控制发送方和接收方之间的数据流量,确保数据可靠传输。回退N步协议(Go-Back-N,GBN)和选择重传(Selective Repeat,SR)是滑动窗口协议的两种具体实现方式

  • 发送缓冲区
    • 定义:发送方用于临时缓存待发送数据的内存区域
    • 功能:
      • 临时储存待发送的分组,落入缓冲区的分组将按顺序发送
      • 存储已发送但未确认的分组,以备重传
    • 发送缓冲区的大小
      • 停止等待协议:发送缓冲区大小为1,每次只能发送一个分组
    • 发送缓冲区中的分组
      • 未发送的分组:可以按顺序连续发送
      • 已发送但未确认的分组:只有在收到ACK后才能从缓冲区中删除
  • 发送窗口
    • 定义:发送窗口是发送缓冲区的一个子集,表示已发送但未确认的分组的序号范围
    • 初始状态:未发送任何分组时,后沿等于前沿
    • 发送过程:
      • 每发送一个分组,前沿向前移动一个单位
      • 收到确认后,发送缓冲区和发送窗口整体向前移动
    • 发送窗口的移动:
      • GBN协议:发送方只有在收到对窗口起始序号的数据包的ACK后,才会滑动发送窗口
      • SR协议:每收到一个数据包的ACK,发送方就会标记该数据包为“已确认”;发送窗口的起始位置会滑动到第一个未确认的数据包(因此也可能不滑动)
    • 发送端超时重发
      • GBN协议:发送方检测到丢包(超时或收到重复ACK),会从窗口起始序号开始重传所有未确认的数据包;假设发送窗口大小为4,当前窗口范围为[2,3,4,5];如果发送方收到ACK 2,它会将窗口滑动到[3,4,5,6];如果发送方检测到2丢失(收到ACK 1或超时还未收到ACK 2),它会重传[2,3,4,5]
      • SR协议:发送方检测到丢包(超时或收到重复ACK),只会重传该丢失的数据包,而不是整个窗口;假设发送窗口大小为4,当前窗口范围为[2,3,4,5];如果发送方收到ACK 2,它会将窗口滑动到[3,4,5,6];如果发送方检测到4丢失(超时还未收到ACK 4),只会重传4
    • 发送端定时器:
      • GBN协议:发送方只设置一个定时器,即最老的未确认分组的定时器,当定时器超时,重传所有未确认的分组
      • SR协议:发送方为每个未确认的分组都设置一个定时器,当某个分组的定时器超时,只发送该分组 image-16.png
  • 接收窗口
    • 定义:接收窗口等同于接收缓冲区,用于控制哪些分组可以被接收
    • 功能:
      • 只有序号落入接收窗口的分组才会被接收
      • 序号在接收窗口外的分组将被丢弃
    • 滑动机制
      • 顺序接收:最低序号的到达时,接收窗口滑动
      • 乱序接收(窗口>1):非最低序号的分组到达时,缓存但不交付,接收窗口不滑动
    • 接收窗口大小
      • GBN协议:接收窗口大小=1,只能顺序接收,只有当接收方收到当前期望序号的数据包时,接收窗口才会向前滑动1
      • SR协议:接收窗口大小>1,可以乱序接收,但提交给上层的分组必须按序,只有当接收窗口的前n个连续的包都收到时,才将窗口中连续的数据包一起交付给上层,接收窗口向前滑动n
    • 确认机制
      • GBN协议:接收窗口大小=1,采用累计确认,发送连续收到的最大分组的确认
      • SR协议:接收窗口大小>1,采用非累计确认,收到哪个分组就发送哪个分组的确认 image-17.png

两种流水线协议:GBN与SR

  • 相同点
    • 发送窗口大小>1
    • 允许一次发送多个未经确认的分组
  • 不同点
    特性 GBN(Go-Back-N)协议 SR(Selective Repeat)协议
    接收窗口大小 = 1 > 1
    接受方式 只能顺序接收 可以乱序接收
    发送方重传机制 重传缓冲区中所有未确认的分组 选择性重传,只重传未确认的分组
    定时器设置 只设置一个定时器,超时后重传所有未确认的分组 为每个未确认的分组设置独立的定时器
    优点 出错时回退代价大,贷款利用率低 实现复杂,接收方需要更多缓存资源
    特性 GBN(Go-Back-N)协议 SR(Selective Repeat)协议
    适用场景 出错率低的链路 高延迟、大带宽的链路

窗口大小的限制

  • GBN协议:
    • 发送窗口大小不能超过$2^N$ - 1($2^N$为数据包序列号长度)
    • 原因:避免接收方混淆新旧分组,如果发送窗口大小超过$2^N$ - 1,可能会导致接收方无法区分新旧数据包
    • 反例:
    1. 假设序列号位数为3,序列号范围为[0,1,2,3,4,5,6,7]
    2. 发送窗口大小为8,发送方发送第一波数据包[0,1,2,3,4,5,6,7]
    3. 接收方成功接受并发送了ACK0到ACK7,但这些ACK全部丢失(例如被拦截或网络故障)
    4. 发送方未收到任何ACK,触发超时重传,重新发送[0,1,2,3,4,5,6,7]
    5. 接收方在等待下一波的0,但发送方发送的是上一波的0,从而导致混淆
  • SR协议:
    • 发送窗口和接收窗口大小均不能超过$2^{N - 1}$
    • 原因:防止发送方和接收方的窗口重叠,导致分组混淆
    • 反例:
    1. 假设序列号位数为2,序列号范围为[0,1,2,3]
    2. 如果发送窗口大小为3,发送方发送第一波数据报[0,1,2]
    3. 接收方成功接收并发送了ACK0到ACK2,但这些ACK全部丢失(例如被拦截或网络故障),接收方把窗口移动到[3,0,1]
    4. 发送方未收到任何ACK,触发0的超时重传,重新发送0
    5. 接收方在等待下一波0,但发送方发送的是上一波的0,从而导致混淆 image-18.png

分路复用

多路分用工作流程
  • 主机接收到数据报(IP datagram)
    • 每个数据报有源IP地址和目的IP地址
    • 每个数据报携带一个传输层报文段(segment)
    • 每个报文段有源和目的端口号
  • 主机利用IP地址和端口号来把报文段传入正确的套接字 image-52.png

面向连接的传输:TCP

TCP连接的特点:
  • 点对点:一个发送方,一个接收方
  • 可靠传输:可靠的、保序的字节流服务
  • 全双工通信:在同一连接中数据双向流动
  • 管道化:发送方可以连续发送多个报文
TCP报文结构

image-19.png

  • 端口号:用来标识同一台计算机的不同的应用进程
    • 源端口:源端口和IP地址的作用是标识报文的返回地址
    • 目的端口:端口指明接收方计算机上的应用程序接口 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接
  • 序号:报文段首个字节在字节流中的编号,e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。序号确保了TCP传输的有序性
  • 确认号:ACK,期望从另一方收到的下一个字节的序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0
  • 数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报文不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为十进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值
  • 保留:为将来定义新的用途保留,现在一般置0
  • 控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能
    • URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针
    • ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段
    • PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
    • RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求
    • SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1
    • FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流
  • 窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535
TCP超时重传机制
  • 超时时间计算:TimeoutInterval = EstimatedRTT + 4 * DevRTT
    • EstimatedRTT:平滑的RTT估计值,(1 - $\alpha$)*EstimatedRTT + $\alpha$ * SampleRTT, $\alpha$ = 0x125
    • DevRTT:RTT的偏差估计,(1 - $\beta$)*DevRTT + $\beta$|SampleRTT - EstimatedRTT|,$\beta$ = 0.25
    • Sample RTT:测量从报文段发出到收到确认的时间,如果有重传,忽略这次测量 image-20.png
TCP的可靠数据传输机制
  • 流水线的报文段
    • TCP使用流水线方式发送报文段,允许多个报文段同时在网络中传输
    • 这种方式结合了GBN和SR协议的特点:
      • GBN:累计确认、单个重传计时器
      • SR:选择性重传、乱序缓存
  • 接收方的确认机制
    • 接收方发送的ACK是累计确认,ACK号表示接收方期望收到的下一个字节的序号(ACK 100,表示接收到了序号0-99的字节,期望收到序号100的字节)
  • 发送方的重传机制
    • 单个重传计时器:
      • 发送方只维护一个重传计时器,用于检测最早的未确认字节是否丢失
      • 如果计时器超时,发送方会重传最早的未确认字节(类似于SR协议的选择性重传)
    • 快速重传机制:
      • 当发送方收到3个或更多重复ACK时,会立即重传丢失的数据包,而不必等待计时器超时
      • 这种机制可以更快地恢复丢失的数据包,减少传输延迟
  • 乱序数据的处理
    • 是否接受乱序数据:
      • TCP规范没有明确规定接收方是否必须缓存乱序数据
      • 大多数TCP实现会选择缓存乱序数据,等待前面的数据到达后再按序交付给上层应用
  • 接收方的辅助定时器
    • 接收方可能会使用一个辅助定时器,用于检测是否发生了数据包丢失
    • 如果接收方收到乱序数据包,但未收到前面的数据包,辅助定时器可以帮助接收方更快地检测到丢失的数据包
TCP流量控制
  • 接收窗口(RWND):接收方通过TCP头部的窗口大小字段告知发送方其当前可用的缓冲区空间
  • 发送方:根据RWND调整发送窗口,避免发送过多数据
TCP连接管理
  • 三次握手:防止两次握手造成的虚假连接和数据老旧问题 image-21.png
  • 四次挥手:对称释放两个半连接,对称拆除连接并不完美,客户端用超时时间弥补 image-26.png

拥塞控制

拥塞的定义与表现
  • 定义:网络中的数据量超过其处理能力
  • 表现:分组丢失、超时重传、延迟增加
拥塞控制方法
  • 端到端的拥塞控制
    • 没有来自网络的显式反馈
    • 端系统根据延迟和丢失事件判断是否有拥塞
  • 网络辅助的拥塞控制
    • 单个bit置位,显示有拥塞(SNA、DECbit、TCP/IP、ECN、ATM)
    • 显式提供发送端可以采用的速率(Explicit Rate)
    • 拥塞的交换机可能会降低ER的值
    • 发送端发送速率是最低可支持速率
TCP拥塞控制
  • 端到端控制:发送方根据网络状态调整发送速率
    • 路由器的负担较轻
    • 符合网络核心简单的TCP/IP架构原则
  • 拥塞发生检测
    • 超时(某些段的超时时间到了,但ACK还没到来)
      • 网络拥塞(某个路由器的缓冲区没有空间了,被丢弃)=> 概率大
      • 出错被丢弃(没有通过各级的数据校验)=> 概率小
    • 有关某个段的3次重复ACK => 轻微拥塞
  • 拥塞窗口(CongWin):发送方维护一个可动态调整的拥塞窗口,用于限制已发送但未确认的数据量的上限
    • CongWin的增加:
      • 慢启动(Slow-Start)阶段:
        • CongWin初始值为1 MSS(最大报文段大小)
        • 每收到一个ACK,CongWin增加1 MSS(指数增长:1,2,4,8,…)
        • 当CongWin达到阈值(Threshold)时,进入拥塞避免阶段
      • 拥塞避免(Congestion-Aoidance)阶段:
        • CongWin每经过一个RTT增加1 MSS(线性增长)
        • 目标是逐步接近网路的拥塞点,避免突然引发拥塞
      • CongWin的减少:
        • 超时:
          • 如果发生超时,发送方认为网络拥塞严重
          • CongWin降为1 Mss,Threshold降为CongWin/2
          • 重新进入慢启动阶段
        • 3个重复ACK:
          • 如果收到3个重复ACK,发送方认为发生了轻微拥塞
          • CongWin降为CongWin/2,Threshold降为CongWin/2
          • 进入拥塞避免阶段 image-27.png image-28.png
  • 和流量控制的联合动作:发送端控制发送但未确认的量的同时,也不能超过接收端的接收窗口大小,也即Sendin = Math.Min(CongWin, RecvWin),从而同时满足流量控制和拥塞控制的要求
TCP公平性
  • 公平性:多个TCP会话共享链路带宽时,每个会话的有效带宽为R/K bps
  • 原因:每个TCP会话都试图最大化自己的发送速率,但由于拥塞控制机制,它们会相互竞争并最终达到平衡 image-29.png

网络层

概述

  1. 数据传输:
    • 在发送主机和接收主机之间传送段(Segment)
    • 发送端将段封装到数据报中,接收端将上交给传输层实体层
  2. 协议实现:
    • 网络协议存在于每一个主机和路由器
    • 路由器检查每一个经过它的IP数据报的头部

网络层的主要功能

转发(数据平面)
  1. 本地功能:决定路由器输入端口到达的分组如何转发到输出端口
  2. 转发方式:
    • 传统方式:基于目标主机IP和转发表
    • SDN方式:基于控制器下发的流表
路由(控制平面)
  1. 全局功能:确定从源主机到目的主机的路径
  2. 控制平面方法:
    • 传统路由算法:在路由器中实现,数据平面和控制平面紧密耦合,控制平面计算路由表,数据平面IP协议根据目标IP和路由表决定数据报在此路由器上的局部转发
    • SDN:远程服务器中实现,远程服务器与本地控制代理(Control Agent)通信,本地控制代理根据多个字段对数据报进行转发、丢弃、泛洪、修改等操作

网络服务模型

  1. 单个数据报的服务:
    • 可靠传输:确保数据报无差错、按序到达
    • 延迟保证:确保数据报在规定时间内到达
  2. 数据报流的服务:
    • 保序传达
    • 保证流的最小带宽
    • 分组之间的延迟差

路由器组成

路由器的功能:路由和转发,输入端口和输出端口是整合在一起的

  1. 输入端口缓存:解决Head-of-Line阻塞问题(由于排在队头的分组阻塞,后续分组无法发送)
  2. 输出端口缓存:数据报的到达速率大于发送速率时,缓冲数据报;数据报并不是先发,而是根据调度规则选择队列中的数据报进行传输
  3. 调度规则:
    • FIFO:先到先传
    • 优先级调度:根据优先级传输
    • Round Robin:轮流传输,循环扫描不同类型的队列,先发完一类再发下一类
    • Weighted Fair Queuing(WFQ):一般化的Round Robin,每个类在每一循环中获得不同权重的服务量
第一代路由器
  • 在CPU直接控制下交换,采用传统的计算机总线结构
  • 分组被拷贝到系统内存,CPU从分组的头部提取目标IP地址,查找转发表,找到并拷贝到输出端口
  • 转发速率被内存的带宽限制且数据报需要拷贝两次
  • 一次只能转发一个分组 alt text
第二代路由器
  • 数据报通过共享总线,从输入端口转发到输出端口
  • 总线竞争:交换速度受限于总线的带宽
  • 一次处理一个分组 alt text
第三代路由器
  • 同时并发转发多个分组,克服带宽限制 alt text

IP协议

IP数据报的格式:包括版本号、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、头部校验和、源IP地址、目的IP地址、选项和填充、数据

IP分片和重组
  • 大的IP数据报在传输过程中可能需要分片,它们:
    • 具有相同点ID
    • 不同的偏移量
    • 最后一个分片标记为0
  • 重组只在最终的目标主机进行,目标值户籍设置定时器,超时后所有的分片没到齐就丢弃
  • IP头部的信息被用于标识和排序相关分片

IP地址:32位,对主机或路由器接口的编址 接口:主机或路由器和物理链路的连接处

  • 路由器通常拥有多个接口
  • 主机也可能有多个接口
  • 一个IP地址和一个接口相关联

层次编址和路由聚集

  • 层次编址
    1. 分层结构:
      • IP地址分为网络部分和主机部分,网络部分可进一步划分子网
      • 示例:
        • IP地址:192.168.1.1
        • 子网掩码:255.255.255.0
        • 网络地址:192.168.1.0
        • 主机地址:1
    2. 简化路由:
      • 路由器只需要关注网络部分,减少路由表条目
  • 路由聚集

将多个连续IP地址块合并为一个更大的地址块,减少路由表条目,提高路由效率

  1. 示例:
    • 多个网络:
      • 192.168.1.0/24
      • 192.168.2.0/24
      • 192.168.3.0/24
    • 聚合后的网络:
      • 192.168.0.0/22

子网(Subnet)

  • 一个子网内的节点(主机或路由器),它们的IP地址的高位部分相同,这些节点构成的网络叫子网
  • 无须路由器介入(可借助交换机),子网内各主机在物理上可以相互直接到达,即一跳可达 alt text

IP地址分类

  • A类地址:
    • 范围:1.0.0.0 - 126.0.0.0
    • 子网掩码:255.0.0.0 或 /8
    • 用途:大型网络
  • B类地址:
    • 范围:128.0.0.0 - 191.255.0.0
    • 子网掩码:255.255.0.0 或 /16
    • 用途:中型网络
  • C类地址:
    • 范围:192.0.0.0 - 223.255.255.0
    • 子网掩码:255.255.255.0 或 /24
    • 用途:小型网络
  • D类地址:
    • 范围:224.0.0.0 - 239.255.255.255
    • 用途:多播
  • E类地址:
    • 范围:240.0.0.0 - 255.255.255.255
    • 用途:实验性

alt text

特殊地址
  • 127.0.0.1:回环地址,用于测试本地网络软件
  • 内网专用地址:不会被当作公共地址来分配,在局域网中用于区分不同的设备,路由器不对目标地址为内网专用地址的数据报进行转发
    • A类:10.0.0.0 - 10.255.255.255
    • B类:172.16.0.0 - 172.31.255.255
    • C类:192.168.0.0 - 192.168.255.255
子网掩码的特殊规定
  • 子网部分全0 => 本网络
  • 主机部分全0 => 本主机
  • 主机部分全1 => 广播地址,表示这个网络的所有主机
无类域间路由选择(CIDR)

CIDR解决了传统IP地址分类带来的地址浪费和路由表膨胀问题

参考:[《计算机网络-自顶向下方法》笔记](https://gy23333.github.io/2020/03/16/%E3%80%8A%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E8%87%AA%E9%A1%B6%E5%90%91%E4%B8%8B%E6%96%B9%E6%B3%95%E3%80%8B%E7%AC%94%E8%AE%B0/)