计算机网络2
路由选择算法
路由协议的目标:确定从发送主机到接收主机之间,通过路由器的网络,较好的路径(等价于路由器的序列)
路径:路由器的序列,分组将会沿着该序列从源主机到达最后的目标主机。
路由器负责不同网络之间怎么走。交换机负责同一个局域网设备之间怎么连。
网络之间的路由可以看做子网到子网之间的路由,因为主机之间的路由工作量非常大IPV4就有40亿个地址。路由信息还可以进一步聚集。
一般找的是最好的路径,而不是较好的路径。
指标:站数,延迟,队列长度,或者是一些单纯指标的加权平均。
我们可以把网络抽象为一张图,每一个点到点的连接就是一条边。边的长度就是通信代价。
我们最终的目的是找到sink tree(汇集树)
最小生成树是连接所有节点,且边权总和最小 。
sink tree、是,建立所有节点到sink的路由。
- 此节点到所有其他节点的最优路径形成的树。
- 路由选择算法就是为所有路由器找到并使用汇集树。
为什么是树呢?因为图中是可能存在环的。有可能产生到一个节点有多条路径。
路由算法的原则:
- 正确性:算法必须是正确和完整的,使分组一站一站接力,正确发向目标站。目标所有的站地址,在路由表中都能找到相应的表项。没有处理不了的目标站地址
- 简单性:算法在计算机上应简单:最优但复杂的算法,时间上延迟很大,不实用,不应为了获取路由信息增加很多的通信量
- 健壮性:算法能适应通信量和网络拓扑的变化,网络拓扑的变化算法能很快适应,不向很拥挤的链路发数据,不向断了的链路发送数据。
此外还需要
- 稳定性:产生的路由不应该摇摆
- 公平性:对每一个站点都公平
- 最优性:某一个指标的最优(实际上可能是次优的)。
路由信息
- 全局:所有的路由器有完整的图片和边的代价信息
- 分布式:路由器只知道与它有关的物理连接关系的邻居路由器、计算路径信息。distance vetor算法
静态或者动态
- 静态:路由跟随时间变化缓慢,非自适应算法
- 动态:路由器变化快,周期性更新,根据链路代价的变化而变化。自适应路由选择。
LS路由工作过程
配置LS路由选择算法的路由工作过程
各点通过各种渠道获得整个网络拓扑,网络中的所有链路代价等信息(这部分和网络没关系,属于协议和实现)
使用LS路由算法,计算本站点到其他站点的最优路径(汇集树),得到路由表。按照次路由表转发分组(datagram方式)
获得网络拓扑和链路代价信息,使用最短路由算法得到路由表,使用此路由表。
链路状态路由选择
- 发现相邻节点,获知对方网络地址
- 测量到相邻节点的代价
- 组装一个LS分组,描述它到相邻节点的代价情况
- 将分组通过扩散的方法发给所有其他路由器,以上4步让每个路由器获得拓扑和边代价
通过dijkstra算法找出最大路径(这才是路由算法)
- 每个节点独立计算到其他节点的最短路径
- 迭代算法:第K步能知道本节点到其他K个节点的最短路径
首先是发现邻居,然后测量到相邻节点的代价。组装一个分组描述它到相邻节点的延迟。
可以通过TTL,每过一个-1来减少泛洪的情况。
OSPF是一种LS协议,被用于internet上,IS-IS被用于internet主干中。
LS:我知道整张地图,所以我自己算怎么走。
DV:我不知道整张地图,只问邻居“你到那里有多远”。
两者最主要的区别是:LS掌握全局拓扑,DV只掌握邻居提供的距离信息。LS通常收敛更快、不容易出现路由环路,但需要更多存储和计算;DV更简单,但可能出现“坏消息传播慢”
LS算法用的更多。DV算法中RIB现在被OSPF淘汰了。
ISP之间的路由协议
BGP(Border Gateway Protocol,边界网关协议)。它和 ISP 内部常见的 LS(Link-State,链路状态)、DV(Distance-Vector,距离矢量),核心区别在于:BGP 主要解决“不同自治系统之间怎么选路”,而 LS/DV 主要解决“一个自治系统内部怎么找到最优路径”。
IGP 很像在一张已知地图里找最短路。
但是互联网不是一个统一管理的网络。
互联网实际上由大量 AS(Autonomous System,自治系统)组成:
问题就不止是哪条路径最短,变成,我愿意通过谁走?甚至哪条路最赚钱。
BGP 经常被叫做:
Path Vector Protocol(路径矢量协议)
可以把它理解成 Distance Vector 的一个“加强版”。
DNS控制平面
SDN 是 Software-Defined Networking。软件定义网络
把“网络设备自己决定怎么转发”变成“由一个逻辑集中的控制器统一决定,设备主要负责执行”。
传统网络里,一台路由器通常同时干两件事:一边运行 OSPF、IS-IS、BGP、STP 等协议来“算路”,一边根据算出来的转发表去转发数据包。也就是说,控制平面和数据平面都在设备里。
传统方式每一个路由器per-router控制平面。每一个路由器的单独路由器算法原件,在控制平面上进行交互。
SDN方式:逻辑上集中的控制平面,同一个不同的,通常是远程的控制器与本地控制代理(CAs)
为什么需要一个逻辑上集中的控制平面:
- 网络管理更加容易:避免路由器的错误配置,对与通信流的弹性更好
- 基于流的转发 允许可编程路由器
简单来说就是,把网络怎么走的决策逻辑,从交换机路由器设备中抽出来,交给集中软件控制。
在传统网络设备中,一台路由器通常同时包含:
- 控制平面(Control Plane):决定数据包应该往哪里走,比如运行 OSPF、BGP,生成路由表。
- 数据平面(Data Plane):按照已有规则,真正高速转发数据包。
传统情况下,每台设备自己维护配置、协议和转发表。
集中控制,控制者可以看到整个网络,而不是只知道某一台设备周围发生了什么。可编程,网络可以通过软件API控制。自动化,如果发现某条链路拥塞,控制器可以自动修改规则。还容易实现策略统一。
链路层和局域网
概念
广域网也有链路层,只不过相对来说比较简单。
网络层是按照子网来路由的。 要解决的是子网怎么把分组传到另一个子网。链路层也存在检错和纠错问题。多点连接网络还可能存在数据碰撞。
点到点链路相对来说比较简单。
子网中的若干个节点是通过共享型介质连接到一起的,比如同轴电缆或者网络交换机。
广域网一般采用点到点的链路,局域网一般采用的是多点连接的方式。点到点连接容易形成笛卡尔积的连接。广域网带宽大延迟大,如果采用多点连接的方式会形成碰撞。这种情况下,数据也不需要寻址。
主机和路由器是节点(网桥和交换机也是)nodes。
沿着通信路径,连接相连接点通信信道的是链路links,还分为有限链路,无限链路,局域网共享链路。
第二层协议数据单元帧frame,封装数据包。
数据链路层负责从一个节点通过链路将帧中的数据报发送到物理节点。
链路层提供的服务
成帧,链路接入:
- 如果数据包封装在帧中,加上帧头部、帧尾部
- 如果采用的是共享性介质,信道接入获得信道访问权
- 在帧头使用MAC地址来表示源和目的地
一般的链路层服务,不是所有的链路层都提供这些服务,一个特定的链路层只是提供其中一部分的服务。
网络中本身比较可靠的情况下,链路就不提供可靠服务。但是对于本身不可靠的情况下就需要提供可靠服务。因为让对端主机重新传输的代价是较大的。以太网相对来说可靠,WLan相对来说不可靠。检错指的是发现错误,然后丢弃错误数据。纠错是发现错误,将错误进行纠正。
链路层在每一个主机上,在每个路由器,交换机的每个端口上。
链路层功能在适配器上实现aka network interface card、NIC。也就是网卡,也叫网络适配器。这是硬件软件和固件的综合体。

