数据链路层

多路访问控制(MAC)协议

两类链路:

  • 点对点链路:拨号接入的PPP,以太网交换机与主机间的点对点链路
  • 广播链路(共享介质):早期的总线以太网,HFC的上行链路,802.11无限局域网

单一共享广播信道

两个或两个以上节点同时传输:干扰,产生冲突,导致接受失败

多路访问控制协议(multiple access control protocol)

  • 采用分布式算法决定节点如何共享信道,即决策节点何时可以传输数据
  • 必须基于信道本身,通信信道共享协调信息

MAC协议分类

  1. 信道划分 (channel partitioning) MAC协议
    • 多路复用技术
    • TDMA,FDMA,CDMA,WDMA等
  2. 随机访问 (random access) MAC协议
    • 信道不划分,允许冲突
    • 采用冲突“恢复”机制
  3. 轮转 (taking turns) MAC协议
    • 节点轮流使用信道(保证节点在使用信道时不冲突,同时在使用的时候用的是信道的全部带宽)

信道划分MAC协议

TDMA: time division multiple access

  1. “周期性”接入信道
  2. 每个站点在每个周期占用固定长度的时隙(这里的长度是指分组传输时间)
  3. 未用的时隙空闲(idle)
  4. 例如,6-slot的LAN,1、3、4传输分组,2、5、6空闲

FDMA: frequency division multiple access

  1. 信道频谱划分为若干频带(frequency bands)
  2. 每个站点分配一个固定的频带
  3. 没有传输数据的频带空闲
  4. 例如,6站点LAN,1、3、4频带传输数据,2、5、6频带空闲

随机访问MAC协议

当节点要发送分组时,利用信道全部数据速率R发送分组,没有事先的节点间协调。

会发生冲突。

随机访问MAC协议需要定义:如何检测冲突、如何从冲突中恢复(通过延迟重传)

典型的随机访问MAC协议:

  • 时隙(sloted)ALOHA
  • ALOHA
  • CSMA, CSMA/CD, CSMA/CA

时隙ALOHA协议

假定:

  • 所有帧大小相同
  • 时间被划分为等长的时隙(每个时隙可以传输1个帧)
  • 节点只能在时隙开始时刻发送帧
  • 节点间时钟同步
  • 如果2个及以上的节点在同一时隙发送帧,则检测到冲突

运行:

  • 当节点有新的帧时,在下一个时隙(slot)发送
  • 如果无冲突:该节点可以在下一个时隙继续发送新的帧
  • 如果冲突,该节点在下一个时隙以概率p重传该帧,直至成功

优点:

  • 单个节点活动时,可以连续以信道全部速率传输数据
  • 高度分散化:只需同步时隙
  • 简单

缺点:

  • 冲突,浪费时隙
  • 时钟同步
  • 空闲时隙
  • 节点也许能以远小于分组传输的时间检测到冲突

非时隙ALOHA

更加简单,无需同步

当有新的帧生成时,立即发送

因此比时隙ALOHA协议更差。

CSMA协议

载波监听多路访问协议CSMA(carrier sense multiple access)

发送帧之前,监听信道(载波):

  • 信道空闲:发送完整帧
  • 信道忙:推迟发送

    • 1-坚持CSMA
    • 非坚持CSMA
    • P-坚持CSMA
  • 冲突可能仍然发生:存在信号传播延迟

CSMA/CD协议

CSMA/CD: CSMA with Collision Detection

  • 短时间内可以检测到冲突
  • 冲突后传输中止,减少信道浪费

冲突检测:

  • 有线局域网易于实现:测量信号强度,比较发射信号与接收信号
  • 无线局域网很难实现:接收信号强度淹没在本地发射信号强度下

网络带宽:R bps

数据帧最小长度:$L_min$ (bits)

信号传播速度:V(m/s)

“边发边听,不发不听”

主机A、B之间的距离是$d_{max}$,A向B发送数据帧,快到达B时,B又向A发送了一个数据帧,两者在靠近B的地方相遇,于是发生了冲突。A发送的数据帧到达B时,B检测到了冲突,但此时B发送的数据帧还未到达A,因此A还没有检测出冲突。最后,两者都检测到冲突时,用了$2d_{max}/V$的时间。

满足:$L/R >= 2d_{max}/V$

那么:

$L_{min}/R >= 2d_{max}/V$

$L_{min}/R = RTT_{max}$

$t_{prop}$趋近于0或$t_{trans}$趋近于∞时,效率趋近于1.

远优于ALOHA,并且简单、分散。

ARP协议

MAC地址

32位IP地址:

  • 接口的网络层地址
  • 用于标识网络层(第3层)分组,支持分组转发

MAC地址(或称LAN地址,物理地址,以太网地址)

  • 作用:用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其他接口
  • 48位MAC地址(用于大部分LANs),固化在网卡的ROM中,有时也可以软件设置
  • 将48bits分为6个字节,16进制表示,e.g.: 1A-2F-BB-76-09-AD

局域网中的每块网卡都有一个唯一的MAC地址。

MAC地址由IEEE统一管理与分配。

网卡生产商购买MAC地址空间(前24比特),后24比特生产商依次分配。

类比:

  • MAC地址:身份证号
  • IP地址:邮政地址
  • MAC地址是“平面”地址,可”携带“,可以从一个LAN移到另一个LAN
  • IP地址是层次地址,不可“携带”,IP地址依赖于节点连接到哪个子网

ARP:地址解析协议

在同一个LAN内,如何在已知目的接口的IP地址前提下确定其MAC地址?

ARP表:LAN中每个IP节点(主机、路由器)维护一个表

  • 存储某些LAN节点的IP/MAC地址映射关系。如:
  • 存活时间TTL(time to live):经过这个时间后,该映射关系会被遗弃(典型时间是20min)

ARP协议:同一局域网内

  • A想要向同一局域网中的B发送数据报,但B的MAC地址不在A的ARP表中
  • A广播ARP查询分组,其中包含B的IP地址。LAN中所有节点都会接收到ARP查询。
  • B也接收到了,IP地址匹配成功,B向A应答B的MAC地址。利用单播帧向A发送应答。
  • A在自己的ARP表中缓存B的IP-MAC地址对,直至超时。超时后,再次刷新。
  • ARP是“即插即用”协议,节点自主创建ARP表,无需干预。

网络层

网络层服务

从发送主机向接收主机传送数据段

发送主机:将数据段封装到数据报中。

接收主机:向传输层交付数据段。

每个主机和路由器都运行网络层协议。

路由器检验所有穿越它的IP数据报的头部域。

网络层核心功能

转发与路由

转发(forwarding):将分组从路由器的输入端口转移到合适的输出端口。

每个路由器维护一张转发表,转发表确定本路由器如何转发分组。

转发表的内容:地址-输出链路,如0100-3, 0101-2, 0111-2, 1001-1.

取出收到的数据报的地址信息,然后查转发表得到输出链路。

路由(routing):确定分组从源到目的经过的路径。

如何得到路由信息?

网络层设备都会运行一些路由协议,或路由算法(routing algorithms),根据路由算法确定通过网络的端到端路径。

连接的建立

数据分组传输之前两端主机需要首先建立虚拟/逻辑连接,网络设备(如路由器)参与连接的建立。

网络层连接与传输层连接的对比:

  • 网络层连接:两个主机之间的连接,并且在路径上的每个网络层设备都要参与建立连接。
  • 传输层连接:两个应用进程之间的连接(端到端的连接,对中间网络设备透明)。

网络层为发送端(主机)到接收端(主机)的数据报传送”通道(channel)”提供怎样的服务模型(service model)?

