计算机网络笔记

计算机网络笔记

Scroll Down

应用层协议

知识点

  • 传输层服务的基本原理
    • 复用/解复用
    • 可靠数据传输
    • 流量控制
    • 拥塞控制
  • Internet的传输层
    • UDP
    • TCP

UDP协议

  • 校验字段:将内容视为16位整数,将所有整数相加,进位加在和的后面,得到的值按位求反
  • 优点:
    1. 无需建立连接(减少延迟)
    2. 实现简单,无需维护连接状态
    3. 头部开销较小(udp8字节,tcp20字节)
    4. 没有拥塞控制:应用可更好地控制发送时间和速率

可靠数据传输协议

  • 什么是可靠:不错,不丢,不乱
  • 信道的不可靠特性决定了可靠数据传输协议(RDT)的复杂性

Rdt2.0:解决数据出错的问题

  • ACK/NAK校验和纠错

Rdt2.1:解决ACK/NAK出错的问题

  • 为ACK/NAK增加检验和,检错纠错
  • 采用ACK/NAK错误重传
  • 使用两个序列号0/1防止重复数据

Rdt2.2:优化

  • 可以采用ACK+序列号代替NAK,从而去掉NAK

Rdt3.0:解决数据丢失的问题

  • 等待一个合理时间,如果没收到ACK则重传

效率极低

流水机制和滑动窗口协议

  • 为了解决RDT效率低的问题
  • 允许发送方在收到ACK前连续发送多个分组
    • 需要更大的序列号范围
    • 发送方和/或接收方需要更大的储存空间以缓存分组
  • 滑动窗口协议:Sliding-window protocol

Go-Back-N协议

  • 分组头部包含k-bit序列号

  • 窗口尺寸为N,最多允许N个分组未确认

  • ACK(n):确认收到序列号n(包含n)的分组均已被正确接收

    • 可能重复收到ACK
  • 为空中的分组设置计时器(timer)

  • 超时Timeout(n)事件:重传序列号大于等于n,还未收到ACK的所有分组

    潜在存在资源浪费

  • ACK机制:发送拥有最高序列号、已被正确接收的分组的ACK

    • 可能产生重复ACK
    • 只需记住唯一的expectedseqnum(期待的序列号)
  • 乱序到达的分组:

    • 直接丢弃→接收方没有缓存
    • 重新确认序列号最大的、按序到达的分组

Selective Repeat协议

  • 接受对方每个分组单独进行确认
    • 设置缓存,缓存乱序到达的分组
  • 发送方只重传那些没收到ACK的分组
    • 为每个分组设置定时器
  • 发送方窗口
    • N个连续的序列号
    • 限制已发送且未确认的分组

TCP协议

概述

  • 点对点
    • 一个发送方,一个接收方
  • 可靠的、按序的字节流
  • 流水线机制
    • TCP拥塞控制和流量控制机制设置窗口尺寸
  • 发送方/接收方缓存
  • 全双工(full-duplex)
    • 同一连接中能够传输双向数据
  • 面向连接
    • 通信双方在发送数据之前必须建立链接
    • 连接状态只在连接的两端维护,在沿途的节点中并不维护状态
    • TCP连接包括:两台主机上的缓存、连接状态变量、socket等
  • 流量控制机制

结构

tcp头.png

序列号和ACK

  • 序列号

    • 序列号指的是segment中第一个字节的编号,而不是segment的编号
    • 建立TCP连接时,双方随即选择序列号
  • ACKs

    • 希望接收到的下一个字节的序号
    • 累计确认:该序列号之前的所有字节均已被正确接收到
  • 乱序到达的协议中没有规定,交给开发者实现

RTT和超时

  • sample RTT:测量从段发出去到收到ACK的时间
    • 忽略重传
  • sample RTT变化
    • 测量多个sample RTT,求平均值,形成RTT的估计值EsimatedRTT

TCPRTT超时设置.png

快速重传机制

  • 通过重复ACK检测分组丢失
    • sender会背靠背地发送多个分组
    • 如果分组丢失,可能会引发多个重复的ACK
  • 如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失
    • 快速重传:在定时器超时之前即进行重传