发送端将网卡中的每个比特变成物理信号发送出去。对方网卡物理层把每个bit变成01序列。
错误检测
EDC:差错检测和纠正位
D=数据由差错检测保护,可以包含头部字段。错误检测不是100%可靠的,协议会漏检一些错误,更长的EDC字段可以得到更好检测和纠正效果。
奇偶校验
- 单bit校验:检测单个bit级错误
- 2维奇偶校验:检测和纠正单个bit错误。
CRC校验
- 强大的差错检测码
- 将数据比特D,看成是二进制的数据
- 生成多项式G:双方协商r+1位模式
多路访问链路和协议
点对点
- 拨号访问的PPP
- 以太网交换机和主机之间的点对点链路
广播(共享线路和媒体)
- 传统以太网
- HFC 上行链路
- 802.11无限局域网
多点连接的网络又被称为广播式的网络,发出去物理上所有节点都能收到。我们可以选择性接受,来实现点对点发送和接受。
无限网卡的手机笔记本都采用一个共享频道进行通信,理论上发出的电波周围所有节点都可以收到。
如果多个节点同时发送可能会没有办法区分谁发送了什么信息。
多路访问协议,介质访问控制协议MAC
分布式算法中决定节点如何使用共享信道,即决定节点什么时候可以发送
没有共享控制的通信必须借用信道本身传输。
只有这一个信道,负责发送数据信息,也负责发送控制信息。因此我们需要分布式的算法来协调节点之间对这个信道的使用。
给定Rbps信道
- 当一个节点要发送时,可以以R的速率发送
- 当M个节点要发送,每个可以以R/M的平均胜率发送
- 完全分布式的:没有特殊节点协调发送,没有时钟和时隙同步
MAC媒体控制访问协议
信道划分
- 把信道划分成小片(时间、频率、编码)
- 分配片给每个节点专用
随机访问
- 信道不划分,允许冲突
- 冲突后恢复
依次轮流
- 节点依次轮流
- 但是有很多数据传输的节点可以获得较长的信道使用权。
信道划分MAC协议:TDMA
- 轮流用使用信道,信道 的时间分为周期
- 每个还在那点使用每个周期中的固定时隙(长度=帧传输时间)
- 如果站点呜帧传输,时隙空闲 浪费