不同的网络架构(Network Architecture)提供的服务模型是不一样的。例如Internet提供的是best effort服务模型,不保障Bandwidth, Loss, Order或Timing,通过数据是否丢失来判断拥塞(congestion)。ATM的服务模型有CBR,VBR,ABR,UBR。

网络层服务模型

  • 无连接服务(connection-less service):
    • 不事先为系列分组的传输确定传输路径
    • 每个分组独立确定传输路径
    • 不同分组可能传输路径不同
    • 数据报网络(datagram network)
  • 连接服务(connection service):
    • 首先为系列分组的传输确定从源到目的经过的路径(建立连接)
    • 然后沿该路径(连接)传输系列分组
    • 系列分组传输路径相同
    • 分组传输顺序可以保证
    • 传输结束后拆除连接
    • 虚电路网络(virtual-circuit network)

虚电路网络和数据报网络

虚电路网络

数据报网络和虚电路网络是典型的两类分组交换网络

数据报网络提供网络层无连接服务。

虚电路网络提供网络层连接服务。

类似于传输层的无连接服务(UDP)和面向连接服务(TCP),但是网络层服务:

  1. 是主机到主机的服务
  2. 网络核心实现(传输层是端到端实现)

虚电路:一条从源主机到目的主机,类似于电路的路径(逻辑连接)。

  • 分组交换
  • 每个分组的传输利用链路的全部带宽
  • 源到目的路径经过的网络层设备共同完成虚电路功能

  • 通信过程:呼叫建立(call setup)——数据传输——拆除呼叫

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

每条虚电路包括:

  1. 从源主机到目的主机到一条路径

  2. 虚电路号(VCID),沿路每段链路一个编号

    链路带宽越大,允许建立的虚电路的数量就越大。

    同一条虚电路在每一段链路上的VCID可能是不一样的。

  3. 沿路每个网络层设备(如路由器),利用转发表记录经过的每条虚电路。

沿某条虚电路传输的分组,携带对应虚电路的VCID,而不是目的地址。

同一条VC,在每段链路上的VCID通常不同:

  • 路由器转发分组时依据转发表改写/替换虚电路号

虚电路信令协议(signaling protocols)

用于VC的建立、维护与拆除:路径选择

应用于虚电路网络:如ATM、帧中继(frame-relay)网络等

目前的Internet不采用。

初识呼叫——呼叫到达——接受呼叫——呼叫建立——数据流开始——接收数据

通信结束后,也通过虚电路信令协议进行呼叫的拆除。

数据报网络

网络层无连接

每个分组携带目的地址

路由器根据分组的目的地址转发分组:

  • 基于路由协议/算法构建转发表
  • 检索转发表
  • 每个分组独立选路
  • 每个分组走的路径可能不一样,因为如果在传输过程中路由器更新了转发表,那么后面的分组就会走新的路径

数据报中含有目的主机的IP地址。但是IP地址是32位的二进制数,一共有2^32种不同情况,严重降低了传输效率。解决方法是:转发表中的目的地址不是一个明确的地址,而是一个地址范围。这样就将许多具有共同列表地址的转发表进行了聚合。

目的地址范围的匹配采用最长前缀匹配优先(在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口[entry])。

Internet(数据报网络)

  • 计算机之间的数据交换:”弹性”服务,没有严格时间需求。
  • 链路类型众多:特点、性能各异,统一服务困难。
  • “智能”端系统:可以自适应、性能控制、差错恢复
  • 简化网络,复杂”边缘”

ATM(VC网络)

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

IPv4协议

Internet网络层

主要功能就是路由和转发。

主机、路由器网络层主要功能:

  • 路由协议:路径选择,如RIP,OSPF,BGP
  • 转发表(路由表)
  • IP协议:寻址规约(conventions),数据报(分组)格式,分组处理规约
  • ICMP协议(互联网控制报文协议):差错报告,路由器”信令协议”
  • 实现IP协议,通常也要实现ICMP协议。后者可以看做是前者的一个伴随协议。

IP数据报(分组)格式

IP数据报格式:首部 + 数据(e.g. TCP, UDP段)

数据报长度是32位,即从0到31位。

首部(固定部分5行、可变部分1行)

数据(1行)

首部分为固定部分和可变部分。

固定部分:

版本号(4位,0~3),首部长度,服务类型(TOS),总长度

标识,标识位,片偏移

生存时间(TTL),协议,首部检验和

源IP地址

目的IP地址

可变部分:

选项字段(长度可变),填充

  1. 版本号:4位,如果是IPv4就是4,如果是IPv6就是6。

  2. 首部长度:4位。是IP分组的首部长度。

    • 以4字节为单位(1行32比特,刚好4字节)
    • IP固定部分首部长度为5*4=20字节
    • 最典型的,例如是IPv4协议,那么版本号是0100(4d),首部长度0101(5d)。
  3. 服务类型(TOS):8位,指示期望获得哪种类型的服务。
    • 1998年这个字段改名为区分服务
    • 只有在网络提供区分服务(DiffServ)时使用
    • 一般情况下不使用,通常IP分组的该字段(第2字节)的值为00H
  4. 总长度:16位,是IP分组的总字节数(首部+数据)
    • 最大IP分组的总长度:65535B
    • 最小的IP分组首部:20B(可变部分为0)
    • IP分组可以封装的最大数据:65535-20=65515B
    • 当然在实际中不会达到最大数据,因为一定会将它切分的。
  5. 生存时间(TTL):8位,是IP分组在网络中可以通过的路由器数(或跳步数)
    • 路由器转发一次分组,TTL减一
    • 如果TTL=0,则路由器丢弃该IP分组
  6. 协议:8位,指示IP分组封装的是哪个协议的数据包
    • 实现复用/分解
    • 6为TCP,表示封装的是TCP段;17为UDP,表示封装的是UDP数据报
  7. 首部校验和:16位,实现对IP分组首部的差错检测
    • 计算校验和时,该字段置为全0
    • 采用反码算数运算求和,和的反码作为首部校验和字段
    • 逐跳计算、逐跳检验
  8. 源IP地址、目的IP地址字段各占32位

IP分片

网络链路存在MTU(最大传输单元)——链路层数据可封装数据的上限。不同链路的MTU不同。

大IP分组向较小MTU链路转发时,可以被”分片”(fragmented)。

IP分片到达目的主机后进行”重组”(reassembled)。

路由器对IP分组只分片不重组。

如果此路由器不让分片,那么就把这个IP分组丢掉,一般地会再发一个ICMP的分组(具体是怎样再查查,这里只是粗略记录)。

IP首部中的总长度、标识、标识位和片偏移用来标识分片以及确定分片的相对顺序。

标识字段:16位,用于标识一个IP分组

  • IP协议利用一个计数器,每产生一个IP分组,计数器就加一,利用此时计数器的值和其他一些信息唯一标识该IP分组

标识位:3位

IP编址

接口:主机/路由器与物理链路的连接

  • 实现网络层功能
  • 路由器通常有多个接口
  • 主机通常只有一个或两个接口(有线的以太网接口,无限的802.11接口)

IP地址:32比特(IPv4)编号用于标识主机、路由器的接口

一般用点分十进制的方式表示。

11011111 00000001 00000001 00000001 = 233.1.1.1

一个IP地址唯一标识一个接口。

IP地址与每个接口关联。

IP子网(subnets)

IP地址:

  • 网络号(NetID) - 高位比特
  • 主机号(HostID) - 低位比特

NetID HostID

233.1.1 .1

相同的网络号构成IP子网。

IP子网:

  • IP地址具有相同网络号的设备接口
  • 不跨越路由器(第三及以上层网络设备)可以彼此物理联通的接口

“有类”编址:

A类地址,50%:NetID(8位) + HostID(24位)

0.0.0.0 ~ 127.255.255.255

