第一章.概述
Internet的成功
Internet体系结构被设计成支持现有网络互联,同时提供了广泛的服务与协议操作。
选用数据包的分组交换主要是因为它的鲁棒性与效率,而相对来说数据安全性与交付可预测性(例如有限的延迟)是次要因素。
分层设计
OSI模型:7层
TCP/IP:4层(若分层为5层则加上一个物理层)
TCP/IP协议族的三个主要层次是网络层、传输层与应用层
差错控制与流量控制
总体来说,Internet协议中采取“尽力而为交付”。网络不会花费巨大努力确保数据在没有差错或缺陷的情况下交付,差错通常由校验码来检出,但检出后出错的数据报也仅仅被丢弃而无进一步行动。
同样流控机制也是如此,流控机制将保证发送方不会以比接收方最大接受能力还快的速度发送,若发送超速,发送方将会被通知降速。
网络层与传输层
网络层(IP)提供了一个不可靠的数据报服务,必须由Internet中所有可寻址的系统来实现。
而传输层(TCP与UDP)为端主机上运行的应用程序提供了端到端服务:
其中TCP提供了带有流量控制与拥塞控制的有序、可靠的流交付
UDP除了用于多路分解的端口号和错误检测机制外,基本功能没有超越IP
DNS
DNS是一个运行在Internet上的分布式数据库应用程序,它提供主机名与IP地址的相互转换。
第二章.Internet地址结构
IP地址的表示
IPv4地址为32位,用点分十进制表示,例如165.195.130.107
IPv6地址为128位,用被冒号分隔开的8组4个十六进制数表示,例如5f05:2000:80ad:5800:0058:0800:2023:1d71
通常来说一个块中的前导的0可以省略,全0的块可以用::代替,但::只能出现一次并且应在能替代的最长处。
分类寻址
IPv4地址空间被分为5大类
子网寻址
由于A类与B类为一个网段分配了太多的主机号,而实际我们希望在一个站点接入Internet后为其分配一个网络号,然后由站点管理员进一步划分本地的子网数。
如上例,前16位网络号由Internet集中分配,而后16位由站点本地管理,将其划分为8位的子网号与8位的主机号。
而在此过程中,有多少位用于网络号与子网号的实现方法是使用子网掩码
子网掩码与IP地址按位与操作后,就能得到对应的网络号与子网号
这里值得注意的是:站点之外的路由器做出的路由决策指基于地址的网络号部分,并不需要子网部分,因此子网掩码是纯粹的站点内部的局部问题。
广播地址
在每个IPv4子网中,有一个特殊地址被保留用作子网广播地址。
该地址网络号与子网号被设置为合适的值,而主机号各位则被全部设置成1。
更特殊的是:特殊用途地址255.255.255.255被保留用作本地网络广播(不会被路由器转发)。
实现方法是:将子网掩码取非,再与IPv4地址进行或运算。
CIDR和聚合
CIDR 被称为无类别域间路由
为缓解IPv4地址耗尽的压力,一个短期解决方案是使用CIDR
CIDR 对原来用于分配A类、B类和C类地址的有类别路由选择进程进行了重新构建。
它用 13-27位长的前缀取代了原来地址结构对地址网络部分的限制(3类地址的网络部分分别被限制为8位、16位和24位)
CIDR需要提供一个CIDR掩码:
以CIDR地址222.80.18.18/25为例,其中“/25”表示其前面地址中的前25位代表网络部分,其余位代表主机部分。
上述技术成功缓解了IPv4地址的压力,但未解决路由表条目的爆炸性增长(将显著影响路由性能)
最终发现将网络拓扑排列成一棵树,并对其使用CIDR技术分配地址可以获得一个较小的路由表,由于路由分层,某个路由器不需要知道同层兄弟结点的子节点,只需将多个子节点聚合成一个CIDR掩码更短的网络地址块(可以覆盖更多地址空间)。
IPV6单播地址
IPv6单播地址与IPv4有所不同,最重要的是:无论是单播地址还是组播地址,都需要明确指出地址的有效范围。典型性的范围包括节点本地、链路本地和全球范围。
第三章.链路层
CSMA/CD
当多个站共享同一网络,CSMA/CD 作为一种分布式算法可以控制每一个站发送自己的数据。
一个站首先检测目前网络上正在发送的信号,并在网络空闲时发送自己的帧。如果碰巧其他站同时发送,发生重叠的电信号被检测为一次碰撞,这种情况下,每个站等待一个随机时间,然后再次尝试发送,等待时间采用二进制指数退避的方式(随后每次再碰撞等待时间加倍,在尝试16次后超时)
以太网帧格式
Ethernet II 帧格式
D.MAC为目的MAC地址,S.MAC为源MAC 地址
Type字段中,常见值为:IPv4(0x0800),IPv6(0x86DD),ARP(0x0806)
FCS为32位的CRC校验码
IEEE 802.3 帧格式
以太网帧有最小和最大尺寸,最小的帧为64字节,要求数据区长度最小为46字节,若不足则填充字节(补0)到数据区尾部。
这个最小尺寸的帧的发送时间与帧的往返时间大致相同(略大于),保证发送过程中如果发生冲突,能在碰撞信号返回后停止发送(否则冲突信号还未传回,该帧已发送完毕)。
传统以太网的最大帧长度是1518字节。最大帧长度如果太大,整个帧出错的概率也会升高,同时重传的代价也会变大;但如果最大帧长度太小,则该帧的利用率(有效载荷与帧长的比)又太小。
802.1p/q:虚拟局域网与Qos标签
802.1q中定义了虚拟局域网(VLAN)的功能,该功能保证了物理分组与逻辑拓扑分组的分离。连在同一台交换机但在不同VLAN分组中的主机,在逻辑上看像是在不同网段那样;而连在不同交换机上但在同一个VLAN分组中的主机组成一个广播域,若有组内广播则只在同一VLAN分组内广播。
帧中保留了一个称为VLAN标签的标记,其中包含12位VLAN标识符(提供4096-2个VLAN,保留0与4095)
其中802.1p中还包含支持QoS的3位的优先级,该字段用于表示QoS级别:0级为最低优先级,用于传统的尽力而为的流量;7级为最高级,可用于关键路由或网管功能
网桥和交换机
交换机本质上是高性能的网桥,用于连接多个物理的链路层网络。
每个网桥内部有一个表,它采用后向学习算法来探知网络的拓扑结构,并决定通过目的MAC地址将消息转发给哪一个端口,若表项不存在,则使用泛洪算法探知。
生成树协议
问题出现在:当网络拓扑中出现环路时,帧的泛洪可能导致死循环的泛洪灾难。
解决方案是:使用生成树协议(STP),确保任意两个节点之间只有一条路径,使拓扑结构中最终不含环路。
值得注意的是,这是一个动态协议,定期使用生成树算法,将可以适应网络拓扑结构的变化。
具体实现时,是通过交换一种称为“网桥协议数据单元”(BPDU)的帧来实现的。
STP的第一个工作是选取根网桥,根网桥是在网络(或VLAN)中标识符最小的网桥。当一个网桥初始化时,它假设自己是根网桥,并用自己的网桥ID发送配置BPDU消息,如果它检测到一个ID更小的网桥,就停止发送自己的帧,并基于接收到的ID更小的帧构造下一步发送的BPDU。
而当一个端口进入阻塞或转发状态时,意味着发生了拓扑变化。当网桥检测到一个拓扑变化,它将向根端口之外的端口发送拓扑变化通知。树中通向根的下一网桥将消息转发直至根网桥收到通知。
根网桥会在后续的周期性配置消息中设置TC位,这些消息将被转发并被阻塞的网桥接收,减少其延时计时器的有效期,这样错误条目可得到快速清除和重新学习。
无线局域网-802.11(WiFi)
802.11使用RTS/CTS交换来避免隐藏终端问题(不再详述),但由于隐藏终端问题很少发生,可将RTS阈值设置为很大(1500+)来禁用该功能,可避免该交换带来的额外开销。
802.11的介质访问控制DCF(分布式协调功能):
DCF是一种CSMA/CA方法,这个行为类似于CSMA/CD,但802.11的载波侦听能以物理和虚拟方式实现。
虚拟侦听
在每个站本地都维持一个网络分配向量(NAV),它被用于估计介质传输当前帧所需要的时间,以及下一次传输需要等待的时间。当一个站侦听到一个持续时间大于自己的NAV时,它将自己的NAV更新为这个值。而由于RTS与CTS帧中都有一个持续时间字段,因此在使用NAV之后,在其覆盖范围内的任何站都能看到该字段,以决定自己应该什么时候开始下一次探测以便传输。
物理载波侦听(CCA)
它基于能量和波形识别,用于了解介质当前是否处于繁忙状态,通常与NAV结合使用,以确定一个站在传输之前是否需要等待。
点到点协议(PPP)
PPP支持建立链接的基本方法-链路控制协议(LCP),由于LCP只用于在点到点链路上建立和维护低层的双方通信路径,因此PPP只需关心一条链路的两端,而不必关心共享资源访问的问题。
帧格式如下:
其中7E为其帧标志,使用字节填充法,但在同步线路上使用比特填充法。
转义符为7D,数据部分的7E将被写为0X7D5E,还原时删去所有的7D,并将其后面的一个字节与0X20相或,就可得到原本的帧。
环回
有时用户希望使用Internet协议与本机上的服务器通信,为实现这种功能,通常使用一个虚拟的环回网络接口来实现,以127开始的IPv4地址就是为该目的而保留的,为此保留的IPv6地