还要分频的MAC协议FDMA
信道的有效频率范围被分成一个个小小的频段,每个站点分配一个固定的频段。分配给站点的频段如果没有被使用,则空闲。
码分多路访问CDMA
所有站点在整个频段上同时进行传输,采用编码原理加以区分,完全无冲突,假定信号同步很好,线性叠加。
比方
TDM:不同的人在不同时刻讲话
FDM:不同的组在不同的小房间里通信
CDMA:不同的人使用不同的语言讲话
随机存取协议
当节点有帧要发送时,以信道嗲哭咽全部R bps发送,没有节点之间的预先协调,俩个或更多节点同事传输会发生冲突。
随机存取协议规定了如何检测冲突和如何从冲突中恢复。
802.11 Wlan,无线局域网,采用的是CSMA,CSMA/CD,CSMA/CA。
时隙ALOHA
假设所有帧是等长的,事件被划分成相等的时隙,每个时隙可发送一帧,节点值在时隙开始时发送帧。节点在时钟上是同步的。如果俩个或多个节点在同一时隙传输,所有的站点都能检测到冲突。
当节点获取新的帧,在下一个时隙传输,传输是没有检测到冲突,成功,如果检测到冲突失败。
优点:可以以信道全带宽传输
缺点:存在冲突,浪费时隙,即使有帧要发送,仍然有可能存在空闲的时隙。节点检测冲突的时间<帧传输的时间。需要时钟上同步。
纯ALOHA 非时隙
简单无需节点间在时间上同步,当有帧需要传输,马上传输。
设备有数据 → 立即发送
如果发送成功 → 结束
如果发生碰撞 → 等待一段随机时间
再重新发送
效率比时隙差。
可以使用CSMA冲突,冲突仍然可能发生,有传播延迟造成,俩个节点可能真听不到真正进行的传输。
整个冲突的传输时间都被浪费了,是无效的传输。节点依据本地的信道使用情况来判断全部信道的使用情况。
信道越长,端到端的传播延迟就越大。
CSMA/CD
载波侦听CSMA:和在CSMA中一样发送前侦听信道。灭有传完一个帧就可以在短时间内检测到冲突。冲突发生时则传输终止,减少对信道的浪费
冲突检测CD技术,有线局域网中容易实现:检测信号强度,比较传输与接收到的信号是否相同。通过周期的过零点检测。
CS事前监听。 CD是边说边听。先听再发,冲突后退避重传
指数退避:适配器试图适应当前负载,在一个变化的碰撞窗口中随机选择时间点尝试进行重发。
CSMA/CA WLAN
无线局域网,有俩中模式,第一种模式就是基础设施模式,第二种叫做自组织模式。
冲突检测在无线网络中不好用。无线网络是存在衰减的,因此难以检测冲突。同样的频段干扰的情况比较严重。
CSMA就是发送前侦听信道,不会和其他正在传输的节点发生冲突。
没有冲突检测目标是避免冲突C是collision,A就是avoidance。冲突不一定意味着不成功。不冲突也不一定意味着成功。