B类地址,25%:NetID(16位) + HostID(16位)

128.0.0.1 ~ 191.255.255.255

C类地址,12.5%:NetID(24位) + HostID(8位)

192.0.0.0 ~ 223.255.255.255

D类地址,6.25%:32位,1110

224.0.0.0~239.255.255.255

E类地址,6.25%:32位,1111

240.0.0.0~255.255.255.255

IP子网划分与子网掩码

子网划分:

IP地址——网络号(NetID) + 子网号(SubID) + 主机号(HostID)

就是将刚才的主机号划分为了:子网号(SubID) + 主机号(HostID)。即 子网号是原主机号的部分比特。

子网划分定义:Internet组织机构定义了五种IP地址,有A、B、C三类地址。A类网络有126个,每个A类网络可能有16777214台主机,它们处于同一广播域。而在同一广播域中有这么多节点是不可能的,网络会因为广播通信而饱和,结果造成16777214个地址大部分没有分配出去。可以把基于每类的IP网络进一步分成更小的网络,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是借用基于每类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。

比如,当一组IP地址指定给一个公司时,公司可能将该网络“分割成”小的网络,每个部门一个。这样,技术部门和管理部门都可以有属于它们的小网络。通过划分子网,我们可以按照我们的需要将网络分割成小网络。这样也有助于降低流量和隐藏网络的复杂性。

子网掩码:

形如IP地址:32位,点分十进制形式

取值:NetID, SubID位全取1,HostID全取0

例如:

A网的默认子网掩码为:255.0.0.0

B网的默认子网掩码为:255.255.0.0

C网的默认子网掩码为:255.255.255.0

借用3比特划分子网的B网的子网掩码为:255.255.224.0 (224就是11100000)

子网地址+子网掩码 —— 准确确定子网大小

将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址。

CIDR与路由聚集

无类域间路由(CIDR: Classless InterDomain Routing)

  • 消除传统的A、B、C类地址界限:将NetID和SubID合在一起变成Network Prefix(Prefix),即统称为网络前缀,并且可以任意长度

  • 融合子网地址与子网掩码,方便子网划分

    无类地址格式:a.b.c.d/x,其中x为前缀长度

11001000 00010111 00010000 00000000

前面是前缀(长为8+8+7=23),后面是主机号HostID。

写成CIDR地址形式就是200.23.16.0/23。

优势

  • 提高IPv4地址空间分配效率
  • 提高路由效率
    • 将多个子网聚合为一个较大的子网
    • 构成超网
    • 路由聚合(route aggregation)

DHCP协议

如何获得IP地址?

  • “硬编码”:静态配置

  • 动态主机配置协议 - DHCP:Dynamic Host Configuration Protocol

    从服务器动态获取:IP地址、子网掩码、默认网关地址、DNS服务器名称与IP地址

    “即插即用”

    允许地址重用

    支持在用地址续租

    支持移动用户加入网络

动态主机配置协议DHCP

  1. 主机广播”DHCP discover”(发现报文)等待是否有DHCP服务器响应
  2. DHCP服务器利用”DHCP offer”(提供报文)进行响应,告诉客户端自己可以提供的一个IP地址
  3. 主机请求IP地址:客户端向服务器发送”DHCP request”(请求报文)表示愿意接受这个IP地址同时请求服务器将它真正分配给自己
  4. DHCP服务器分配IP地址:服务器向客户端发送”DHCP ack”(确认报文)表示确认分配

DHCP协议在应用层实现:

  • 请求报文封装到UDP数据报中
  • IP广播
  • 链路层广播(例如,以太网广播)

DCHP服务器内建于服务器中。

DHCP服务器构造ACK报文,包括分配给客户的IP地址、子网掩码、默认网关、DNS服务器地址。

NAT网络地址转换

本地网络内通信的IP数据报的源与目的IP地址均在子网10.0.0/24(显然这是一个私有地址,比如说是家庭网络)内。

所有离开本地网络去往Internet的数据报的源IP地址需要替换为相同的NAT IP地址(例如138.76.29.7)以及不同的端口号。

动机:

  • 只需从ISP申请一个IP地址,因此面临IPv4地址耗尽
  • 本地网络设备IP地址的变更,无需通告外界网络
  • 变更ISP时,无需修改内部网络设备IP地址
  • 内部网络设备对外界网络不可见,即不可直接寻址

实现:

  • 替换:利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)
  • 记录:将每对(NAT IP地址,新端口号)与(源IP地址,源端口号)的替换信息存储到NAT转换表中
  • 根据NAT转换表,用(源IP地址,源端口号)替换每个进入内网IP数据报的(目的IP地址,目的端口号)

NAT转换表包含:WAN端地址、LAN端地址。

NAT穿透问题:外部设备期望连接内网地址的服务器

方法1: 静态配置NAT(转换表),将特定端口的连接请求转发给服务器。

方法2: 利用UPnP(Universal Plug and Play)互联网网关设备协议(IGD-Internet Gateway Device)自动配置:学习到NAT公共IP地址,在NAT转换表中增删端口映射。

方法3: 中继(如Skype)

互联网控制报文协议ICMP

Internet Control Message Protocol支持主机或路由器

差错或异常报告

网络探询

两类ICMP报文:

差错报文

IPv6

最初动机:32位IPv4地址空间已分配殆尽

其他动机:改进首部格式:快速处理/转发数据报,支持QoS

IPv6数据报格式:

  • 固定长度的40字节基本首部
  • 不允许分片

虽然首部没有可选项、是固定长度,但是有可选的扩展首部。

IPv6数据报格式:

基本首部,扩展首部1,扩展首部2,…,扩展首部N,数据部分(例如TCP段)

路由算法

路由算法(协议)确定最佳路径,转发表确定在本路由器如何转发分组。

路由算法分类

静态路由&动态路由

静态路由:

  • 手工配置
  • 路由更新慢
  • 优先级高

动态路由:

  • 路由更新快
    • 定期更新
    • 及时响应链路费用或网络拓扑结构变化
  • 由路由算法计算出来的

全局信息&分散信息

全局信息:

  • 所有路由器掌握完整的网络拓扑和链路费用信息。
  • 链路状态(LS)路由算法

分散信息:

  • 路由器只掌握物理相连的邻居以及链路费用。
  • 距离向量(DV)路由算法

链路状态路由算法

Dijkstra算法

  • c(x, y): 结点x到结点y的链路费用;如果x和y不直接相连,则为∞。

  • D(v): 从源到目的v的当前路径费用值。

  • p(v): 沿从源到v的当前路径,v的前序结点集合。
  • N’: 已经找到最小费用路径的结点集合。
1
2
3
4
5
6
7
8
9
10
11
12
13
初始化:
N'= {u}
for 所有结点v
if v nextTo u
D(v) = c(u, v)
else
D(v) = ∞

循环:
找出不在N'中的结点w,使得D(w)最小
将w加入N'
更新w的所有不在N'中的邻居v的D(v): D(v) = min{c(v, w)+D(w), D(v)}
until 所有结点都在N'中

但是存在振荡现象。

距离向量路由算法

Bellman-Ford方程(动态规划)

  • Dx(y) := 从x到y最短路径的费用(距离)
  • Dx(y) = min{c(x, v) + Dv(y)}

异步迭代:

  • 引发每次局部迭代的因素:
    • 局部链路费用改变
    • 来自邻居的DV更新

分布式:

  • 每个结点只当DV变化时才通告给邻居

无穷计数问题

层次路由

将任意规模网络抽象为一个图计算路由——过于理想化。

标识所有路由器

“扁平”网络

网络规模巨大时,交换量会占用所有网络带宽。

聚合路由器为一个区域:自治系统AS

Internet路由

