计网笔记(updating~)

2025年9月14日 · 17960 字 · 36 分钟

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

网络概述

因特网概述

具体构成角度
  • 节点:
    • 主机及其应用程序
    • 路由器、交换机等网络设备
  • 边(通信链路 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之后,并不会立即重传,而是“按兵不动”

分路复用

多路分用工作流程
  • 主机接收到数据报(IP datagram)

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

    参考:《计算机网络-自顶向下方法》笔记