核心思想是:发送前先听,空闲了也别立刻发,随机等一下再发,尽量避免大家同时开口。
WLAN:CA
无法CD,一旦发送就必须发送完,如果信道浪费严重,代价极其高昂。思想是事先劲量避免冲突 ,而不是在发生冲突时,放弃然后重发。
可以使用RTS-CTS交换避免冲突。
轮流 MAC 协议,可以理解成:多个设备共享同一条通信信道时,大家不是抢着发,而是按照某种顺序轮流获得发送权。非常适合高负载应用。也可以用令牌在各个节点中轮转,等待数据发送。
局域网LAN
IPV6是128bit。
ipv4是32位的地址,用于使数据到大墓地IP子网,前n-1跳都是子网地址在起作用。从而达到子网中的目标节点:最后一跳。
一个物理网络前缀都是一样的。IP地址是封层的。
LAN(MAC、物理、以太网)地址
用于使帧从一个网卡传递到与其物理连接的另一个网卡。(在同一个物理网格中)。
48bit mac地址固话在适配器的ROM中,有时也可以通过软件设定。
理论上全球任何俩个网卡的MAC地址都不相同。
ARP协议(地址解析协议)核心作用是在局域网内,通过已知的IP地址,找出对应的MAC地址,确保数据能精准送达目标设备。在公网上俩台设备通信,ARP协议用来解决最后一公里的问题。
主机可以直接根据IP地址和子网掩码,通过计算来判断目标设备是否和自己处于同一网段(三部位运算)。
如果B和A在同一个局域网,但B使用的A的公网IP去访问A,流量搭嘎思虑会兜圈子,先跑到路由器,再由路由器送回给A。这个现象被称为NAT回流。也就是B通过路由器和A进行通信。
但是这个功能需要路由器支持NAT回流,如果路由器不支持NAT回流,那么则无法访问A。
如果B直接通过内网访问A,那么B在ARP之后, 直接通过交换机和A进行通信。
当电脑要访问公网时,它会首先判断目标IP(比如服务器的IP),是否在局域网内,如果不在,那么将数据包交给默认网关(通常是路由器)。但是把数据包交给网关之前,必须先知道网关的mac地址。所以在局域网广播ARP,谁是192.168.1.1的网关的IP?晴把你的MAC地址告诉我。只有网关会回应自己的MAC地址。拿到网关的MAC地址后,电脑就可以将数据发送给网关。数据包的收件人MAC地址就是网关的MAC地址,而目标IP仍然是公网服务器的IP。之后数据包就由网关负责,一层层地路由转发到公网服务器了。
网卡不理解IP地址,只能将IP地址翻译为mac地址才能发送数据吗?
- 物理局域网内:网卡只认mac地址
- 公网:靠IP地址寻址。
为什么不把IP地址和MAC地址弄成一个地址呢?IP地址是分层的,便于路由计算。
生产网卡的时候,也不知道用在哪个网段。网卡挂了,IP地址就挂了是不可接受的。
子网掩码
假设你的IP地址是 192.168.1.100,子网掩码是 255.255.255.0。
- 子网掩码前3位(255.255.255)对应的是网络号,即
192.168.1。 - 最后1位(.100)就是主机号。
子网掩码,是一个32位的数字,用来配合IP地址工作,它唯一的地址就是华擎界限,告诉网络设备,IP地址哪几位是网络号。
当电脑要发送数据时,会先用子网掩码计算目标IP的网络地址。
拿最常见的家庭网络举例:
- 你的IP:
192.168.1.100 - 子网掩码:
255.255.255.0
我们把它们都转成二进制做“逻辑与”运算(1+1=1,其他都等于0):
IP地址: 11000000.10101000.00000001.01100100
子网掩码: 11111111.11111111.11111111.00000000
————————————————————————————————————————————
运算结果: 11000000.10101000.00000001.00000000 = 192.168.1.0这个运算结果 192.168.1.0 就是这台设备所在的网络地址。子网掩码通过一次简单的数学计算,让电脑瞬间明白了:“哦,我和 192.168.1.55 是同一个小区的,但和 8.8.8.8 不是同一个小区。(与预算是否为同一个结果)”
为什么255那么常见呢?因为255是二进制的全1。一个ip地址是由4组8位二进制数组成。
子网掩码要遵循,左边全1,右边全0。
- 左边连续的“1”:刚好盖住IP地址的前几位,把这几位原封不动地保留下来,作为网络号。
- 右边连续的“0”:刚好把IP地址的后几位强行归零,作为主机号的起始位。
网络号一定要放在前面,主机放后面,因此左边全1进行与运算,就可以把信息保留下来,右边全0就可以把信息给擦掉。
许多家庭的子网掩码是255.255.255.0(24位子网掩码)
为什么不是255.255.0.0呢(16位子网掩码)?这不是有更多的设备可以用了吗?
这是因为更多的设备会造成网络风暴,所有节点都需要记住其他节点。每次ARP都需要广播给所有其他节点。
DHCP分配的IP是有租期的,没有被继续使用的IP会被回收利用。
IPV6通常不教子网掩码,而是使用前缀长度。直接写/64 /48/56这种。
默认网关
电脑要访问局域网之外的设备时,需要先把数据交给默认网关。默认网关通常就是路由器的局域网IP地址。
实际上能上网并不要求家里一定有一台,单独的路由器,准确的说,只需要找到一个负责把本地网络转发到互联网的网关设备。
光猫本身就带路由功能,能做DHCP,NAT默认网关。
一搬面路由器是三层设备,最核心的功能是根据ip地址做转发,判断一个数据包应该从哪个接口转发出去。但是家用 路由器一般是多合一设备,不止是三层。
软路由可以理解乘,用一台普通电脑,或者安装路由软件,让它来充当路由器。普通家用的路由器其实也是硬件+路由系统。只是常见帮你做好了,软路由则更加自由,比如你拿一台由多个网口的小电脑,装上OpenWrt、OPNsense、pfSense 之类的系统,它就可以负责:
- 拨号上网
- DHCP
- NAT
- 防火墙
- VPN
“软”并不是说它没有硬件,而是说它的路由功能主要由通用计算机 + 软件系统实现;相对来说,普通家用路由器通常被称为“硬路由”。
ARP
Address resolution Protocol:地址解析协议
MAC地址由IEEE管理分配,制造商购入MAC地址空间来保证唯一性。
在LAN上每个节点都有一个ARP表。包括一些LAN节点IP/MAC地址的映射。每次通过下一跳IP地址得到下一个IP地址。
如果在缓存表中有该IP地址对于MAC地址的对应,就直接使用,如果没有,那么就广播。一般来说是缓存20分钟。这是因为IP地址对mac地址的映射是可能变化的。删掉可以适应新的变化。
现在局域网中,特别是数据中心中都普及了万兆的内网。现在20块钱就可以买到万兆的网线了。
以太网发展
最早的以太网不需要ARP,可以直接采用同轴电缆将所有电脑连接到一起。数据直接发给所有机器。俩边放上中继器,防止信号返回。这时候还需要检测发送冲突。但是同轴电缆破损的化,会导致所有节点都无法正常发送数据。
后来这种进化到了HUB 集线器。所有机器连接到hub上,一个(hub)端口收到数据向所有端口转发。从物理上看这是一个星形网络,但是逻辑上来看还是一个总线型。每个节点在发送数据之前依旧需要侦听其他设备有没有发送数据,一直侦听到了空闲为止。这里所有的节点都在一个碰撞与。这样只要Hub不坏,线坏了就没有问题。hub之间还可以进行级联。因此任何时间只允许一个节点进行发送。
后面就升级到了交换机。向哪个端口发送数据,就只发那个端口。相当于在端口之间有个瞬间切换的开关。俩个节点在发送接收的时候,其他节点任然可以发送接收。这种情况下就不会产生冲突。利用网线中独立的发送对和接受对,让数据在通栏上就能同时双向跑。它在每个端口上都有独立的收发器和缓存。端口A到端口B的通信,在交换机内部是通过交换芯片直接连通(走背板或交换矩阵),不需要经过端口C、D。这就是真正的星型网络。
交换机赢者通吃,取代了所有其他的网络设备。
发送方适配器在以太网中封装IP数据报,或其他网络协议数据单元,签到码:7B 10101010+1B 10101011
用来同步接收方和发送方的时钟速率。
- 使得接收方将自己的始终调到发送端的时钟
- 从而可以按照发送端的始终来接收发送的帧。
以太网提供的是无连接,不可靠谱的服务。
- 无状态:帧传传输前,发送反个和接收方之间没有握手
- 不可靠:接受方适配器不发送ACK或NAK给发送方,递交给网络层的数据报流可能有GAP,如上层使用TCP协议这样的RDT,GAP会被补上,否则应用层就会看到gap。
以太网的MAC协议采用二进制退避的CSMA/CD截止访问控制形式。
现代网卡虽然保留了“载波监听”功能,但只用来判断网线有没有插好、对方是否在线,不再用于“冲突退避”。
现在的传输是全双工模式(可以同时收和发),而CSMA/CD只适用于半双工。如果你的交换机和网卡都支持千兆,它们协商后默认开启全双工,CSMA/CD功能就会被直接关闭。
物理媒介源头光纤,同轴电缆,双绞线。
双绞线为什么要宁河在一起呢?
- 抵消自身产生的磁场(抗“自扰”)
电流通过导线时会产生磁场(右手定则)。如果两根线平行,磁场会向外辐射,形成干扰源。但当你把两根线拧在一起时,两根线上电流方向相反(一进一出),产生的磁场方向也相反。于是,在每一圈绞距内,两个磁场恰好相互抵消,把电磁辐射“锁”在双绞线内部,不至于像天线一样把信号发射出去干扰别人。- 抵御外来的磁场(抗“他扰”)
外部空间的电磁干扰(如电机、日光灯)是均匀照射过来的。在双绞线的一个绞合周期里,两根线会轮流“靠近”干扰源。由于两根线完全对称,它们感应到的外部干扰电压幅度相等、相位相同。而在接收端,网口变压器只识别差分信号(即两线电压的差值),对于这种“同向同幅”的外部干扰,会被当作“共模噪声”直接抵消掉(共模抑制),相当于穿了一层“隐身衣”。- 确保特性阻抗稳定
每一对线的绞距(拧的松紧度)都经过精密计算。不同的绞距决定了单位长度的电感和电容,从而决定了特性阻抗(通常为100欧姆)。只有阻抗恒定,信号在传输时才不会发生反射,保证波形完整。而且,为了让四对线之间互不干扰,每一对线的绞距都不一样(有的密有的疏),这样它们之间的串扰信号就无法同步叠加。一个冷知识: 绞得越密(绞距越小),抗干扰能力越强,但信号衰减也越大(因为线被拉长了)。所以超五类线比六类线绞得松,而七类线为了抗干扰,绞距极密,导致线径很粗很硬
5、6、7类线,简单来说,是不同等级和年代的网线标准。它们的数字越大,通常意味着传输速度越快、频率带宽越高、抗干扰能力也越强,当然,价格和施工难度也水涨船高
曼彻斯特编码
是一种同步技术,在数据通信中,将始终信号和数据信号结合到同一个比特流中。