AS内部路由:

  • Internet采用层次路由
  • AS内部路由协议也称为内部网络协议IGP(interior gateway protocol)
  • 最常见的AS内部路由协议:
    • 路由信息协议:RIP(Routing Information Protocol)
    • 开放最短路径优先:OSPF(Open Shortest Path First)
    • 内部网关路由协议:IGRP(Interior Gateway Routing Protocol)
      • Cisco私有协议

RIP

早于1982年随BSD- UNIX操作系统发布

跳数指从源端口到达目的端口所经过的路由个数,每经过一个路由器,跳数加1 。数据包经过一台路由器就是一跳,经过的路由器数量,就是它的跳数。

距离向量路由算法:

  • 距离度量:跳步数(max = 15hops),每条链路1个跳步
  • 每隔30秒,邻居之间交换一次DV,成为通告(advertisement)
  • 每次通告:最多25个目的子网(IP地址形式)

LINK

OSPF(Open Shortest Path First)协议:

  • 开放:公众可用
  • 采用链路状态路由算法

Don’t let anyone rush yourself with their timelines.

传输层

传输层服务的基本理论和基本机制:

  • 多路复用/分用
  • 可靠数据传输机制
  • 流量控制机制
  • 拥塞控制机制

Internet的传输层协议

  • UDP: 无连接传输服务
  • TCP: 面向连接的传输服务
  • TCP拥塞控制

主机上运行着五层Internet协议栈,有应用层、传输层、网络层、数据链路层和物理层;路由器上只有三层协议栈,即网络层及以上的是没有的。

传输层协议为运行在不同host上的进程提供了一种逻辑通信机制

逻辑通信机制,就是指进程之间仿佛是直接连接的,不需要关心有多远的物理距离、经过了多少个路由器、使用的是什么物理媒介。

端系统运行传输层协议:

  • 发送方:将应用递交的消息分成一个或多个的segment,并向下传给网络层。
  • 接收方:将接收到的segment组装成消息,并向上交给应用层。

传输层可以为应用提供多种协议:

  • Internet上的TCP
  • Internet上的UDP

比较

  • 网络层:提供主机之间的逻辑通信机制

  • 传输层:提供应用进程之间的逻辑通信机制

    — 位于网络层之上(IP),依赖于网络层服务,对网络层进行(可能的)增强

Internet传输层协议

可靠、按序的交付服务(TCP)

  • 拥塞控制
  • 流量控制
  • 连接建立

不可靠的交付服务(UDP)

  • 基于”尽力而为 (best-effort) “的网络层,没有做(可靠性方面的)扩展

两种服务均不提供:延迟、带宽

多路复用和多路分用

为什么要多路复用/分用?

  • 如果某层的一个协议对应直接上层的多个协议/实体,则需要复用/分用。

socket是应用层和传输层之间的”门”。

接收端进行多路分用:传输层依据头部信息将收到的segment交给正确的socket,即不同的进程。

发送端进行多路复用:从多个socket接收数据,为每块数据封装上头部信息,生成segment,交给网络层。

分用——如何工作?

主机接收到 IP 数据报(datagram)

  • 每个数据报携带源 IP 地址、目的 IP 地址
  • 每个数据报携带一个传输层的段(segment)
  • 每个段携带源端口号和目的端口号

TCP/UDP 段格式:

|——————- 32 bits ——————-|

| 源端口号 | 目的端口号 |

| 其他头部信息 |

| 应用数据 (message) |

主机收到segment后,传输层协议提取IP地址和端口号信息,将segment导向相应的socket。(网络层是不关心端口号信息的)TCP会做更多的处理。

无连接分用

UDP的socket用二元组标识(目的IP地址,目的端口号)

主机收到UDP段后:

  • 检查段中的目的端口号
  • 将UDP段导向绑定在该端口号的socket

来自不同源IP地址和/或源端口号的IP数据包被导向同一个socket。

面向连接分用

TCP的socket用四元组标识:

  • 源IP地址
  • 源端口号
  • 目的IP地址
  • 目的端口号

接收端利用所有的4个值将segment导向合适的socket。

服务器可能同时支持多个TCP socket。每个socket用自己的四元组标识。

web服务器为每个客户端开不同的socket。

也就是说,例如host B中的进程1向host A发起TCP连接,SP(source port)是9157,DP是80;进程2也发起TCP连接,SP是5775,DP是80;两个进程的S-IP和D-IP相同,都是B和A。但是socket不同,服务器为每个客户端开不同的socket。进程1对应socket1,进程2对应socket2。服务器上的这两个socket的SP相同,都是80,S-IP和D-IP也分别相同,但是DP不同,分别是5775和9157.

UDP

User Datagram Protocol [ RFC 768 ]

基于Internet IP协议:

  • 复用/分用
  • 简单的错误校验(因为路由器在存储转发的过程中也可能会出错)

UDP提供的是”Best effort”服务,所以会丢失、非按序到达。

每个UDP段的处理独立于其他段。

UDP为什么存在?

  • 无需建立连接(减少延迟,因此DNS使用的是UDP)
  • 实现简单:无需维护连接状态
  • 头部开销少(UDP头部8个字节,而TCP是20个字节)
  • 没有拥塞控制:应用可以更好地控制发送时间和速率(TCP有拥塞控制,会根据实际情况自动调整发送时间和速率)

常用于流媒体应用:容忍丢失、速率敏感

UDP还用于:DNS,SNMP

在UDP上是可以实现可靠数据传输的——在应用层增加可靠性机制、应用特定的错误恢复机制(即在应用层实现,因此对应用层开发人员来说难度较大)

UDP segment format:

[32bits]

| sp | dp |

| length | checksum |

| Application data (message)|

length是UDP段的长度(包含头部),checksum是校验和(实现错误校验功能)。

UDP checksum

目的:检测UDP段在传输过程中是否发生错误(如位翻转)。

发生错误是因为传输是端到端的,可能经历了多种物理媒介、多个路由器等等,中途很有可能发生错误。

发送方

  • 将段的内容视为16-bit整数
  • 校验和计算:计算所有整数的和,进位单独取出来与剩下的16位相加,将得到的值按位求反,得到校验和
  • 发送方将校验和放入校验和字段

接收方

  • 计算所收到的校验和
  • 将其与校验和字段进行对比,若不相等则检测出错误,若相等则没有检测出错误,但仍然可能有错误

可靠数据传输原理

可靠——不错、不丢、不乱

可靠数据传输协议:

  • 可靠数据传输对应用层、传输层、链路层都很重要
  • 网络top-10问题
  • 信道的不可靠特性决定了可靠数据传输协议 (rdt) 的复杂性

可靠数据传输协议基本结构:接口

rdt_send(): 被上层应用调用,将数据交给rdt (reliable data transfer protocol) 以发送给对方。即发送方向上地响应这样一个rdt_send的调用。

udt_send(): 被rdt调用,在不可靠信道(unreliable channel)上向接收方传输数据。(所谓的不可靠信道,实际上就是我们所说的网络层的IP协议)

rdt_rcv(): 当数据包到达接收方信道时被调用。这一调用就会触发接收方的rdt协议对数据包进行处理。

deliver_data(): 被rdt调用,向上层应用交付数据。

可以看出,rdt_send()和deliver_send()是单向的。这是因为应用层只需要发数据和收数据,不关心数据是怎么处理和传输的。剩下的所有工作都由下面的层完成。

可靠数据传输协议

渐进的设计可靠数据传输协议的发送方和接收方,只考虑单向数据传输,但控制信息双向流动。利用有限状态机(Finite State Machine, FSM)刻画传输协议。

协议:(逐步贴近真实情况)

Rdt 1.0: 可靠信道上的可靠数据传输