流量控制

  • 将剩余缓存空间大小放在头部发送给sender
  • 流量控制是不要让个体数据发送太快让对方处理不了

拥塞控制

  • 表现

    • 分组丢失(路由器缓存溢出)
    • 分组延迟过大(在路由器缓存中排队)
  • 拥塞控制是群体不要发送太快让网络承受不了

  • 方法:

    • 端到端拥塞控制:
      • 通过观察loss,delay等网络行为判断是否发生拥塞
      • 不需要显示地提供支持
      • TCP采用这种方式
    • 网络辅助的拥塞控制:
      • 路由器向发送方显式地反馈网络拥塞信息
      • 简单点拥塞指示(1bit):SNA,DECbit,TCP/IP ECN,ATM

TCP的拥塞控制

TCP拥塞控制.png

网络层

核心功能

  • 从发送主机向接收主机传送数据(segment)
  • 发送主机:将数据段封装到数据报(datagram)中
  • 接收主机:向传输层交付数据段(segment)
  • 每个主机和路由都运行网络层协议
  • 路由器校验所有穿越它的IP数据报的头部域
    • 决策如何处理IP数据报

转发与路由

  • 每个路由器维护一个转发表

    转发表.png

连接建立

  • 数据分组传输之前,两端主机需要首先建立虚拟/逻辑连接
    • 网络设备(如路由器)参与连接的建立
  • 网络层连接与传输层连接的对比:
    • 网络层连接:两个主机之间(路径上的路由器等网络设备参与其中)
    • 传输层连接:两个应用进程之间(对中间网络设备透明)

网络层连接模型

无连接服务(connection-less service)

  • 不事先为系列分组的传输确定传输路径
  • 每个分组独立确定传输路径
  • 不同分组可能传输路径不同
  • **数据报网络 ** (datagram network)

连接服务(connection service)

  • 首先为系列分组的传输确定从源到目的的经过的路径(建立链接)
  • 然后沿该路径(连接)传输系列分组
  • 系列分组传输路径相同
  • 传输结束后拆除连接
  • 虚电路网络 (virtual-circuit network)

虚电路网络

  • 一条从源主机到目的主机,类似于电路的路径(逻辑链接)
    • 分组交互
    • 每个分组的传输利用链路的全部带宽
    • 源到目的路径经过的网络层设备共同完成虚拟电路功能

通信过程

  • 呼叫建立(call setup)→数据传输→拆除呼叫
  • 每个分组携带虚电路标识(VCID),而不是目的的主机地址
  • 虚电路经过的每个网络设备(如路由器),维护每条经过它的虚电路状态连接
  • 链路、网络设备资源(如带宽、缓存等)可以面向VC经行预分配
    • 预分配资源=可预期服务性能
    • 如ATM仿真电路(CBR)

VC具体实现

  • 每条虚电路包括:
    1. 从源主机到目的主机的一条路径
    2. 虚电路号(VCID),沿路每段链路一个编号
    3. 沿路每个网络层设备(如路由器),利用转发表记录经过的每条虚电路
  • 沿某条虚电路传输分组,携带对应虚电路的VCID,而不是目的地址
  • 同一条VC,在每段链路上的VCID通常不同
    • 路由器转发分组时,依据转发表改写/替换虚电路号

VC转发表.png

虚电路信令协议(signaling protocols)

  • 用于VC的建立、维护与拆除
    • 路径选择
  • 应用于虚电路网络
    • 如ATM、帧中继(frame-relay)网络等
  • 目前Internet不采用

数据报网络

  • 网络层无连接
  • 每个分组携带目的的地址
  • 路由器根据分组的目的地地址转发分组
    • 基于路由协议/算法构建转发表
    • 检索转发表
    • 每个分组独立选路
  • 在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口(entry)

数据报网络与VC网络对比

Internet(数据报网络)

  • 计算机之间的数据交换
    • “弹性”服务,没有严格时间需求
  • 链路类型众多
    • 特点、性能各异
    • 统一服务困难

ATM(VC网络)

  • 电话网络演化而来
  • 核心业务是实时对话:
    • 严格的时间、可靠性需求
    • 需要有保障的服务
  • “哑(dumb)”端系统(非智能)
    • 电话机
    • 传真机