但是曼彻斯特编码的效率只有50%,一般的数据被浪费了。因此现在这个编码被淘汰了。
举个例子:传输二进制数据 10
假设我们规定“低到高跳变”代表0,“高到低跳变”代表1。
发送比特“1”:在比特周期的前半段保持高电平,到正中间时突然跳变到低电平,并保持到结束。
发送比特“0”:在比特周期的前半段保持低电平,到正中间时突然跳变到高电平,并保持到结束。
这样一来,接收方只要盯着信号看:只要有跳变,就知道一个新的比特位正在中间点,从而把时钟同步过来;同时,看跳变的方向,就能把数据解析出来。
- 每一个bit的位时间中有一个信号跳变
- 允许接受和发送方节点之间进行时钟同步,节点不需要集中的全局时钟。
4B5B编码:用分组映射保证跳变。将每4位数据映射成5位符号进行传输,保证5位码中至少有两个1,从而确保有足够的电平跳变用于同步
千兆以太网采用8b10b编码。
有了交换机后主机有一个专用和直接到交换机的连接, 对每个帧进入的链路使用以太网协议,没有碰撞全双工。每一条链路都是一个独立的碰撞力,。MAC的协议在其中就弱化了。因此不会监听到其他人发送数据。
交换机可以通过自学习,得到那些主机可以通过哪些端口到达。当接收到帧,交换机学习到发送站点所在的端口,记录发送方MAC地址进入端口映射关系,在TTL之后就可以删掉。如果不知道就直接进行泛洪,泛洪的返回是单播而不是广播。交换机还可以级联到一起,避免了hub在同一个碰撞域下的问题。
但是交换机也是会成环的,为了防止成环,工程师通常会开启spanning tree protobuf(生成树协议)或者MSTP。因此物理上交换机还是成环的(冗余备份),逻辑上STP吧其中一条线切断,进行阻塞不转发数据。如果正常工作的链路断了,STP会迅速重新计算,把阻塞端口打开,恢复网络联通。非网管型交换机(傻瓜交换机)通常不具备。
正常的交换机可以配虚拟局域网,但是傻瓜式交换机不具备这种功能。
网关交换机,它们通常被称为“三层交换机”或“可管理二层交换机”,除了处理MAC地址,还能理解IP地址,甚至能扮演部分路由器的角色。可以配置虚拟局域网。
路由器
交换机和路由器都是存储转发设备,但是层次不同,
交换机是链路层设备,检查链路层同步。路由器是网络层设备,检查网络层头部。
交换机和路由器都有自己的转发表。
路由器维护路由表,执行路由算法。路由算法能够避免环路,无需执行生成树算法,可以以各种拓扑构建网络,对广播分组做限制,不是即插即用的,配置网络地址。
数据中心和一般的局域网需求不一样。多种应用,每一种都服务海量客户端。高带宽,低延迟,高可靠性。
防火墙
虽然TCP是双工的,但是防火墙可以通过配置谁允许第一次握手来放行出入站流量。
无状态分组过滤:不记住之前发生过的通信,只检查源IP,目标IP,源端口,目标端口,协议类型等。但是问题是,对于返回的数据包,防火墙并不知道,这个包是不是刚才某个合法请求的返回包?因此还要进行反向配置。
有状态分组过滤:除了检查数据包,还会维护一个状态表,防火墙只会方向 之前建立过连接的返回流量。比如外部要访问我的网站,必须要先建立TCP连接。 不然直接发送数据包就会被拒绝。
防火墙更关注谁能连接进来,而应用层网管更关注连进来之后,这个应用请求具体在干什么。
防火墙通常是L3、L4层工作的。应用层是在L7层的。网关还可以进行请求转发,鉴权等逻辑。可以深入的对数据流做剖析。
IP spoofing (ip欺骗):路由器不知道数据包是否来自于声称的源地址。
新兴网络技术
软件定义网络