假设底层信道完全可靠:不会发生位错误,不会丢弃分组

发送方和接收方的FSM独立(因为这是一个可靠信道!发送方和接收方之间就不需要什么交互,全部交给协议处理就行了)

Rdt 2.0: 产生位错误的信道

假设分组不会丢失,只是产生了位错误。

首先,接收方需要知道分组是否出错。如果错了,就要想办法恢复/重传。

检测出错已解决——底层信道可能翻转分组中的位(bit):利用校验和检测位错误

如何从错误中恢复?这就需要引入新的控制消息来标识——

  • 确认机制(Acknowledgements, ACK):接收方显示地告知发送方分组已正确接收。
  • NAK:接收方显示地告知发送方分组有错误。
  • 发送方收到NAK后,重传分组。

基于这种重传机制的rdt协议称为ARQ(Automatic Repeat Request)协议。

Rdt 2.0中引入的新机制:

  • 差错检测
  • 接收方反馈控制消息:ACK/NAK
  • 重传

但是有一个致命缺陷:如果ACK/NAK的传输出错怎么办?这里使用的是停-等协议,即stop and wait — sender sends one packet, then waits for receiver response.

what happens if ACK/NAK corrupted?

  • sender doesn’t know what happened at receiver!

  • can’t just retransmit: possible duplicate

Handling duplicates:

  • sender retransmits current pkt if ACK/NAK corrupted

  • sender adds sequence number to each pkt

  • receiver discards (doesn’t deliver up) duplicate pkt

Rdt 2.1 发送方应对ACK/NAK破坏

增加了两个序列号0和1。

对于发送方,有等待上层调用的状态和等待ACK/NAK的状态这两种,因此总状态是翻倍了的,即两个0两个1。(等待上层调用序列号0分组的状态,等待序列号0的ACK/NAK的状态,等待上层调用序列号1分组的状态,等待序列号1的ACK/NAK的状态)翻倍是因为必须记住当前分组的序列号。

Rdt 2.2: 无NAK消息协议

接收方通过ACK告知最后一个被正确接收的分组,在ACK中显示地加入被确认分组的序列号。

发送方接收到重复ACK后,重发当前分组。

停等操作使得Rdt 3.0的性能很差。

流水线协议

允许发送方在收到ACK之前连续发送多个分组。这就需要更大的序列号范围,发送方和接收方需要更大的存储空间以缓存分组

滑动窗口协议 Sliding-window protocol

窗口:允许使用的序列号范围

窗口尺寸为N,表示最多有N个等待确认的消息。

滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动

滑动窗口协议:GBN,SR

GBN协议 (Go-Back-N)

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

采用累积确认的机制

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

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

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

  • 可能产生重复的ACK
  • 只需要记住唯一的expectedseqnum

乱序到达的分组:

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

SR (Selective Repeat)

接收方对每个分组单独进行确认

  • 设置缓存机制,缓存乱序到达的分组

发送方只重传那些没收到ACK的分组

  • 为每个分组设置定时器

发送方窗口

  • N个连续的序列号
  • 限制已发送且未确认的分组

序列号空间大小与窗口尺寸满足的关系:$N_S+N_R\leq2^k$.

TCP

  • 点对点:一个发送方,一个接收方

  • 可靠的、按序的字节流

  • 流水线机制:TCP拥塞控制和流量控制机制设置窗口尺寸

  • 发送方/接收方缓存

  • 全双工 (full-duplex):统一连接中能够传输双向数据流

  • 面向连接:

    通信双方在发送数据之前必须建立连接

    连接状态只在连接的两端中维护,在沿途节点中并不维护状态

    TCP连接包括:两台主机上的缓存、连接状态变量、socket等

  • 流量控制机制

序列号

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

ACKs

  • 希望接收到的下一个字节的序列号
  • 累积确认:该序列号之前的所有字节均已被正确接收到

接收方如何处理乱序到达的segment?

  • TCP规范中没有规定,由TCP的实现者做出决策

TCP可靠数据传输

  • TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务

  • 流水线机制

  • 累积确认

  • TCP使用单一重传定时器

  • 触发重传的事件:超时,收到重复ACK
  • 渐进式:暂不考虑重复ACK,暂不考虑流量控制,暂不考虑拥塞控制

RTT和超时

如何设置定时器的超时时间?

  • 大于RTT——但是RTT是变化的
  • 过短:不必要的重传
  • 过长:对段丢失时间反应慢

如何估计RTT?

  • SampleRTT:测量从段发出去到收到ACK的时间

  • 忽略重传

  • SampleRTT变化,就测量多个取平均值

  • 指数加权移动平均:

    EstimatedRTT=(1-alpha)*EstimatedRTT+alpha*SampleRTT

    典型值:0.125

TCP发送方要处理的事件

从应用层收到数据:

  • 创建segment
  • 序列号是segment第一个字节的编号
  • 开启计时器
  • 设置超时时间TimeoutInterval

超时:

  • 重传引起超时的segment
  • 重启定时器

收到ACK:

如果确认此前未确认的segment

  • 更新SendBase
  • 如果窗口中还有未被确认的分组,重新启动定时器

快速重传机制

TCP实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大,因此重发丢失的分组之前要等待很长时间。

通过重复ACK检测分组丢失

如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失,sender重传该分组。

快速重传:在定时器超时之前即进行重传

TCP流量控制

接收方为TCP连接分配buffer。

流量控制 (flow control):发送方不会传输的太多、太快以至于淹没接收方(buffer溢出)。

TCP连接管理

TCP sender和receiver在传输数据前需要建立连接

client是连接发起者,server等待客户连接请求。

Three way handshake

  1. client host sends TCP SYN segment to server

    specifies initial seq

    no data

  2. server host receives SYN, replies with SYNACK segment

    server allocates buffers

    specifies server initial seq

  3. client receives SYNACK, replies with ACK segment, which may contain data

TCP关闭——4次挥手

client向server发送FIN

server收到FIN,回复ACK,关闭连接,发送FIN

client收到FIN,回复ACK

  • 进入等待状态,timeout了会重复发送ACK

server收到ACK,连接关闭

拥塞控制原理

拥塞(congestion)

表现:

  • 分组丢失(路由器缓存溢出)
  • 分组延迟过大(在路由器缓存中排队)

拥塞控制的方法

端到端的拥塞控制:

  • 网络层不需要显式地提供支持
  • 端系统通过观察loss, delay等网络行为判断是否发生拥塞
  • TCP采取这种方法

网络辅助的拥塞控制:

  • 路由器向发送方显示地反馈网络拥塞信息
  • 简单的拥塞只是说

TCP快速重传为什么3次ACK

TCP为什么3次握手

TCP MSS

应用层

应用层
应用层协议原理
网络应用程序体系结构
现代网络应用程序的两大主流体系结构:客户-服务器体系结构 对等(P2P)体系结构

客户-服务器体系结构(client-server architecture)
在此结构中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。客户之间不能相互通信。

该服务器具有固定的、周知的地址,即IP地址。

P2P体系结构
在一个P2P体系结构中,对位于数据中心的专用服务器有最小的(或者没有)依赖。相反,应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。

进程通信

DNS

应用层的大多数协议都是基于客户服务器方式。客户和服务器都是指通信中所涉及的两个应用进程。客户服务器方式所描述的进程之间服务和被服务的关系。

域名系统(Domain Name System, 简称DNS),主要是解决Internet网上机器或设备命名的一种系统。它是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

DNS使用TCP和UDP端口53.

对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

域名系统是一种服务器资源,许多应用层软件经常直接使用域名系统DNS,但计算机的用户只是间接而不是直接使用域名系统。

Internet采用层次结构的命名树作为主机的名字,并使用分布式的域名系统DNS。

