Computer Networks: Key Concepts and Notes
计算机网络
物理媒体
- 在物理信道中传输的原始信号
物理层
- 通信的三种方式:
- 单向通信:单条信道
- 半双工通信:两条信道
- 全双工通信:两条信道
- 数据交换方式:
- 电路交换:连接建立、数据传输、连接释放
- 数据报交换:以报文的形式,通过存储转发的方式进行传输
- 分组交换:将数据块划分成较小的分组packet,通过存储转发的方式进行传输
- 数据报方式:不同分组由路由表找到自己的路径
- 虚电路方式:电路交换方式和数据报方式的结合
数据链路层
- 功能:
- 为网络层提供服务
- 链路管理
- 组帧
- 流量控制
- 差错控制
- 差错控制
- ARQ
- 奇偶校验码
- CRC
- FEC
- 海明码
- ARQ
- 流量控制
- Stop-and-wait
- Go-back-N
- Selective Repeat
- 介质访问控制MAC
- 信道划分
- 分时TDM:可用于数字传输;STDM(动态/统计时分,动态分配时隙)
- 分频FDM:
- 分波WDM
- 分码CDM
- 随机访问
- ALOHA
- 纯ALOHA,不检测直接发送帧,直到收到ACK
- 时隙ALOHA,在时隙slot内发送帧,直到收到ACK
- CSMA:在传输前对信道进行侦听
- l-坚持CSMA:若信道忙,则忙等
- 非坚持CSMA:若信道忙,则过一段随机时间后再重复
- p-坚持CSMA:若信道闲,以p的概率传输数据帧,1-p的概率推迟到下一个slot
- CSMA/CD:先听后发,边听边发,冲突停发,随机重发
- CSMA/CA:若信道闲,等待DIFS后发送整个数据帧,等待ACK;否则,执行退避算法,选取回退值作为退避计数器初始值,若空闲则开始倒计时
- CSMA/CD和CSMA/CA的区别:前者用于总线形以太网,只能检测冲突不能避免;后者用于无线局域网,只能避免冲突不能检测
- ALOHA
- 轮询访问(令牌传输协议):令牌作为传输数据的许可证,在总线各节点中传递,使得信道作为独占设备
- 信道划分
- 局域网
- 以太网
- 无线局域网
- VLAN
- 广域网:因特网的核心部分
- 不等于互联网,互联网可以连接不同类型的网络(因特网Internet是最大的互联网internet)
- PPP
- HDLC
- 网桥:将多个以太网连接成更大的以太网,使得各网段称为互相隔离的碰撞域(冲突域),工作在MAC子层,具有路径选择的功能
- 物理层设备(集线器、转发器)不能隔离冲突域、广播域
- 数据链路层设备(网桥、交换机)可以隔离冲突域,能够互联不同的物理层、数据链路层协议的网段
- 网络层设备(路由器)可以隔离冲突域、广播域,能够互联不同的物理层、数据链路层、网络层协议的网段
- 如果一个存储转发设备实现了某个层次的功能,那么它就可以互联两个在这些层次上使用不同协议的网段
- 局域网交换机(以太网交换机):多端口的网桥
网络层
- 功能
- 向上提供简单灵活、无连接、最大努力交付的数据报服务,并不保证分组交付的可靠性
- 异构网络互联
- 路由与分组转发
- SDN
- 拥塞控制
- 路由算法
- 路由表:表项为(网络地址/子网掩码,下一跳地址)
- 静态路由:适用小型网络,开销小,简便;不适应于拓扑结构变化的网络
- 动态路由:能够动态适应网络,不断寻优;但算法复杂,会增加网络负担,可能引起振荡
- 距离-向量路由算法:RIP算法,以hop数为距离度量
- 链路状态路由算法:OSPF算法,通过Dijkstra算法计算
- 层次路由:将整个互联网划分成许多自治系统,内部所使用的协议为IGP,通常为RIP/OSPF,自治系统之间所使用的协议为EGP,通常为BGP
- IPv4
- 数据报
- 首部:20byte
- 首部长度、总长度、片偏移的单位分别为4byte、1byte、8byte
- 首部校验和只校验分组首部
- 由于数据报需要组帧,因此链路层的最大传输单元MTU限制了数据报的长度,需要对于数据部分进行分片,最后在目的地的网络层被重新组装,中间各个片的路径可能不一样
- 与分片和组装有关的首部字段:标识(数据报标号)、标志(指明是否可分片、是否为最后一片)、偏移量(所处原数据报的偏移量)
- IPv4地址
- 网络号+主机号
- A类:1-126(1byte网络号)
- 私有地址:10.0.0.0/8
- B类:128-191(2byte网络号)
- 私有地址:172.16.0.0/12
- C类:192-223(3byte网络号)
- 私有地址:192.168.0.0/16
- D类(多播地址):224-239
- E类(保留地址):240-255
- A类:1-126(1byte网络号)
- 保留地址:
- 主机号全0:代表本子网
- 主机号全1:子网内广播(直接广播)
- 127.xxx.xxx.xxx:环回自检
- 全0:本网络上的本主机
- 全1:整个TCP/IP的广播(受限广播)
- NAT:实现专用地址到共用地址的转换
- 网络号+主机号
- 子网划分:使得二级IP地址变成三级IP地址
- 为了解决IP地址利用率很低,网络号过多导致路由表很大
- 减少广播域的大小
- 属于一个网络内部的事情
- 子网掩码:通过与IP地址相与得到子网的网络号(未划分则为默认的子网)
- CIDR无分类编址:不受ABC类网络分类的限制,自由划分IP地址;把小网汇聚成超网
- 分组转发:针对于网络
- IP数据报中的目的IP地址是不会变的,路由器只根据IP数据报中的目的IP地址网络前缀在路由表中找到下一跳IP地址,并通过ARP将其转换成MAC地址,放置于MAC帧首部中;
- 由于在局域网中,MAC帧首部的源地址和目的地址会不断变化,也就意味着无法通过MAC地址跨网络通信,但是在经过网桥时不会改变源地址
- ARP地址解析协议:IP地址到MAC地址的映射
- 每台主机都有一个ARP高速缓存表
- ARP表的构建:如果存在对应的表项,则直接查询,如果没有,则通过广播FF-FF-FF-FF-FF-FF的目的MAC地址的MAC帧,目的机器则会作出响应,ARP表中增加对应的表项
- DHCP动态主机配置协议:给主机动态分配IP地址
- 客户机广播,以让DHCP服务器给自己分配IP地址
- 服务器接收后,广播包含分配的IP地址的数据报
- 客户机接收后,若接受该地址则发送答应报文
- 服务器接收后,给客户机分配IP地址
- ICMP网际控制报文协议:让主机或路由器报告差错和异常情况
- 报文类型:ICMP差错报文、ICMP询问报文
- 询问报文中常用的为PING(回送请求和回答报文)、Traceroute(时间超过报文)
- 数据报
- IPv6
- 目的:从根本上解决IPv4地址空间不足
- 与IPv4比较:
- 16byte地址空间,多级地址(0x的表示方法)
- 简化了首部,只有8个域(IPv4有12个域)
- 一般意义上的不可切片
- 首部的单位长度为8byte(IPv4为4byte)
- IPv6地址:单播、多播、任播
- IPv4到IPv6的过渡方法:
- 双协议栈:同时拥有两个协议栈,同时支持两个协议
- 隧道:将IPv6数据报封装到IPv4
- 路由协议:
- IGP
- RIP路由信息协议(应用层协议,使用UDP传输数据):使用距离向量算法
- 仅与相邻路由器交换自己的路由表
- 按固定的时间间隔交换路由信息
- 优点:实现简单、开销小、收敛快
- 缺点:限制网络规模(16被规定为不可达),交换路由表的开销大,“坏消息传递慢”
- OSPF开放最短路径优先协议(网络层协议,使用IP传输数据):使用链路状态算法
- 对本AS中所有路由器发送所有相邻路由器的链路状态(洪泛法),只有链路状态发生变化才会洪泛
- 使用Dijkstra算法计算自己到所有节点的最短路径,然后构建自己的路由表
- 优点:链路状态只是度量代价的量度(部分信息),比路由表(全部信息)代价小得多;收敛很快,不会出现坏消息传递慢;灵活,负载平衡
- RIP路由信息协议(应用层协议,使用UDP传输数据):使用距离向量算法
- EGP:通常为BGP边界网关协议(应用层协议,基于TCP)
- 目的是寻求一个简单的路由,并不是寻找最好的
- IGP
- IP组播:单个分组正确抵达若干目标主机
- 基于UDP
- 使用IGMP因特网组管理协议
- 通过将对应的组播地址作为目标地址,即可对该组实现组播
- 尽最大可能交付,不是可靠交付
- 组播地址仅为目标地址
- 不产生ICMP差错报文,因此不能PING
- 并不是所有的D类IP地址都是组播地址
- 数据只有在出现分岔时才会复制后继续转发
- IGMP视为IP的一个组成部分,让组播路由器直到是否有主机出入某个组
- 移动IP:移动结点以固定的网络IP地址实现跨越不同网段的漫游
- 冲突域:第1层的概念,指同一介质的不同设备
- 广播域:第2层的概念,指能够接受同一广播的结点集合
- 路由器:由交换结构、输入端口、输出端口三部分组成
- 分组转发:处理数据流(从比特流中抽取帧,从帧抽取数据报),执行转发表查询、队列管理、任务调度等
- 路由计算:与其他路由器交互,完成路由表的计算和更新
- 面向协议的,需要依靠网络地址协议、路由协议(应用层/网络层协议);而网桥与高层协议无关
- 由路由表得到转发表
- 路由表(涉及路由计算)是不同路由器之间通过一定的路由协议/路由算法得到的
- 转发表(涉及分组转发)是把收到的数据报转发到该路由器合适的端口中
传输层
- 功能
- 面向通信部分的最高层,面向用户的最底层,向高层用户屏蔽下面三层通信子网的细节,向上三层资源子网提供可靠的传输服务
- 提供了不同主机进程间的逻辑通信,即端到端的通信(网络层提供主机之间的逻辑通信,不可靠)
- 复用和分用
- 差错控制(网络层仅检查数据报首部)
- 提供两种协议(网络层无法同时实现两种协议)
- 端口(软件端口)
- 16bit
- 应用进程将数据通过端口向下交付到传输层,而传输层可以通过端口向上交付给对应的进程
- 应用层各种协议进程与传输层的交互地址
- MAC、IP地址标识主机,而端口标识主机的应用进程
- 套接字=IP地址:端口号
- 标识某一主机某一进程
- UDP
- 特点:无连接、面向报文、不可靠交付
- 服务:仅提供复用和分用、差错检测
- 优点:开销小(首部仅8byte)、简单、速度快、实时性好;适用于一次性传输较少数据(DNS/SNMP)、对时延敏感的多媒体应用
- UDP报文:
- 首部:8byte
- 源、目标端口号、UDP长度、UDP校验和
- 接收方收到IP数据报后,直接抽取UDP报文通过端口向上交付给对应进程,若端口号不正确,则丢弃报文,发送ICMP差错报文
- UDP校验:发送方加入伪首部,对整个报文16bit单位段进行二进制反码求和,对结果取反作为校验和字段;接收方应得到全1的校验结果(IP数据报仅对报文首部进行校验)
- TCP
- 特点:面向端到端的连接、可靠/有序/无丢失/不重复、全双工、面向字节流
- TCP报文:
- 首部:20byte,首部长度必须为4byte的整数倍
- 字节流中每一个字节都按顺序编号,序号字段中为报文数据的第一个字节序号
- 窗口字段指明接收方现存的数据缓存空间
- TCP校验同UDP校验几乎相同,都是对整个报文进行校验
- ACK用于累计确认
- SYN用于建立连接(SYN=1,ACK=0为建立连接报文,SYN=1,ACK=1为建立连接的答应报文)
- FIN用于释放连接(说明发送方单方面释放连接,但可以接收数据)
- 连接管理:
- TCP连接的端口为套接字
- 建立连接:三次握手
- 释放连接:四次握手(先释放客户端到服务器端的单向连接,等待服务器把剩余数据传输完毕后,再释放另一单向连接)
- 可靠传输:
- 使用序号标记字节流;确认号表明已经接收到之前的结果,其值为所期望下一个报文段的数据的第一个字节的序号;累计确认的方式以确保有序
- 超时和冗余ACK(接收到三个相同的ACK后,进行快速重传,同时可以用作拥塞控制)
- 流量控制:
- 和数据链路层一样,使用滑动窗口实现(区别:传输层的是端到端的流量控制,且窗口大小可以动态变化,而数据链路层是点到点的,不可动态变化)
- 根据报文段中接收方的rwnd的大小,发送方修改发送窗口大小
- 拥塞控制:
- 与流量控制的区别:拥塞控制为全局性的,让当前网络能够承受现有的负荷,而流量控制是端到端的
- 借助rwnd、cwnd(发送放估算当前网络的拥塞程度),发送窗口大小为两者的最小值
- 维护cwnd的方法(前提是rwnd足够大,发送窗口=cwnd):
- 慢开始和拥塞避免:低于ssthresh阈值,慢开始(从cwnd=1开始,线性增加),超过ssthresh阈值,拥塞避免(不断自增1);一旦出现超时导致的拥塞,ssthresh减半,cwnd=1,进行慢开始
- 快重传(与可靠传输相同,遇到三个相同的ACK,快速重传)和快恢复(遇到三个相同的ACK导致的拥塞,ssthresh减半,cwnd=ssthresh,直接进行拥塞避免)
- 超时意味着真正严重的拥塞,而冗余ACK还不至于严重的拥塞