• 第一章 基本概念

    1.1什么是Internet?

    1.各层次的功能

    1. 物理层:在物理媒体上为数据端设备透明地传递原始比特流。传输单位是比特。

    2. 数据链路层:功能可以概括为成帧、差错控制、流量控制和传输管理等。传输单位是帧。

    3. 网络层:将网络层的协议数据单元(分组)从源端传到目的端,为分组交换网上的不同主机提供通信服务。对分组进行路由选择,并实现流量控制、阻塞控制、差错控制和国际互联等功能。传输单位是数据报。 常用协议:

      • ARP:根据IP地址获取对应的MAC地址,通过一问一答实现交互,问是通过广播形式实现,答是通过单播形式。
      • ICMP:在ip网络设备之间发送控制报文,传递差错、控制、查询等信息。可根据ICMP查看要发送的数据是否成功送达。若未成功送达的话,可查看发送失败的原因。
      • DHCP:给主机动态的分配ip地址,无需人为参与。
      • IP协议:寻址和路由。
    4. 传输层:为端到端提供可靠的传输服务,为端到端连接提供流量控制、差错控制、服务质量、数据传输管理等服务。传输单位是报文段(TCP)或者用户数据报(UDP)。

      • TCP:可靠的、面向连接、传输效率低。(需要确认对接)
      • UDP:不可靠的、无连接、传输效率高。(不需要确认对接)
    5. 会话层:负责管理主机间的通话进程,包括建立、管理以及终止进程间的通话。

    6. 表示层:主要处理在两个通信系统中交换信息的表示方法。

    7. 应用层:为特定类型的网络应用提供访问OSI参考模型环境的手段。传输单位是报文。

      • DNS:将域名转换为ip地址。
      • FTP:用于ftp客户端和ftp服务器之间进行文本、文件传输。
      • SMTP:提供可靠且有效的电子邮件传输的协议。
      • HTTP:规定了浏览器和服务器之间请求和响应的格式与规则。
      • HTTPS:在Http和Tcp之间加入SSL/TLS协议,对传输信息进行加密。

    2.网络

    1. 从具体构成角度

      1. 节点

        • 主机及其上运行的应用程序。
        • 路由器、交换机等网络交换设备。
      2. 边:通信链路

        • 接入网络链路:主机连接到互联网的链路。
        • 主干链路:路由器间的链路。
      3. 协议

        • 协议定义了在俩个或多个通信实体之间交换的报文格式和次序,以及在报文传输和/或接受或其他事情方面所采取的动作。
      4. 数以亿计的、互联网计算设备:

        • 主机=端系统。
        • 运行网络应用程序。
      5. 通信链路

        • 光纤、同轴电缆、无线电、卫星。
        • 传输速率=宽带(bps)。
      6. 分组交换设备:转发分组(packets)

        • 路由器和交换机。
    2. 从服务角度

      1. 使用通信设施进行通信的分布式应用

        1. Web、VoIP、email、分布式游戏、电子商务、社交网路……
      2. 通信基础设施为apps提供编程接口(通信服务)

        1. 将发送和接收数据的apps与互联网连接起来。

        2. 为app应用提供服务选择、类似于邮政服务

          1. 无连接不可靠服务(UDP)。
          2. 面向连接的可靠服务(TCP)。

     

    1.2网络边缘

    1. 网络结构

      1. 网络边缘(edge)

        1. 主机。
        2. 应用程序(客户端和服务器)。
      2. 网络核心

        1. 互连着的路由器。
        2. 网络和网络。
      3. 接入网、物理媒体(access)

        1. 有限或者无线通信链路。
      4. 端系统(主机):

        1. 运行应用程序。
        2. 如Web、email。
        3. 在“网络的边缘”。
      5. 客户/服务器模式(C/S)

        1. 客户端向服务器请求,接受服务。
        2. 如Web浏览器/服务器:email客户端/服务器。
      6. 对等(peer-peer)模式(P2P)

        1. 很少(甚至没有)专门的服务器。
        2. 如Gnutella,kaZaA,Emule。
    2. 采用网络设施的面向连接服务(TCP)

      1. 目标:在端系统之间传输数据。

        1. 握手:在数据传输之前准备

          1. 人类协议中:你好、你好。
          2. 俩个通信主机之间为连接建立状态。
        2. TCP—传输控制协议(Transmission Control Protocol)

          1. Internet上面向连接的服务。
      2. TCP服务

        1. 可靠地,按顺序地传送数据

          1. 会确认是否接受和重新传送。
        2. 流量控制

          1. 发送方不会淹没接收方。
        3. 拥塞控制

          1. 当网络拥塞时,发送方降低发送速率。
    3. 采用基础设施的无连接服务(DUP)

      1. 目标:在端系统之间传输数据

        1. 无连接。
      2. UDP—用户数据报协议(User Datagram Protocol)

        1. 无连接。
        2. 不可靠数据传输。
        3. 无流量控制。
        4. 无拥塞控制。
      3. 使用TCP的应用

        1. HTTP(Web)、FTP(文件传送)、Telnet(远程登录)、SMTP(email)。
      4. 使用UDP的应用:

        1. 流媒体、远程会议、DNS、Internet电话。

     

    1.3网络核心

    1. 网络核心:路由器的网状网络

    2. 基本问题:数据怎样通过网络进行传输的?

      1. 电路交换:为每个呼叫预留一条专有电路:如电话网。

      2. 分组交换

        1. 将要传送的数据分成一个个单位:分组。
        2. 将分组从一个路由器传到相邻路由器(hop),一段段最终从源端传到目标端。
        3. 每段:采用链路的最大传输能力(带宽)。
    3. 电路交换

      1. 端到端的资源被分配给从源端到目标端的呼叫“call”:

        1. 电路交换例子256009e795376f9e5da8e753e11702c

        2. 为呼叫预留端-端资源

          1. 链路带宽、交换能力
          2. 专用资源:不共享
          3. 保证性能
          4. 要求建立呼叫连接
        3. 网络资源(如带宽)被分成片

          1. 为呼叫分配片

          2. 如果某个呼叫没有数据,则其资源片处于空闲状态(不共享)

          3. 将带宽分成片

            1. 频分(FDM)image-20240818135913362
            2. 时分(TDM)image-20240818135930082
            3. 波分
            4. FDM和TDM94373f038dab13f0dfd306144e16ef5
        4. 缺点

          1. 连接建立时间长。
          2. 计算机之间的通信有突发性,如果使用线路交换,则浪费的片较多。即使这个呼叫没有数据传递,其所占据的片也不能够被别的呼叫使用。
          3. 可靠性不高。
    4. 分组交换

      1. 以分组为单位存储-转发方式image-20240818140040476

        1. 网络带宽资源不再分分为一个个片,传输时使用全部宽带。
        2. 主机之间的传输的数据被分为一个个分组。
      2. 资源共享,按需使用

        1. 存储-转发:分组每次移动一跳(hop)

          1. 在转发之前,节点必须收到整个分组(packet)。5785e3de01cdb2cbf8da84cee943ca0
          2. 延迟比线路交换要大。
          3. 排队时间。
      3. 排队和延迟image-20240818140410569

        1. 如果到达率>链路的输出速率

          1. 分组将会排队,等待传输。
          2. 如果路由器的缓存用完了,分组将会被抛弃。
      4. 转发表和路由选择协议

        1. 路由:分组中包括IP地址;
        2. 转发:路由器中将目的地址映射为输出链路。路由算法。
    5. 网络结构

      1. 网络结构是网中网,具有层次结构

        1. ISP:ISP分为许多层级,比如第一层ISP(tier-1 ISP)、区域ISP(regional ISP)、接入ISP(access ISP)。端系统通过接入ISP与因特网相连,全球的ISP通过各层级相连,形成了互联网的互联。
        2. 因特网交换点(Internet Exchange Point、IXP):由第三方公司创建,IXP是一个汇合点,多个ISP在此处对等。
        3. image-20240818165112091

    1.4协议(protocol)

     

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

    1.五层因特网协议栈

    2.OSI模型

     

    3.封装(Encapsulation)

    1.6物理层

    1. 物理层的基本目标

    2. 物理层的基本特征

    1.7基本通信原理

    1. 基本概念

      1. 数据(data):对于客观事实描述的物理符号,包括数字、文本、语言、图像等等。
      2. 信息(information):数据的集合。
      3. 信号(signal):数据传输中的表现形式,比如模拟信号、数字信号。
      4. 信道(channel):往固定方向传输信息的媒介。
    2. 模拟传输VS数字传输

      1. 传输方式优点缺点
        模拟对信号有高利用率不抗噪
        数字信号不易失真需要更宽的带宽
    3. 信道特性

      1. 码元(Symbol):承载信息量的基本信号单位。

        1. 码元和比特位数关系image-20240818215253518
      2. 波特率(Baud rate):传输码元的速率。

      3. 比特率(bit rate):传输比特的速率。

        1. 波特率和比特率的关系image-20240818215518017
      4. 信道容量(Channel capacity):在一个信道中能够可靠地传送信息时可达速率的最小上界,单位bps。

      5. 频带宽度(Frequency bandwidth):信道允许的信号频率范围,单位Hz。

        1. Frequencybandwidth=maximumbandwidthminimumbandwidth

           

      6. 传输延迟(Transmission delay):包括发送到接受的处理事件、电信号的响应时间、中间介质的传输时间。

      7. 奈奎斯特定理(Nyquist’s Law)

        1. 对于理想的低通信号,在一个频带宽度为 W 的信道,其码元的最大传输速率 = 2W Baud
        2. 对于理想的带通信号,在一个频带宽度为 W 的信道,其码元的最大传输速率 = W Baud
      8. 香农定理(Shannon’s Formula)

        信道的信息传输速率C(单位:bps)

        C=Wlog2(1+S/N)
        • W - 带宽,单位 Hz

        • S - 信道的平均信号功率

        • N - 信道的高斯噪声功率

        • S/N - 信号功率与噪声功率之比(也可以叫信噪比)

          一般情况下,信噪比不用 S/N表示,而是 10log10S/N10log10S/N ,单位为dB。

    4. 模拟/数字信号传输

      • 模拟信道只能传输模拟信号,数字信道只能传输数字信号。
      1. 调制解调器image-20240820035808571

      2. 编码解码器image-20240820035829541

      3. 调制(Modulation):数字信号到模拟信号

        1. 从数字信号到模拟信号大调制主要有三种方法:image-20240820035947749
      4. 脉码调制(Pulse Code Modulation, PCM)

        1. 模拟信号到数字信号:

        2. 脉码调制步骤:

          1. 采样(Sampling system):采样频率是信号频率的两倍,则可不失真地恢复原始信号。
          2. 量化(Quantify):取整采样信号。
          3. 编码(Coding):量化后的信号编码成二进制。
          4. image-20240820040220456
      5. 数字信号编码:

        1. 数字信号到数字信号:

          1. 不归零编码:

            1. 主要介绍俩种不归零编码

              1. Non-Return-To-Zero Level (NRZ-L) Coding:高电平表示“1”,低电平表示“0”。

                1. image-20240820040439245

                2. NRZ-L的优点:简单好实现

                  NRZ-L的缺点:

                  • 难以分清二进制一位的开始和结束,所以必须要带同步时钟(外同步)来同步。可以把上图的虚线当作是同步时钟,当把虚线去掉是,相同电平的信号就不好判断开始和结束了。
                  • 在传输全“1”或全“0”信号时,此时传输的只有直流分量(傅立叶分不出正弦或余弦分量),这样线路上会有比较大的噪声。
              2. 反向不归零编码(NRZ-I): 遇“1”反向。只能解决NRZ-L的部分问题(全“1”问题,不再是直流)

                1. image-20240820040530890

                2. 外同步(External synchronization)

                  给系统一个同步时钟信号,设置一个周期的宽度。

                  外同步有诸多不便,于是有了自同步的曼切斯特编码。

          2. 曼切斯特编码(Manchester encoding): 每个编码由两段组成,“1”:先高后低;“0”:先低后高(可以反过来定义):

            1. image-20240820040725819

            2. 曼切斯特编码的优点(解决了不归零编码的问题):

              • 自同步,不需要同步时钟;
              • 直流分量为0。

              曼切斯特编码的缺点:

              • 基频增加:基频是不归零编码的两倍,从而比特率变成了不归零编码的一半;
              • 二义性:组合情况有两种。image-20240820040759142
          3. 差分曼切斯特编码(Differential Manchester encoding):

            1. 解决曼切斯特编码的二义性。

              • “1”:自己的前半波与前一个编码的后半波相同;

              • “0”:自己的前半波与前一个编码的后半波相反。

                有两种画法,初始为高、初始为低,两种画法结果对称。image-20240820041035990

            2. 差分曼切斯特编码的优点:

              • 解决NRZ问题
              • 解决二义性问题

              差分曼切斯特编码的缺点(同曼切斯特编码):

              • 基频翻倍
              • 高频噪声增加
          4. 块编码(Block encoding)

            1. 将原信号每 m bits 分为一块;
            2. 把 m bits 的每块映射成 n bits 的块(m < n);
            3. 将 n bits 的块重新组合起来。image-20240820041212845

     

    1.8 延时、丢包、吞吐量

    1. 延时(delay)

      1. 现实中的计算机系统不是理想系统,事件是随机突发的,所以不可避免的存在延时。image-20240820041418528

      2. 数据包的延时由四个部分组成:

        dnodal=dprop+dqueue+dtrans+dprop
        • 处理时延(Nodal Processing Delay,dprocdproc)

          路由器接收到分组对其进行处理的时间(比如差错检测),耗时很短,毫秒级。

        • 排队时延(Queuing Delay,dqueuedqueue)

          分组在链路上等待传输的时间,取决于先期到达的正在排队等待向链路传输的分组数量。

        • 传输时延(Transmission Delay,dtransdtrans)

          将分组的比特流传输到链路的时间(比如进行编码转换成查分曼切斯特编码的时间)。

          如分组长度 L ,传输速率 R bps,则其传输时延为:

          dtrans=L/R

          所以传输时间取决于分组长度和传输速率。

        • 传播时延(Propagation Delay,$$)

          信号在媒体上传播的时间。

          如物理链路的长度 d,传播速度 s m/sec,则其传播时延为:

          dprop=d/s
    2. 丢包

      1.  

      2. 流量强度(traffic intensity)代表了路由器上排队的拥堵率。

        trafficintensity=(L×a)/R

        其中,L —— 分组长度(bits);

        R —— 链路带宽(bps);

        a —— 平均分组到达速率

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

        image-20240820041925352

        路由器的排队容量是有限的,当分组到达一个已满的队列时,路由器将丢弃该分组,产生丢包。

    3. 吞吐量

      1. 从主机A到主机B传文件,B接收文件的速率为瞬时吞吐量(instantaneous throughput),单位bps;所有时间的平均速率为平均吞吐量(average throughput)。

        串联链路吞吐量取决于瓶颈链路(bottleneck link)。

        Throughput=min{R1,R2,...,RN}

        image-20240820042146051

     

    第二章 应用层

    2.1 网络应用原理

    1. 网络应用结构

      1. 客户机-服务器体系结构(Client-server architecture)C/S

        例如:HTTP、IMAP、FTP

        1. 服务器

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

          客户机

          • 可以和服务器进行通信;
          • 可能间断性连接网络;
          • 可能是动态的IP地址;
          • 客户机之间不会直接通信;
      2. 点对点体系结构(Peer-peer architecture)p2P

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

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

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

        例子:P2P的文件分享。

     

    1.进程通信

    1. 客户机和服务器进程

      1. 进程:一台主机上运行的程序。

      2. 在同一台主机上,两个进程通过进程间通信(inter-process communication)来进行通信。进程间通信由操作系统定义;

      3. 不同主机之间,进程通信同过报文交换,

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

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

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

    2. 套接字(Sockets)

      1. 进程之间通过socket来接受/发送信息。

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

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

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

        • IP地址:IPv4中32位IP,负责找到接收端主机。

        • 端口号(port number):每台主机都可能运行着多个进程,每个进程对应一个端口号。

          比如,HTTP服务端口号80、邮件服务端口号25。

    4. 应用层协议(Application-Layer Protocols)

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

      2. 应用层协议的分类

        1. 公开网络协议

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

          专用网络协议

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

        1. 应用层协议定义了

          • 消息交换的类型:比如请求、响应
          • 消息的语法:消息中有哪些字段以及这些字段如何定义
          • 消息的语义:消息字段内容的含义
          • 规则:进程什么时候、如何发送/接收消息
      4. app对传输服务的需求

        1. 数据完整性(data integrity)

          一些app需要100%可靠的文件传输,比如文件传输;有一些运行一部分的丢失,比如语音。

        2. 时效性(timing)

          一些app要求较少的延时,比如对话直播。

        3. 吞吐率(throughput)

          吞吐率,即最小带宽,一些app存在一个吞吐率下限才能正常使用,比如视频音频等多媒体;有些app运行弹性的吞吐率,比如邮件传输,吞吐率小可以慢慢传过去。

          image-20240821165425941

     

    2.网络传输协议

    1. TCP(传输控制协议)

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

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

     

    2.2Web和HTTP

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

    1. HTTP协议概述

      • 超文本传输协议(hypertext transfer protocol, HTTP)
      1. 网页的应用层协议。

      2. 基于客户-服务器体系结构。

        1. 客户机:负责请求,接收和显示Web对象。
        2. 服务器:Web服务器负责发送对象,响应客户机请求。
      3. HTTP的传输层使用TCP

        1. 客户机发起TCP连接(创建socket,端口号80)
        2. 服务器接收TCP连接
        3. 在浏览器和网页服务器之间进行HTTP信息交换。
        4. TCP连接断开。
      4. HTTP是无状态的。

        1. 服务器不会保留之前客户机发的请求信息。
        2. 协议要维持状态时很复杂的:保留之前的历史纪录很消耗;如果客户机或者服务器有死机,它们的状态会不一致,还需要重新同步。
      5. HTTP消息类型:请求(request)与响应(response)

    2. HTTP连接类型

      1. 非持久性连接(Non-persistent HTTP)

        1. 非持久性HTTP步骤

          1. TCP连接开启
          2. 通过这个TCP连接最多传输一个对象
          3. TCP连接关闭
        2. 如果加载多个对象时,需要多次非持久性HTTP连接。image-20240821192820135image-20240821192928835

        3. 非持久HTTP响应时间

          1. RTT:往返时间(Round Trip Time),一个很小的数据包(处理文件的时间可忽略)从客户机传到服务器再传回来的时间。

          2. HTTP响应时间(一个对象):

            • 1个RTT:建立TCP连接的时间

            • 1个RTT:HTTP请求以及收到HTTP响应的前几个字符的时间

            • 对象/文件传输的时间

              对一个对象来说,非持久性HTTP响应时间为

              NonpersistentHTTPresponsetime=2RTT+filetransmissiontime
            • image-20240821193416015

        4. 非持久性HTTP的问题

          • 每传输一个对象都需要耗费 2RTT
          • 每建立一个TCP连接都会对操作系统(OS)产生负荷
          • 并行抓取:浏览器常常开多个并行的TCP连接去抓取对象
        5. 持久性连接(Persistent HTTP)

          1. 持久性HTTP步骤

            1. 开启TCP连接
            2. 通过这一个TCP连接可以传多个对象
            3. TCP连接关闭
            持久性HTTP特点(HTTP1.1)
            • 服务器在发送响应后保持连接开启状态
            • 后续这个客户机\服务器的HTTP消息都通过该开启的连接发送
            • 两种发送对象方式:HTTP1.1采用流水的方式发送:一次性把对象全发了;另一种是客户机接收到一个对象后接着发下一个对象的请求
            • 至少需要1个RTT发完所有对象

     

    2.3 DNS

    1. DNS服务

      • IP地址和域名的转换
      • 主机的别名
      • 邮件服务的别名
      • 负荷分配:有些Web可能有多个服务器,即会有多个IP地址对应一个域名,可调整IP地址的顺序以分配负荷。
    2. DNS:分布式,层级的数据库

      1. 为什么要选用分布的DNS,而不是采用集中式的DNS。

        1. 单点可能失效:一个故障就全部gg了。
        2. 流量问题:所有客户机都访问一个域名服务器,会产生很大的流量。
        3. 远程的集中式数据库:客户机要访问可能要花费很多时间,RTT会很大,造成大延时。
      2. DNS采用三层结构:image-20240822141200786

        1. 一个客户机得到www.baidu.com的IP地址的步骤:

          1. 客户机先查寻根域名服务器:得到顶级域名服务器.com DNS server的地址。
          2. 客户机查询顶级域名服务器:.com DNS server,得到权威域名服务器baidu.com DNS server地址;
          3. 客户机查询权威域名服务器:baidu.com DNS server,得到www.baidu.com的IP地址。
      3. 根域名服务器(Root Name Server)

        1. 官方的服务器,是连接的最后的方法(如果知道下级域名服务器的地址就不需要再从头开始查询根域名服务器,不然会对根域名服务器产生很大的流量负荷)。
        2. 对网络运行相当重要,离开根域名服务器网络无法正常工作。
        3. 域名系统安全扩展(Domain Name System Security Extensions,DNSSEC) —— 对DNS提供给DNS客户端(解析器)的DNS数据来源进行认证,并验证不存在性和校验数据完整性验证。
        4. ICANN(互联网名称与数字地址分配机构,Internet Corporation for Assigned Names and Numbers)—— 管理根域名服务器的组织。
        5. 世界上现在有13个根域名服务器,分布在世界各地。
      4. 顶层域名服务器(Top-Level Domain Server, TLD)

        • 各种类型的TLD,比如.com.orgnet.edu等等,国家的TLD,比如.cn.uk等等。
        • Network Solutions:管理.comnetTLD的组织
        • Educause:管理.edu的组织
      5. 权威域名服务器(Authoritative Domain Server)

        1. 组织自己的DNS服务器,用来提供组织内部的域名到IP地址的映射
        2. 由组织自己或者服务提供商来维护
      6. 本地域名服务器(Local DNS Name Server)

        1. 严格来说不属于层级结构

        2. 每个ISP都会有一个本地域名服务器,也叫做默认域名服务器(default name server)

        3. 当主机要进行DNS查询时,查询会被直接送到本地的DNS服务器。

        4. 作用:

          • 缓存:可以缓存最近收到的域名到IP地址的映射(缓存有时效,会过期)
          • 代理:可以作为代理,代替主机在层级结构中进行查询
    3. DNS查询方法

      1. 迭代查询(iterated query)

        1. 被联系到的服务器会将后一个服务器的名字反馈回来,即“我不认识这个域名,但是你可以去问那台服务器(=゚ω゚)ノ”
        2. 下面的迭代查询过程,利用本地域名服务器作为代理迭代查询域名对于的IP地址。image-20240822142840834
      2. 递归查询(recursive query)

        1. 把域名解析的负担交给了联系到的域名服务器,这种方法对于高级的负担增加,所以一般采用迭代查询而不采用递归查询。
        2. image-20240822143006742
    4. DNS缓存和更新

      1. 一旦域名服务器学习到了一个映射,它就会缓存这个映射。缓存往往在本地域名服务器里,这样可以减轻根域名服务器的压力。
      2. 缓存有效时间TTL,过了有效时间该缓存就会被删除。
      3. 更新/通知机制:由IETF制定的 RFC2136 标准。 如果中途域名主机改变IP地址,整个网络可能都不知道真正的IP地址,直到TTL到时,所以需要更新/通知机制。
    5. DNS记录和消息

      1. DNS记录

        DNS的分布式数据库里存储了资源记录(resource record, RR)

        RR的格式:(name, value, type, ttl)

        type = A

        • name:主机名
        • value:对应的IP地址

        type = NS

        • name:域(如foo.com
        • value:对应的权威域名服务器的主机名

        type = CNAME

        • name:别名
        • value:对应的规范主机名
        • 比如 www.ibm.comservereast.backup2.ibm.com 的别名,这与负荷的分配有关,可能有多个服务器。

        type = MX

        • name:邮件服务器别名
        • value:对应的规范主机名
      2. DNS消息

        DNS有两种消息类型:查询(query)和回答(reply),两种消息格式相同。

        1. image-20240822143345733
      3. 向DNS数据库插入记录

        1. 比如要创建一个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记录
    6. DNS查询工具

      1. 在命令行用nslookup进行DNS查询。

      2. nslookup直接查询

        • 查询一个域名的A记录,如果没指定dns-server,用系统默认的dns服务器。
        • nslookup查询其他记录
        • type可以是以下这些类型:
        type类型
        A地址记录
        AAAA地址记录
        AFSDBAndrew文件系统数据库服务器记录
        ATMAATM地址记录
        CNAME别名记录
        HINFO硬件配置记录,包括CPU、操作系统信息
        ISDN域名对应的ISDN号码
        MB存放指定邮箱的服务器
        MG邮件组记录
        MINFO邮件组和邮箱的信息记录
        MR改名的邮箱记录
        MX邮件服务器记录
        NS名字服务器记录
        PTR反向记录
        RP负责人记录
        RT路由穿透记录
        SRVTCP服务器信息记录
        TXT域名对应的文本信息
        X25域名对应的X.25地址记录

     

    2.4 P2P

    点对点体系结构(Peer-peer architecture)

    1. P2P概述

      1. 没有一个一直在线的服务器;
      2. 任意端系统之间直接进行通信;
      3. 每个点(peer)向其他的点请求服务,同时作为回报也会提供相应的服务;
      • 优点:自扩展性(self-scalability):新的点都会提供服务容量和负荷。
      • 缺点:每个点都是间断性连接,而且IP地址会改变。
      • 例子:P2P的文件分享。
    2. 文件分发:客户机-服务器结构 vs P2P

      1. 从一个服务器分发大小为F的文件到N个节点需要多少时间?(每个节点上传和下载的速率都是有限的,网络中有足够的带宽)image-20240822144149902

      2. 如果选用客户机-服务器结构

        1. 服务器上传:需要上传这份文件 NN 次,上传速度为 usus,则需要的上传时间为 NF/usNF/us

        2. 客户机下载:每个客户机都需要下载文件,dmin 是客户机最小下载速度,则客户机下载的最大时间为 F/dmin

          客户机-服务器结构的分发时间:

          Dc_smax{NF/us,F/dmin}

            此处的N导致耗费的时间随要下载的节点的数量线性增长,当要下载的节点数目大时,要耗费相当多的时间。

        3. 不需要先上传完再下载,参考第一章/网络核心/分组交换,以分组为单位发送,可以忽略上传到下载的时间。

      3. 如果选用P2P结构

        1. 服务器上传:服务器至少要上传1次文件,上传时间为 F/us

        2. 客户机下载:每个客户机都要下载文件,客户机最大下载时间为F/dmin

        3. 客户机上传:每个下载了文件的客户机都可以上传文件,此时总上传速率可以达到us+nui

          P2P结构的分发时间:

          DP2Pmax{F/us,F/dmin,NF/(us+nui)}
      4. 客户机-服务器结构和P2P分发时间对比image-20240822214845762

    3. BitTorrent

      1. 文件分为大小为 256Kb的块(chunk)

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

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

      4. 洪流(torrent):有一组节点相互交换文件块

      5. 新的节点想下载文件,先询问追踪器参加的节点,再从相近的节点处下载文件块

      6. image-20240822215757617

      7. 节点加入洪流:

        • 本身没有文件块,但是随着时间的推移会从其他节点获取文件块
        • 需要在追踪器进行登记,并且一般连接临近的节点
      8. 下载时,节点会上传文件块到其他节点

      9. 节点可以更改交换文件块的节点

      10. 节点随时会上线和下线

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

    4. 请求文件块

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

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

      • 节点会给目前给它发送文件块速率最高的四个节点发送文件块,其他节点就不发送了,每隔 10s 会选出新的top4
      • 每隔 30s 会随机选择其他节点发送文件块,这样这个随机节点可能就会成为新的top4
      • tit-for-tat原则:上传速率快的节点相应地得到高下载速率的回报。

     

    2.5 socket编程

    1. UDP中的socket编程

     

    2. TCP得socket编程

    1. TCP中的socket编程示例

      1. TCP服务器代码 :TCPServer.ipynb

         

        TCP客户机代码:TCPClient.ipynb

      2. image-20240824002134532

     

     

    第三章 传输层

    3.1传输层服务

    1. 传输层概述

      • 为不同主机之间的应用进程提供通信的桥梁

        • 端对端:传输层协议在端系统间运行,不需要涉及网络核心

          • 发送方把应用层接到的消息分成段(segment),再把这些段传输给网络层
          • 接收方把接收到的段重新拼装成消息,传输给应用层
      • 传输层的协议:TCP和UDP

    2. 传输层和网络层对比

      • 网络层:主机之间的通信

      • 传输层:进程之间的通信

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

    3. 传输层协议

      • TCP:可靠的,有序的传送

        • 拥塞控制

        • 流量控制

        • 需要建立连接

        • UDP:不可靠的,无序的传送

          • 提供尽力而为交付服务

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

     

    3.2多路复用(Multiplexing)与多路分用(Demultiplexing)

    1. 多路分用

      1. 多路分用工作流程

        1. 主机收到IP数据报(IP datagram)

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

      2. 无连接的多路分用(Connectionless demultiplexing)

        1. 参考UDP的socket工作方式,如果数据报的目的IP地址和端口号相同,它们将被传到同一个socket当中。(即使数据报的源可能不同)
      3. 面向连接的多路分用(Connection-oriented demux)

        1. 标记TCP的socket需要4元组:源IP地址、源端口号、目的IP地址、目的端口号
        2. 多路分用:接收方要用到上面4个值来传入不同的socket
        3. 服务器的主机可能要同时支持多个TCP连接
        4. web服务器有不同的socket对应每个连接的客户机,其中非持久性HTTP会给每个请求都建立新的socket。

     

    3.3UDP

    1.UDP概述

    1. UDP(User Datagram Protocol,用户数据报协议),标准为RFC 768。

      • 只有基本的功能
      • 尽力而为的服务,UDP可能会丢包或者失序
      • 不用连接:客户机和服务器不需要握手,每个UDP段都是独立处理的image-20240824111735338
    2. UDP的优点

      • 不需要进行连接,连接可能会造成时延
      • 简单:不需要考虑连接的状态
      • 相对小的头的大小
      • 不需要拥塞控制,可以尽快地把UDP段发出去
    3. UDP的应用

      • 流媒体的app(运行一部分数据的丢失,但是对速度很敏感)
      • DNS
      • SNMP
    4. 通过UDP进行可靠的传输(UDP本身是不可靠的)

      • 在应用层增加可靠性
      • app要有对应的错误恢复方法

    2.UDP校验和(UDP checksum)

    1. 位于UDP头部,负责检测传输的段有没有发生“错误”(比如位的翻转)

    2. 发送方:

      • 把发送的段的内容包括头部分,当作一组16-bit的整数
      • 校验和:报文段中的所有16-bit的和的取关于“1”的补码
      • 发送方要将校验和放到UDP的校验和部分
    3. 接收方:

      • 计算接收到的报文段的校验和
      • 将接收方的校验和与发送方的校验和进行比较,不同则检测出错误,相同则没检测出错误
    4. 校验和相同只能说是“检验不出错误”,不能保障没有错误。比如传输中多个16bit字发生错误,但是可能恰巧相加校验和不变。

    5. image-20240824111957107

     

    3.4可靠数据传输原理

    可靠数据传输原理(Principles of reliable data transfer, rdt

    1. rdt1.0:经可靠信道的可靠数据传输

    1. rdt1.0概述

      • 下层信道完全可靠:rdt1.0中假设下层的信道是一个完全可靠的信道(理想情况)

        • 没有bit的错误
        • 没有分组(packet)丢失
      • 发送方和接收方的

        有限状态机(FSM)

        (存在状态和操作)

        • 发送方发送数据给下层信道
        • 接收方接收下层信道传来的数据
    2. rdt1.0有限状态机

      1. 发送方

        1. 发送方首先在“等待上级调用”的状态,rdt_send(data)上级调用rdt,从上级接收到data,make_pkt(data)将data装到packet里,再用udt_send(packet)将packet发送出去,完成后发送方再回到“等待上级调用”的状态。(发送方只有一个状态)
        2. image-20240824112519938
      2. 接收方

        1. 接收方首先在“等待下级调用”的状态,rdt_rcv(packet)下级调用rdt,从下级接收到packet,用extract(packet, data)将packet重新恢复成data,提取出来的data再通过deliver_data(data)传送给上级。完成后接收方再回到“等待下级调用”的状态。
        2. image-20240824112549488
        3. 下层信道不可能完全可靠 => 引入rdt2.0

    2. rdt2.0:经具有比特差错信道的数据传输

    引入差错检测、控制信号和重传机制,解决下层信道不可靠问题。

    1. rdt2.0概述

      1. packet在下层信道传输中会出现比特翻转:可以引入校验和(checksum)来检测比特错误。

      2. 错误恢复——如果检验到错误如何恢复?

        • ACKs(acknowledgements):接收方告诉发送方收到的pkt是正确的
        • NAKs(negative acknowledgements):接收方告诉发送方收到的pkt是错误的
        • 发送方收到NAK则重传那个pkt
      3. rdt2.0引入的新机制

        • 差错检测:checksum
        • 接收方反馈:控制信号(control msg),即ACK和NAK
        • 重传
    2. rdt2.0无限状态机

      1. 发送方

        1. rdt2.0的发送方有2个状态——等待上级调用等待ACK或NAK。发送方最初处于“等待上级调用”的状态,rdt_send(data)上级调用rdt,从上级接收到data,sndpkt = make_pkt(data, checksum)将data装到packet里,再用udt_send(sndpkt)将packet发送出去。此时,发送方变为“等待ACK或NAK”的状态。rdt_rcv(rcvpkt)接收反馈,如果isNAK(rcvpkt)即接收到NAK,则重传udt_send(sndpkt),并保持“等待ACK或NAK”的状态;如果isACK(rcvpkt)即接收到ACK,则回到“等待上级调用”的状态。
        2. image-20240824113130964
      2. 接收方

        1. 接收方还是只有一个状态——等待下级调用。接收方首先在“等待下级调用”的状态,rdt_rcv(rcvpkt)接收方接收packet,如果corrupt(rcvpkt),即检测到错误,则udt_send(NAK)反馈NAK;如果notcorrupt(rcvpkt),即未检测到错误,则extract(packet, data)将packet重新恢复成data,deliver_data(data)将data传送给上级,最后udt_send(ACK)反馈ACK。完成后接收方再回到“等待下级调用”的状态。
        2. image-20240824113159479
        3. 接收方可能判断ACK/NAK信号出错,导致发送分组重复 => 引入rdt2.1

    3. rdt2.1:接收方判断ACK/NAK信号出错

    1. rdt2.1有限状态机

      1. 发送方

        1. 相较于rdt2.0,rdt2.1在发送的packet里包含了0/1序号(sequence number),所以发送方有4种状态——等待上级调用 0等待ACK或NAK 0等待上级调用 1等待ACK或NAK 1
        2. image-20240824113332258
      2. 接收方

        1. 接收方有2种状态——等待下级调用 0等待下级调用 1。只有在数据包ACK且收到的packet序号与目前状态等待的序号相同时,才能向上传输。
        2. image-20240824113403384
        3. image-20240824113432095

     

    4. rdt2.2:不发送NAK的协议

    1. rdt2.2概述

      • 只用ACK,不用NAK,实现和rdt2.1一样的功能。
      • 在检测到错误时,不发送NAK,但是接收方要发送判断上一次序号的ACK(同时包括序号)
      • 用重复的ACK代替NAK
    2. rdt2.2有限状态机

      1. 发送方

        1. 将rdt2.1中的isNAK(rcvpkt)判断本次反馈是NAK,替代成判断上次序号的反馈是ACK,比如rdt2.2在“等待ACK 0”时,如果isACK(rcvpkt, 1),则相当于收到来rdt2.1中的isNAK(rcvpkt)。其余不变。
        2. image-20240824113617727
      2. 接收方

        1. 接收方如果校验和检测出错,则发送上一次序号的ACK;在校验和检测正确时,发送ACK也需要带上本次的序号。
        2. image-20240824113651311

    5. rdt3.0:信道存在错误和丢包

    1. rdt3.0概述

      1. 发送端在一个合理的时间内,等待接收ACK。

        • 当在等待时间内没有接收ACK时,重传
        • 超过时间可能有两种情况:丢包或时延,如果发生时延可能会重复发生pkt,此时rdt2.1和2.2中的序号可以解决问题,同样的发生ACK得带上序号。
        • 需要计时器
    2. rdt3.0有限状态机

      1. 发送方传输开始时,start_timer启动计时器。如果timeout传输超时,则重新启动计时器;如果在规定时间内接收到反馈,则stop_timer结束计时。image-20240824113808192
    3. rdt3.0流程

      1. 正常流程image-20240824113849554
      2. 丢packetimage-20240824113921250
      3. 丢ACKimage-20240824113940513
      4. 超时image-20240824114000375
    4. rdt3.0性能

      1. rdt3.0性能很差image-20240824114030283
      2. rdt3.0网络协议限制了物理资源的使用率。

     

    3.6流水线协议

    采用流水线的机制,不要等一个RTT发送回来再发下一个(即不再采用停等机制),来提高物理资源的使用率。

    1.回退N步(Go-back-N,GBN)

    1. GBN发送方

      • packet头部有k bit的序号,则可以表示 2k 个序号。
      • “窗口”大小为N,这一段是允许的未ACK的packetimage-20240825002408818
      • ACK(n)累计确认:ACK在发送的时候要带上序号#n,即#n及之前的packet都收到了。接收方发送ACK n,则证明#n及之前的packet都收到了。否则接收方还是发送之前的ACK(重复)。
      • 计时器只给最早的未ACK的packet保留
      • 如果timeout(n),重传#n以及比#n更大的未ACK的packetimage-20240825002427000
    2. GBN接收方

      • 发送的ACK是顺序接收到的packet里面最大的序列号#

        • 可能会产生重复的ACK
        • 只需要记住期望的序列号(expextedseqnum)
      • 乱序到达的packet

        • 直接丢弃,不缓存(缓存会造成数据重复)
        • 重新发送顺序最大序列号#image-20240825002512559
    3. GBN流程

      • image-20240825002553749
      • image-20240825002610347

    2. 选择重传(Selective Repeat,SR)

     

    1. SR发送方

      • 收到上层数据

        • 如果window里还有可用序列,则继续发送
      • timeout(n)

        • 重发pkt n,重启timer
      • 如果ACK(n)在可接收范围内[sendbase,sendbase+N−1]

        • pkt n标记为接收完成
        • 如果 n 是最小的未ACK的pkt,则将window滑动到下一个未ACK的pkt
    2. SR接收方

      • 如果pkt n在接收范围内[rcvbase,rcvbase+N−1][rcvbase,rcvbase+N−1]

        • 发送ACK(n)
        • 如果不是按序到达,则缓存pkt
        • 如果是按序到达,则向上交付已有的按序的缓存,并将window滑动到下一个未收到的pkt
      • 如果pkt n[rcvbase−N,rcvbase−1][rcvbase−N,rcvbase−1]

        • 发送ACK(n)
      • 其他情况忽略

    3. SR流程image-20240825003101726

    4. SR困境

      1. 比如下面序列号有:#0, #1, #2, #3,window大小为3的情况。SR会无法分清a、b两种情况,导致在b中误判重发的第一轮的pkt0,被当作后一轮的pkt0填入。
      2. image-20240825003150026

     

    3.7TCP

    1.TCP概论

    2.TCP报文段结构

    image-20240825003259029

    1. 端口号:用来标识同一台计算机的不同的应用进程。

      • 源端口:源端口和IP地址的作用是标识报文的返回地址。
      • 目的端口:端口指明接收方计算机上的应用程序接口。
      • TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
    2. 序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。

    3. 数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。

    4. 保留:为将来定义新的用途保留,现在一般置0。

    5. 控制位: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时表示发送方已经没有数据发送了,即关闭本方数据流。
    6. 窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

    7. 校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

    8. 紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

    9. 选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

    10. 数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

    3. TCP可靠数据传输

    1. TCP简化

      1. TCP简化版:无重复ACK,拥塞控制和流量控制。
    2. TCP sender

      • TCP sender的3种事件

      • 从上一层收到数据

        • 分段,创建seq#(报文中字节流第一个字节的序号)

          • 开始timer

            • 只给最早一个未ACK的segment timer
            • 用Timeoutlnterval作为timeout时间
        • 超时

          • 重传segment
          • 重启timer
        • 收到ACK

          • 如果收到未ACK的segment的ACK

            • 更新被ACK的segment标记
            • 从最近的一个未ACK的segment开新的timer
        • 图TCPsender简化版image-20240831112348873

    3. TCP重传情况

      1. 图ACK丢包image-20240831112458718
      2. 图 提前timeoutimage-20240831112624563
      3. 图累计ACKimage-20240831112725767
    4. TCP receiver

    事件TCP接收方反应
    具有所期望序号的按序报文段到达。所有在期望序号及以前的数据都已经被确认延迟的ACK,对另一个按序报文段的到达最多等待500ms。如果下一个按序报文段在这个时间间隔内没有到达,则发送一个ACK
    具有所期望序号的按序报文段到达。另一个按序报文段等待ACK传输立即发送单个累计ACK,以确认两个按序报文段
    比期望序号大的失序报文段到达。检测出间隔立即发送冗余ACK,指示下一个期待字节的序号(其为间隔的低端的序号)
    能部分或完全填充接收数据间隔的报文段到达倘若该报文段起始于间隔的低端,则立即发送ACK
    1. TCP快速重传

      • timeout时间长,造成长时延

      • 通过重复的ACK检测丢包

        • 发送方发送很多个segment
        • 如果有segment丢失,则可能会收到很多个重复的ACK
      • TCP快速重传机制:

        • 如果发送方收到对同一个数据收到3个重复的ACK(实际收到4次该ACK),则认为此时未ACK的segment丢失,不需在等待timeout,重发ACK的最小seq#image-20240831114328806

    4.流量控制

    接收方要控制发送方,使发送方不会发送得太快导致接收方的缓存(buffer)溢出。

    5. 连接管理

    1. TCP建立连接:3次握手

    建立连接之前,先握手

    2. TCP关闭连接:4次挥手

    6.拥塞控制原理

    λinλin=λout

    3.8TCP拥塞控制

    1. 概述

    sender逐渐增加发送速率(window size),从而探查可用bandwidth,直到丢包

    TCP AIMD.png

    TCP cwnd.png

    2. TCP慢启动(TCP slow start)

    image-20240831130112085

    当出现丢包时,

    3.从 slow start 到 CA 的转换

      当cwnd达到上次timeout时的1/2(即sstresh)时,从指数级增长变成线形增长。

    sstresh —— 出现丢包时,将sstresh设置为此时cwnd的1/2

    图 TCP Tahoe/Reno下cwnd的变化图【注:中间有一次3次ACK的丢包】 TCP congestion window.png

    4.TCP拥塞控制FSM

    image-20240831130156121

    5.TCP吞吐量

    image-20240831130403985

    6.高速TCP

      假设一条具有 1500byte 报文段和 100ms RTT 的TCP连接,用此连接以 10Gps 发送数据。此时平均拥塞窗口长度为 83.333 个报文段。TCP连接的吞吐量公式(单位 bytes/sec):

    TCPthroughput=1.22MSSRTTL

    10Gps的吞吐量,报文段丢失概率为 2×1010

    7.TCP公平性

    目标:K条TCP连接,经过R bps的瓶颈,每条TCP连接分 R/Kbps,则公平。

      以两条TCP连接为例,从A出发,经过加性增、乘性减,会逐渐趋向公平线。所以TCP可以实现公平性。

    image-20240831130714302

    8.Explicit Congestion Notification(ECN)

    网络辅助的拥塞控制

    image-20240831130726725

    第四章 网络层(Network Layer)

    4.1概述

    1. 网络层功能

    2. 网络层服务

      网络层提供尽力而为的服务(best-effort service)。

    image-20240831130739105

    4.2 虚电路和数据报网络(Virtual circuit and datagram networks)

    1.虚电路(Virtual circuit,VC)

    image-20240831130749929

    VC组成:

    image-20240831130804483

    路由维持连接状态的信息。

    信令协议(signaling protocol)

    VC采用信令协议(signaling protocol)

    数据报网络(Datagram networks)

    image-20240831130817829

    转发表存储地址范围对应的链路接口,比如

    Destination Address RangeLink Interface
    11001000 00010111 00010000 00000000 ~ 11001000 00010111 00010111 111111110
    11001000 00010111 00011000 00000000 ~ 11001000 00010111 00011000 111111111
    11001000 00010111 00011001 00000000 ~ 11001000 00010111 00011111 111111112
    Otherwise3

    最长前缀匹配

      选择 Link Interface 遵循最长前缀匹配原则。

    例题:下面转发表

    image-20240831130925653

    目的地址11001000 00010111 00010110 1010000111001000 00010111 00011000 10101010 分别对应的Link Interface为?

    11001000 00010111 00010110 10100001 -> 0

    11001000 00010111 00011000 10101010 -> 1(与1和2都匹配,但是与1匹配更长)

    2.虚电路和数据报网络选择

    Internet:网络核心简单,复杂度在网络边缘

    ATM:复杂度在网络核心

    4.3 路由器工作原理

    1.路由器结构

     

    1.输入端口(Input port)
    1. 线路端接(line termination):物理层功能,用来比特的接收

    2. 数据链路处理(协议,拆封)(data link processing (protocol, decapsulation)):数据链路层功能,比如以太网

    3. 查找、转发、排队(lookup, forwarding, queueing)

      • 分散交换:给出数据报目的地,然后根据转发表查找输出端口
      • 目标:希望在“line speed”上完成输入端口的处理
      • 排队:数据报到达速度大于转发速度

    image-20240831130852603

    2. 交换结构(Switch fabric)

      三种交换结构:共享内存、共享总线、交叉开关矩阵

    1.共享内存(Switching via memory)

    image-20240831160212326

    2.共享总线(Switching via a bus)

    image-20240831160222481

    3.交叉开关矩阵(Switching via an interconnection network)

    image-20240831160231684

    3.输出端口(Output port)
    1. 排队(缓存管理)(Queueing(datagram buffer))

      • 缓存:当数据报到达快于传输速率,如果缓存不够会导致丢包
      • 调度方法:从排队中选择数据报进行传输,例如按时间顺序、按优先级顺序
    2. 数据链路处理(协议,封装)(Data link processing(protocol, encapsulation))

    3. 线路端接(Line termination)

    image-20240831160322161

    3.排队

    1.输入端口排队
    2.输出端口排队

    4.4 路由算法(Routing algorithms)

    1. 概述

    路由协议

    目标:从源到目的找到一条最好的路径

    image-20240831160358916

    路由图表示:

    G=(N,E)

    路由算法:找到cost最小路径

    路由算法分类

    1.Dijkstra算法

    算法步骤如下: G={V,E}

    1. 初始时令 S={V0},T=V-S={其余顶点},T中顶点对应的距离值 若存在,d(V0,Vi)为弧上的权值 若不存在,d(V0,Vi)为∞
    2. 从T中选取一个与S中顶点有关联边且权值最小的顶点W,加入到S中
    3. 对其余T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值缩短,则修改此距离值 重复上述步骤2、3,直到S中包含峙所有顶点,即W=Vi为止

    image-20240831160701485

    image-20240831160728581

    算法复杂度

    假如有n个节点,

      Dijkstra算法存在振荡问题。

    2.广播路由(Broadcast routing)

      通过广播路由得到路由的实时情况。完成广播通信的最直接方式是由发送节点向每个目的地分别发送分组的拷贝。

    LS算法

    LS算法 = 广播路由 + Dijkstra算法

    DV算法:距离向量算法(Distance vector algorithm)

      DV算法为基于分散信息、动态的路由算法。

    Bellman-Ford公式

      定义 dx(y):从x到y的最小cost路径的cost

    Bellman-Ford方程:dx(y)进行分解

    dx(y)=minvc(x,v)+dv(y)

    例题:通过dv(z)dw(z)dx(z)计算du(z)

    image-20240831161016753

    du(z)=minc(u,v)+dv(z),c(u,w)+dw(z),c(u,x)+dx(z)=min(2+5,1+3,5+3)=4
    DV算法

    迭代、异步 每个本地迭代产生于:

    分布

    image-20240831161035601

    好事传得快,坏事传得慢

    如何解决无限问题?

      如果要节点最小cost路由要绕路(即不是邻居),则标为∞∞

    LS算法和DV算法对比

     LSDV
    信息复杂度(Message complexity)O(nE)O(nE)(n个节点,E条链路)只在邻居之间交换
    收敛速度(Speed of convergence)O(n2)O(n2),可优化到O(nlogn)O(nlog⁡n)速度会变化
    强健性(Robustness)有一定强健性,每个节点都有自己的表强健性低,节点依赖于邻居

    层次路由(Hierarchical Routing)

    之前讨论的路由都是理想化的:所有路由器都相同,网络是“扁平”的。而实际,并不存在这样的理想路由。

      聚集路由成自治系统(autonomous system,AS)

    image-20240831161057426

    AS分类

    4.5因特网中的路由选择

      内部网关协议(Interior Gateway Protocols,IGP)是AS内的路由。

    常用的IGP有:

    RIP:路由信息协议(Routing Information Protocol)

    image-20240831161115480

    OSPF:开放最短路径(Open Shortest Path First)

    OSPF概述
    OSPF优点
    分层OSPF

    image-20240831161130271

    IGRP(Interior Gateway Routing Protocol)

    BGP:边界网管协议(Border Gateway Protocol)

    BGP概述

    采用 Path Vector protocol

    image-20240831161142688

    路径属性和BGP路由
    BGP消息
    BGP路由选择

      路由器可能知道到达同一个前缀的多条路由。BGP以下优先级选择路由:

    假设:网关X 将其路径发送到 网关W

    BGP路由策略

    image-20240831161207524

    Inra-/Inter-AS 的区别

    规模:分层可以节省表格大小,减小更新的流量。

     Intra-ASInter-AS
    Policy一个管理员,不需要policy决策管理员想要控制路由,需要有policy
    性能关注性能比起性能更关注policy

    4.6 IP:Internet Protocol

    IPv4数据报结构

    image-20240831161217851

    IPv4数据报分片

    image-20240831161234680

    IP数据报分片示例

    image-20240831161245914

    IPv4编址

    概述

    image-20240831161259695

    接口连接方式

    子网(Subnet)

    IP地址

    子网

      把路由器去掉,剩下的每个区域都是一个子网。

    image-20240831161313586

      上图中有6个子网。

    分类编制(Classful Addressing)

    image-20240831161325744

    子网掩码(subnet mask)

    image-20240831161339039

      200.23.16.64/27中的27网络部分+子网部分 的位数

    CIDR:无类的域间路由(Classless InterDomain Routing)
    如何获取IP地址
    主机如何获取IP地址

    主机获取IP地址:

    DHCP

      当一台主机加入网络时,从子网中的DHCP服务器获取IP地址。

    image-20240831161354493

    网络如何获取IP地址

      从ISP处获取分配的IP地址。

    image-20240831161408338

    ISP如何获取IP地址

      ISP从ICANN组织获取IP地址

    ICANN:Internet Corporation for Assigned Names and Numbers

    NAT:网络地址转换(Network Address Translation)
    ICMP:因特网控制消息协议(Internet Control Message Protocol)
    ICMP
    TypeCodedescription描述
    00echo reply (ping)echo响应 (被程序ping使用)
    30dest. network unreachable目标网络不可达
    31dest host unreachable目标主机不可达
    32dest protocol unreachable目标协议不可达
    33dest port unreachable目标端口不可达
    36dest network unknown未知的目标网络
    37dest host unknown未知的目标主机
    40source quench (congestion control - not used)源端关闭(拥塞控制)
    80echo request (ping)Echo请求
    90route advertisement路由通告
    100router discovery路由器的发现/选择/请求
    110TTL expiredTTL 超时
    120bad IP headerIP 报首部参数错误
    Traceroute

      Traceroute程序:跟踪从一台主机到其他主机之间的路由,用ICMP报文实现。

    在Mac上可在app“系统信息”中的窗口->网络实用工具中使用Ping、Traceroute等工具。

    IPv6

    IPv6数据报结构

    image-20240831161501460

    IPv6相较于IPv4的部分改变
    IPv6地址
    单播(Unicast address)

    单播的地址格式(一共 128 bit):

    IPv4到IPv6的迁移

    双栈(Dual Stack)

    image-20240831161527931

    隧道(Tunneling)

      当IPv6穿过IPv4的路由器上时,将IPv6作为载荷承载在IPv4上。就是像一个连接两个IPv6路由器的IPv4隧道

    image-20240831161538225

    5.1概述

    保证流的透明传输

    链路层服务:

    5.2成帧(Framing)

      主要考虑帧的界定,即如何将前一帧和后一帧分开。

    1.字符计数法(Character count method)

      在每帧的前面添加 Counting header(本帧长度)

    image-20240831161554404

    2. 基于字符的首尾界定法(First and tail bound method based on character)

      设定两个ASCII——SOH、EOT,SOH为标注开始的字符,EOT为标注结尾的字符。

    image-20240831161606729

      如果中间的数据部分也有SOH或EOT,则加入转义字符 EOT 标识。类似于C语言中的\的作用。

    image-20240831161617363

    3. 基于bit的首尾界定法(First and tail bound method based on bit)

      与基于字符的首尾界定法的思路相似,但开始和结束的标志为01111110

    image-20240831161626431

      为防止中间的数据部分也有01111110导致提前结束

    image-20240831161637063

    4.物理层违逆码法(Pysical layer coding violation method)

    比如在曼切斯特编码中,如果

      违逆码只能应用在物理层,因为违逆码无法储存。

    5.3差错检测(Error Detection)

      通过增加冗余位(EDC)来检测差错。

      差错检测不是100%可靠的。

    1. 奇偶校验(Parity Checking)

    2. CRC校验(Cyclic Redundancy Check)

      CRC(Cyclic Redundancy Check),循环冗余检测。

    思路:发送信息DD,设置一个生成多项式,利用冗余位RR,将D+RD+R凑成生成多项式的整数倍,在接收方如果无法整除,则出差错。

    image-20240831161721698

    链路的两种类型:

    多路访问协议分类:

    多路访问协议的目标:高效、公平、简单、分布式

    1.信道划分协议(Channel Partitioning protocols)

    1. 时分多路复用(TDMA)

      TDM将时间划分为时间帧(frame),并进一步划分每个时间帧为NN个时隙(slot),链路中的每条连接专用一个时隙。

      详见 时分多路复用(TDM)

    2. 频分多路复用(FDMA)

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

      详见 时分多路复用(FDM)

    3. 码分多址(CDMA)

      详见 码分多路复用(Code division multiplexing,CDM)

    image-20240831161749710

    2.随机接入协议(Random Access protocols)

    1.纯ALOHA(Pure ALOHA)

    image-20240831161803319

      假设一帧在t0t0处开始传输,则在[t0−1,t0+1][t0−1,t0+1],其他结点如有传输,发生碰撞,则易损时间区长度为2τ2τ(tautau为一帧的传输时间)。

      一个结点发送成功,则需要本结点发送、其他结点在[t0−1,t0][t0−1,t0][t0,t0+1][t0,t0+1]不发送。一个给定结点成功传送的概率为

    P(successbygivennode)=P(nodetransmits)×P(noothernodetransmitsin[t01,t0])×P(noothernodetransmitsin[t0,t0+1])=p×(1p)N1×(1p)N1=p×(1p)2(2N1)

    则有NN个结点,任意一个结点成功传送的概率为

    S=Np(1p)2(N1)

    如此,求得纯ALOHA的最大效率为1/(2e)≈0.18(改变p,使S最大化)。

    2.时隙ALOHA(Slotted ALOHA)

    image-20240831161815889

      假设一帧在t0处开始传输,则在本时隙中,其他结点如有传输,发生碰撞,则易损时间区长度为τ(ττ为一帧的传输时间)。

      一个给定结点成功传送的概率为

    S=p(1p)N1

      如果有NN个活跃结点,任意一个结点成功传送的概率为

    S=Np(1p)N1

    如此,求得时隙ALOHA的最大效率为1/e≈0.37(改变pp,使SS最大化)。即在有大量结点有帧要传输时,最多3737的时隙做有用的工作,信道传输速率不是R bps,而是0.37R bps。

      时隙ALOHA的最大效率是纯ALOHA的两倍。

    image-20240831161826119

    3.CSMA:载波侦听多路访问

      载波侦听多路访问(CSMA,Carrier Sense Multiple Access),一个结点在传输前先侦听信道。

    4.CSMA/CD:具有碰撞检测的载波侦听多路访问

      如下图,当B结点和D结点检测到碰撞时,立即停止继续发送。

    image-20240831161845450

    争用期:以太网的端到端往返时间2τ

      A结点给B结点发送帧流,最坏情况就是在即将发送到B结点时,发生碰撞,返回碰撞信息,最大用时即为2τ。

    最短帧:最短帧长度为2τR(R为信道速率)

      和上述同样的最坏情况中,从A结点发送帧,到碰撞信号返回到A结点花费2τ2τ的时间,在此期间A结点不能停止帧的发送,所以最短帧的长度为2τR。

      如此可以最大利用网络效率,而且不会产生二义型。如果发送完了这个帧,没有发生碰撞,则发生成功。

    image-20240831161859145

    CSMA/CD 效率

      CSMA/CD 效率:当有大量的活跃结点,且每个结点有大量的帧要发送时,帧在信道中无碰撞地传输的那部分时间在长期运行时间中所占的份额。

    efficiency=11+tprop/ttrans

    其中,tprop为两结点之间的最大传播时间;

       ttrans为传输一个最大长度的帧的时间。

    效率趋近1,则需

      CSMA/CD 比 ALOHA 简单、便宜、分布式。

    3.轮流协议(Taking-Turns protocol)

    1.轮询协议(Polling protocol)
    2.令牌传递协议(Token-Passing protocol)

    5.4局域网技术

    1.局域网模型

      局域网模型中,数据链路层分为LLC子层和MAC子层。

    2.局域网地址和ARP

    1.MAC 地址
    2.ARP:地址解析协议

      ARP(Address Resolution Protocol),地址解析协议

    1.同一子网内的地址解析 

    A想要发送数据报给B,但是B的MAC地址没有记录在A的ARP表中。

      ARP即插即用:ARP表自动建立,不需要系统管理员来配置

    2.不同子网的地址解析

      不同子网的A和B通过路由器R发送数据报,A只知道B的IP地址,不知道B的MAC地址

    Network_ARP

    3.以太网(Enternet)

    1.以太网物理拓扑
    2.以太网帧结构

    image-20240831162337135

    3.以太网技术
    1.二进制指数退避CSMA/CD算法

    Jam Signal:长48 bits48 bits,保证每个其他的发送方意识到冲突

    2.二进制指数退避算法(Binary Exponential Backoff Algorithm)

      一旦检测到冲突,为降低再冲突的概率,需要等待一个随机时间,二进制指数退避算法即解决时延时间的问题。

      时延的时间为端到端的往返时间2τ2τ的整数倍,即2τ×n(nn为整数)。kk为冲突次数collisions。

    1. 初始的冲突次数k=0;
    2. 每冲突一次,则k=k+1;
    3. 如果k<10,n从[0,2k)中随机选择一个整数(注意⚠️:右边为开区间),则延时2τ×n的时间;
    4. 如果k≥10,则n从0,1,2,3,…,1023中随机选择一个,延时2τ×n的时间。(k在10之后就不再增加时延的选择范围,防止延时过长)
    3.802.3以太网标准

    不同的以太网标准有:

      下图为100 Mbps以太网标准,其中100代表$100\ Mbps,TX、T2、T4代表媒体为不同的铜线,FX、SX、BX代表媒体为不同的光纤。

    image-20240831162351754

    4.交换机(Switch)

    1.集线器(Hub)

     

    2.以太网交换机概述

     

    3.交换机自学习
    4.交换机转发与过滤
    5.交换机 vs 路由器
     路由器交换机
    存储转发
    所在层网络层设备(检查网络层头部)链路层设备(检查链路层头部)
    转发表使用路由算法,IP地址使用泛洪,自学习,MAC地址

    5.VLAN:虚拟局域网

      交换机以太网存在缺点:缺乏广播隔离,导致易产生广播风暴。

      为解决上述问题,采用虚拟局域网VLAN。

      VLAN:在单个LAN内,将支持VLAN功能的交换机配置为多个虚拟LAN。

    1.基于端口的VLAN

      将单个LAN基于端口划分为多个VLAN。

    image-20240831162618375

    2.跨多个交换机的VLAN