域名服务器程序在专设的节点上运行,运行该程序的机器称为域名服务器。

域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。

由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。

Internet采用了层次树状结构的命名方法,任何一个连接在Internet上的主机或路由器,都有一个唯一的层次结构的名字,即域名。

域名的结构由若干层次组成,各分量之间用点隔开,各分量分别代表不同级别的域名。

域名服务器与域名解析

Internet允许各个单位根据具体情况将本单位的域名划分为若干个域名服务器管辖区(zone),并在各管辖区中设置相应的授权域名服务器。

域名是需要授权的,需要预先注册登记,如果没有授权,域名是不允许改动、删除的。

在Internet中,划分多个区域,每个区域中设一个授权区域。

image-20210223145913712

域名解析过程

DNS查询有两种方式:递归查询和迭代查询。

DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。DNS服务器之间一般采用迭代查询方式。

递归查询:如果想知道一个域名对应的IP地址,但在访问本地域名服务器时,可能该域名查询不到,此时该本地域名服务器就会请求它的上级支援,直到查到所查询的IP地址。

递归解析(递归查询)过程中,一直是以本地名称服务器为中心的,DNS客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态,直到本地域名服务器发来最终的查询结果。此时的本地域名服务器只是起到了中介代理的作用。

本地名称服务器也有缓存技术。

image-20210223152830400

域名解析过程加快的途径

  • 物理配置上,配一台运行速度高(CPU主频高、计算机内存大)的域名服务器;
  • 让数据库域名表中记录有序存放,可采用效率高的查找算法,例如折半查找法;
  • 准备一个高速缓冲cache,将域名放入其中,即名字的高速缓存。

FTP

文件传输协议FTP是用于在网络上进行文件传输的一套标准协议。

FTP能把多种类型的文件或文档,从不同厂家生产的计算机、手机等智能终端,通过有线或无线的计算机网络,发送复制到远程另外一台智能设备中,是网络环境的一项基本应用。

网络环境下复制文件的复杂性主要是:

  1. 计算机存储数据的格式不同;
  2. 文件的目录结构和文件命名的规定不同;
  3. 对于相同的文件存取功能,操作系统使用的命令不同;
  4. 访问控制方法不同。

FTP特点

  • 文件传输协议FTP只提供文件传送的一些基本的服务,它使用TCP可靠的传输服务。
  • FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
  • FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提供服务。
  • FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

主进程的工作步骤

  • 打开熟知端口(端口号为21),使客户进程能够连接上;
  • 等待客户进程发出连接请求;
  • 启动从属进程来处理客户进程发来的请求。从属进程将客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程;
  • 回到等待状态,继续接受其他客户进程发来的请求。主进程和从属进程的处理是并发进行。

TCP的端口(用16位端口号来标示一个端口 0-66535正好65536个 0为保留,可允许有65535个不同的端口)

注意:端口只具有本地意义,只是为标志本计算机应用层中的各个进程在和运输层交互时的层间接口,在因特网上不同主机中,相同的端口号没有关联。

由此可见,两个计算机的进程要互相通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)

TCP的端口号可分为两大类:

  1. 服务器端使用的端口号(又可分为两类):

    1) 熟知端口号/系统端口号(well known port number): 数值为0-1023.可在www.iana.org查到,IANA把这些端口号指派给TCP/IP中最重要的一些应用程序,让所有用户都知道。当一种新的应用程序出现后,IANA必须为它指派一个熟知端口,否则因特网上的其他应用进程就无法和它进行通信。如下是一些熟知端口号:

    | 应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) |
    | ————— | —— | ——— | —— | —— | —— | —— | —— | ————— |
    | 熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 |

    2) 注册端口号: 数值为1024-49151.为没有熟知端口号的应用程序使用的。使用这类端口号必须按照IANA的规定手续登记,以防止重复。

  2. 客户端使用的端口号

    数值为49152-65535。由于这类端口号仅在客户进程运行时才动态的选择,因此又称短暂端口号(临时端口号)。是留给客户进程选择暂时使用,当服务器进程收到客户进程的报文,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,这个端口号就不存在了,就可以供给其他客户进程以后使用。

FTP使用的两个TCP连接:控制连接和数据连接

控制连接在整个会话期间一直保持打开,FTP客户发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接不用来传送文件。

实际用于传输文件的是“数据连接”。服务器端的控制进程在受到FTP客户发送来的文件传输请求后,就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。

两个不同的端口号:当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。

由于FTP使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。

FTP的使用模式:主动模式和被动模式

主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端如果安装了防火墙,文件传输就会产生一些问题。所以,创立了被动模式。

被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装防火墙的问题。

基于主动模式的FTP连接创建步骤

客户端打开一个随机的端口(端口号大于1024,在这里称其为X),同时一个FTP进程连接至服务器的21号命令端口。此时,该TCP连接的来源地端口为客户端指定的随机端口X,目的地端口(远程端口)为服务器上的21号端口。

客户端开始监听端口X+1,同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是数据端口。

服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地端口为20,目的地端口为X+1.

客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。

大多数网页浏览器和文件管理器都能和FTP服务器创建连接。这使得在FTP上通过一个接口就可以操控远程文件,如同操控本地文件一样。

是否提供密码是可选择的,如果有密码,则形如ftp://<login>:<password>@<ftpserveraddress>.

NFS

网络文件系统是FreeBSD支持的文件系统中的一种,它允许一个系统在网络上与他人共享目录和文件。

通过使用NFS,用户和程序可以像访问本地文件一样,访问远端系统上的文件。

NFS至少有两个主要部分:一台服务器和一台(或者更多)客户机。客户机远程访问存放在服务器上 的数据。为了正常工作,一些进程需要被配置并运行。

Linux环境下,NFS的配置重点在于对/etc/rc.conf文件的修改,过程如下:

NFS服务器端,确认/etc/rc.conf文件有如下语句:

rpcbind_enable="YES"

nfs_server_enable="YES"

mountd_flags="-r"

NFS被设置为enable,mountd就能自动运行。

客户端,确认/etc/rc.conf文件有如下语句:

nfs_client_enable="YES"

/etc/exports文件指定了哪个文件系统NFS应该输出(也成为共享)。/etc/exports里面每行指定一个输出的文件系统和哪些机器可以访问该文件系统。在指定机器访问权限的同时,访问选项开关也可以被指定。

NFS的技术优势:

  • 本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。
  • 用户不必在每个网络机器上都有一个home目录。home目录可以被放在NFS服务器上并且在网络上处处可用。

以下内容来自维基

文件传输协议(英语:File Transfer Protocol,缩写:FTP)是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS(Network File System)等应用系统提供。

FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIMEUnicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。

FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。

TFTP

TFTP(简单文件传输协议也称小型文件传输协议Trivial File Transfer Protocol, TFTP))是一个很小且易于实现的文件传送协议。

TFTP使用客户服务器方式和使用UDP数据报,它得不到可靠的数据传输,因此TFTP需要有自己的差错改正措施。

TFTP只支持文件传输而不支持交互。

TFTP没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

特点:

  • 每次传送的数据PDU中有512个字节的数据,但最后一次可不足512字节
  • 数据PDU(协议数据单元)也称为文件块(block),每个块按序编号,从1开始
  • 支持ASCII码(即支持文本文件传输)或二进制(即支持非文本传输,如一段音乐、一个照片等)传送
  • 可对文件进行读或写
  • 使用很简单的首部

协议数据单元(英语:Protocol Data Unit,缩写为PDU):

OSI模型系统里,PDU和最下面四层相关。

  1. 物理层(一层)PDU指数据位Bit)。

  2. 数据链路层(二层)PDU指数据帧Frame)。

  3. 网络层(三层)PDU指数据包Packet)。

  4. 传输层(四层)PDU指数据段Segment)。