我们需要共用操作系统。在操作系统之上将应用解耦出来。

下层的交换机只进行简单的报文的转发。而不需要管理复杂的网络应用。复杂性就放在操作系统上的应用来实现。因此这里要开放硬件接口。还要一个可扩展的操作系统,定义良好的开发API。

软件定义网络的一种实现叫做OpenFlow。一个普通的以太网交换机内部分为数据平面和控制平面。数据平面负责报文的转发,控制平面负责路由的学习,路由的配置。改造的时候,我们要把openflow的客户端嵌入其中。然后在上面开发一个openflow的控制器。通过控制器给Openflow的客户端下发一些配置信息。

控制平面控制交换机中流表中的项目。

比如途中的5.6.7.8的数据会被转发到端口1上去。其中流表的表项是三个部分构成规则,行动,信息统计。
这里的行动可以是转发报文到其他端口,封装发给控制器,送到正常处理流水线,修改字段。
数据命名网络
named data networking,NDN。
如今的互联网实际上是以节点为中心的。给它提供了IP地址。
数据命名网络是以数据为中心组长网络的。

IP模型
- 中间节点不可见
- 中间节点不可选
- 中间节点不能衡量成功与否
- 存储(队列)不可缺但不可见
而在NDN中路由器可以带有存储能力。

被访问过的内容会被缓存起来。当一个包到达NDN路由器,那么NDN首先会差存储,如果有对应的内容,会直接进行返回。打破了传统端到端的模式。
DND中需要报文有name,分别是interest package和data package。但是都没有IP地址,NDN路由完全是通过名字来进行的。

我们只要关心的信息,不想知道这个信息到底在哪个节点上。数据消费者发送interest报文,生产者发送data报文。分级结构命名,使用/表示名字分级构成
/USTC/videos/demo.mpg 。类似http中的url。
NDN使用了TLV编码格式,type ,length,value。type表示value的含义。length表示value的长度。TLV是嵌套结构,value中还可以嵌套value。

数据命名网络还没有落地。
移动优先网络
现有网络IP特性:ip具有地址和身份双重特性,接入点变化,IP地址改变。
导致了,网络层无法识别用户,应用层断续重传效率低下。
设备哦可能由于一定导致IP地址产生变化。

BoblityFirst,将名字和地址分离,在网络中加上了另外的信息,guid,全局唯一名字标识,来作为不变的部分。

地址是允许变的。类似DNS。