第五层或以上为数据data)。在特定的上下文情况下,一个特定层的PDU有时可以代表这个层。

关于UDP:

用户数据报协议(英语:User Datagram Protocol,缩写:UDP;又称用户数据包协议)是一个简单的面向数据报通信协议,位于OSI模型传输层

TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验字段。

UDP适用于不需要或在程序中执行错误检查和纠正应用,它避免了协议栈中此类处理的开销。对时间有较高要求的应用程序通常使用UDP,因为丢弃数据包比等待或重传导致延迟更可取。

数据报(Datagram):

是在分组交换网络中的最小传输资料单元。是一种无连接式通信方法,它与虚拟电路构成了分组交换的两种主要传输方式。

TFTP工作原理:

  • 在一开始工作时,TFTP客户进程发送一个读请求PDU或写请求PDU给TFTP服务器进程,其熟知端口号为69(16进制)
  • 初始连接时要发出WRQ(请求写入远程系统)或RRQ(请求读取远程系统),收到一个确定应答,一个确定可以写出的包或应该读取的第一块数据
  • 创建连接时,通信双方随机选择一个TID,因此两次选择同一个ID的可能性就很小
  • 每个包包括两个TID,发送者ID和接收者ID
  • TFTP服务器进程要选择一个新的端口和TFTP客户进程进行通信。若文件长度恰好为512字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据PDU。若文件长度不是512字节的整数倍,则最后传送数据PDU的数据字段一定不满足512字节,这正好可作为文件结束的标志

TFTP工作原理:

写入例子(WRQ,ACK和DATA代表写入、确认和数据)

主机A向主机B发出WRQ,其中端口为69

B机向A机发出ACK,块号为0,包括B和A的TID

EMAIL

3个主要组成部分:

  1. 用户代理
  2. 邮件服务器
  3. 简单邮件传输协议:SMTP

用户代理

  • 又名“邮件阅读器”
  • 撰写、编辑和阅读邮件
  • 如Outlook, Foxmail
  • 输出和输入邮件保存在服务器上

例如WEB的HTTP代理就是浏览器,FTP的代理就是FTP的后端软件

邮件服务器

  • 邮箱中管理和维护发送给用户的邮件
  • 输出报文队列保持待发送邮件报文
  • 邮件服务器之间的SMTP协议:发送EMAIL报文
    • 客户:发送方邮件服务器
    • 服务器:接收端邮件服务器

计算机网络基本概念

网络的定义:利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件实现资源共享和信息传递的复合系统。

网络的基本特征

  1. 具有共享能力
  2. 各计算机自治(计算机自成系统)
  3. 网络协议支持(管理、控制和通信)
  4. 支持互操作功能

资源子网是由各计算机系统、终端控制器和终端设备、软件和可供共享的数据库等组成。其功能是负责全网面向应用的数据处理工作,向用户提供数据处理能力、数据存储能力、数据管理能力和数据输入输出能力以及其它数据资源。

网络资源:硬件资源、软件资源、数据资源。

资源共享:是指网络系统中的各计算机用户可以利用网内其他计算机系统中的全部或部分资源的过程。它是网络的主要功能之一。

通信子网是由通信硬件(通信设备和通信线路等)和通信软件组成,其功能是为网中用户共享各种网络资源提供必要的通信手段和通信服务。

通信子网类型:结合型、公用型、专用型

节点:就是由一条或多条通信线路连接的具有一定功能的设备。网络中的各主计算机、终端和通信设备等均可称为节点。网络节点有两类:访问节点和交换节点。

广域网(WAN):覆盖的范围大,如一个大城市、国家或洲际间建立的网络。

局域网(LAN):覆盖范围有限,属于一个部门或单位组建的小范围网络,是目前计算机网络发展中最活跃的分支。

城域网(MAN):是指建立在大城市、大都市区域的计算机网络,覆盖城市的大部分或全部地域。

互联网:一般把由多个网络相互连接构成的复合网络称为互联网。互联网是不同网络的相互连接,如局域网和广域网连接、两个局域网相互连接或多个局域网通过广域网连接。

虚拟局域网(VLAN)是指利用网络软件和网络交换技术将跨越不同地理位置的一个或多个物理网段上的相关用户组成的一个逻辑工作组(逻辑网络)。VLAN是依赖网络软件建立起的逻辑网络,相当部分的VLAN是临时性的。

虚拟专用网(VPN)是指依靠Internet服务提供者(ISP)和其他网络服务提供者(NSP)在公共网络中建立的专用的数据通信网络。VPN可使用户利用公共网的资源将分散在各地的机构动态地连接起来,进行数据低成本的安全传输,这样既节省长途电话费用支出,又不再需要专用线路。

主计算机(HOST):与其他主计算机联网后构成网络中的主要资源。主计算机的作用:

  • 负责网络中的数据处理
  • 执行网络协议
  • 网络控制和管理
  • 维护共享数据库

终端:用户访问网络的设备。终端的主要功能:

  • [x] 把用户输入的信息转变为适合传送的信息送到网络上
  • [x] 把网络上其他节点输出并经过通信线路接收的数据转变为用户所能识别的信息

通信控制处理机(CCP):也称通信控制器,在某些网络中也叫前端处理机(FEP)、接口信息处理机(IMP)等。

CCP主要作用:承担通信控制和管理工作,减轻主机负担。

通信控制处理机是一种在计算机网络系统中执行通信控制与处理功能的专用计算机,通常由小型机或微型机担任。

调制解调器(MODEM):一种数据传输和信号转换设备。借助于调制解调器,就可以进行远距离通信,便于实现多路复用。

多路复用器:具有多路复用功能。

利用多路复用器可以实现在一条物理链路上同时传输多路信号,提高信道利用率。

集中器:用于在终端密集的地方,可以节省通信链路,提高线路利用率。集中器可由微型计算机或单片机担任。

网络连接设备有:中继器、集线器及各种线路连接器等。

网络互联设备有:网桥、路由器、交换机和网关等。

网络操作系统(NOS)的主要作用:除了具有常规操作系统的功能外,还应有网络通信管理功能、网络范围内的资源管理功能和网络服务等。

网络协议软件(Protocol):网络协议软件是网络软件中最重要、最核心的部分。它是计算机网络中各部分通信所必须遵守的规则集合。

计算机网络的特点

  • 可靠性:当网内某子系统出现故障时,可由网内其他子系统代为处理,网络环境提供了高度的可靠性。
  • 独立性:网络系统中各相连的计算机系统是相对独立的,它们各自既相互联系又相互独立。
  • 高效率性:网络信息传递迅速,系统实时性强。网络系统可把一个大型复杂的任务分给几台计算机去处理,从而提高工作效率。
  • 易扩充性:可以灵活地在网络中接入新的节点,如远程终端系统等,达到扩充网络系统功能的目的。
  • 廉价性
  • 透明性:网络用户所关心的是如何利用网络高效而可靠地完成自己的任务,而不去考虑网络所涉及的技术和具体工作过程。
  • 易操作性

计算机网络的分类

  • [x] 按照覆盖范围划分:广域网、局域网、城域网
  • [x] 按照逻辑功能划分:资源子网、通信子网
  • [x] 按照传输介质划分:有线网、无线网
  • [x] 按照拓扑结构划分:星型网、总线型网、环形网、树形网、网型网
  • [x] 按照传输介质种类划分:双绞线网、同轴电缆网、光纤网、卫星网、微波网
  • [x] 按照应用范围和管理性质划分:公用网和专用网
  • [x] 按照交换方式划分:电路交换网、分组交换网、ATM交换网等
  • [x] 按照连接方式划分:全连通式网络、交换式网络、广播式网络

网络体系结构是针对计算机网络所执行的各种功能而设计出的一种层次结构模型

网络协议组成的三要素:

  • 语义:规定了通信双方要发出的控制信息、执行的动作和返回的应答等。
  • 语法:规定通信双方彼此应该如何操作,即确定协议元素的形式。
  • 时序:(也称定时、同步)是对事件实现顺序的详细说明,指出事件的顺序和速率匹配等,

OSI七层模型:

  1. 物理层:物理介质为数据链路层提供传输比特流的一个物理连接

    主要任务:为通信双方的数据传输提供物理连接,并在物理连接上透明地传输比特流。传输单位是位(比特)。

  2. 数据链路层:检测并校正物理层传输介质上产生的传输差错,使两系统之间构成一条无差错的链路。

  3. 网络层:通信子网的最高层,用于控制和管理通信子网的操作。它体现了网络应用环境中资源子网访问通信子网的方式。网络层的数据传输单位是数据分组(包)。

    主要任务:在数据链路服务的基础上,实现整个通信子网内的连接,向传输层提供端到端的数据传输链路,为报文分组以最佳路径通过通信子网到达目的主机提供服务。

  4. 传输层:OSI中1-3层面向数据通信,是由通信子网所完成的通信功能的集合,通信子网就是基于低三层通信协议构成的网络。5-7层是由端主机进程所完成的面向应用功能的集合。传输层是OSI中高层与低层之间的接口层。

    对于网络中通信的两个主机,其端到端的可靠通信最后要靠传输层来完成。传输层是OSI中负责通信的最高层,是唯一总体负责数据传输和控制的层次。传输层还是OSI中用户功能的最低层。

  5. 会话层:利用传输层提供的端到端服务,向表示层提供它的增值服务。这种服务主要是向表示层实体或用户进程提供建立连接并在连接上有序地传输数据。

  6. 表示层:

  7. 应用层

协议是计算机网络有序运行的重要保证。

硬件(主机、路由器、通信链路等)是计算机网络的基础。

计算机网络中的数据交换必须遵守约定好的规则。

网络协议(network protocol),简称协议,是为进行网络中的数据交换而建立的规则、标准或约定。

协议规定了通信实体之间所交换的消息的格式、意义、顺序以及针对收到信息或发生的事件所采取的”动作”(actions).

协议的三要素

  1. 语法(syntax)
    • 数据与控制信息的结构或格式
    • 信号电平
  2. 语义(semantics)
    • 需要发出何种控制信息
    • 完成何种动作以及做出何种响应
    • 差错控制
  3. 时序(timing)
    • 事件顺序
    • 速度匹配

协议规范了网络中所有信息发送和接收过程。

网络应用体系结构

C/S结构、P2P结构、混合结构

客户机/服务器结构

服务器:

  1. 7*24小时提供服务
  2. 永久性访问地址/域名
  3. 利用大量服务器实现可扩展性

客户机:

  1. 与服务器通信,使用服务器提供的服务
  2. 间歇性接入网络
  3. 可能使用动态IP地址
  4. 不会与其他客户机直接通信

服务器上运行web服务器软件,客户机上运行浏览器软件

P2P结构

没有永远在线的服务器

任意端系统/节点之间可以直接通讯

节点间歇性接入网络

节点可能改变IP地址

优点:高度可伸缩

缺点:难于管理

混合结构

Napster

网络应用的基础:进程间通信

进程:主机上运行的程序

同一主机上运行的进程之间如何通信?

  • 进程间通信机制
  • 操作系统提供

不同主机上运行的进程之间如何通信?

  • 消息交换

客户机进程:发起通信的进程

服务器进程:等待通信请求的进程

不同主机之间进程的通信依靠套接字。这是操作系统提供的一种抽象接口,使其与网络硬件基础设施进行交互。例如寄信,你只需要把信件放在自己门外的信箱里,信箱就像是socket,邮政部门就是传输基础设施,负责将信件传送到接收方的信箱中,即接收方的socket。

传输基础设施向进程提供API:传输协议的选择、参数的设置

socket是操作系统提供的关于网络的API

如何寻址进程?

不同主机上进程间通信,那么每个进程必须拥有标识符

寻址主机——IP地址

寻址进程——端口号

为主机上每个需要通信的进程分配一个端口号:

HTTP Server:80

Mail Server:25

mac查看端口占用:sudo lsof -i tcp:port

例如sudo lsof -i tcp:80

于是,进程的标识符就是:IP地址+端口号

协议 本机IP:port 外部IP:port 状态
TCP 192.168.0.100:49225 202.108.23.105:5287 ESTABLISHED

应用层协议:

网络应用需遵循应用层协议

公开协议:

由RFC(Request For Comments)定义

允许互操作

HTTP, SMTP, …

私有协议:

多数P2P的文件共享应用

应用层协议的内容

消息的类型(type):请求消息、响应消息

消息的语法(syntax)/格式:消息中有哪些字段(field)? 每个字段如何描述

字段的语义(semantics):字段中信息的含义

规则(rules):进程何时发送/响应消息、进程如何发送/响应消息

设计一个网络应用时,要么使用现有的网络协议,要么设计一个新的协议

网络应用的需求与传输层服务

网络应用对传输服务的需求:

  1. 数据丢失(data loss)/可靠性(reliability)
  2. 时间(timing)/延迟(delay)
  3. 带宽(bandwidth)

Internet提供的传输服务

TCP服务:

  1. 面向连接:客户机/服务器进程间需要建立连接
  2. 可靠的传输
  3. 流量控制:发送方的发送速度不会过快,以至于超过接收方的处理能力
  4. 拥塞控制:当网络负载过重时,能够限制发送方的发送速度
  5. 不提供时间/延迟保障
  6. 不提供最小带宽保障

UDP服务:

  1. 不面向连接
  2. 不可靠传输
  3. 不提供可靠性保障、流量控制、拥塞控制、延迟保障、带宽保障

web与HTTP

World Wide Web: 网页互相链接

网页包含多个对象

对象的寻址:URL(Uniform Resource Locator): 统一资源定位器 RFC1738

Scheme://host:port/path

www.someschool.edu/someDept/pic.gif

www.someschool.edu是host name, someDept/pic.gif是path name.

http://被省略了(因为是默认).

web遵守的应用层协议:HTTP

超文本传输协议(HyperText Transfer Protocol)

HTTP使用TCP传输服务:

  • 服务器在80端口等待客户的请求
  • 浏览器发起到服务器的TCP连接(创建socket)
  • 服务器接受来自浏览器的TCP连接
  • 浏览器(HTTP客户端)与web服务器(HTTP服务器)交换HTTP信息
  • 关闭TCP连接

HTTP是一个无状态的协议(stateless):服务器不维护任何有关客户端过去所发送请求的信息。

HTTP连接的两种类型

  1. 非持久性连接(Nonpersistent HTTP)

    每个TCP连接最多允许传输一个对象

    HTTP 1.0版本使用非持久性连接

  2. 持久性连接(Persistent HTTP)

    每个TCP连接允许传输多个对象

    HTTP 1.1版本默认使用非持久性连接

socket编程——应用编程接口(Application Programming Interface, API)——位于应用层和传输层之间

socket将应用层的数据交给传输层

应用编程接口API就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口。

标识一个套接字(对外):IP地址+端口号

操作系统/进程如何管理套接字(对内)?

  • 套接字描述符(socket descriptor)

即,操作系统在管理其内部创建的socket套接字的时候,使用套接字描述符来标识的

  1. socket抽象类似于文件的抽象,在UNIX中,套接字就是一种特殊的文件(一切皆文件!)

  2. 当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字相关信息。

  3. 最后返回的是套接字描述符。