第一章 以太网
第二章 共享总线式以太网
2.1.1 连起来
最简单的连接多节点的方法:总线技术。总线就是一个公共的媒介,每个节点都连在上面,所以每个节点的信号,其他节点都会感知到。
早期的Hub就是基于总线模型,它将每台PC连接到一个接口上,所有接口通过集线器的中继电路连接在一起。为什么要使用中继器,为什么不直接物理连接在一起呢?
- 传输会衰减,从接口收到的bit流复制到每个接口,避免了衰减。
- 可以防止两个节点向总线放置信号造成的短路。
上面说的都就物理层的东西,在数据链路层以太网使用帧来发送数据流。
2.1.2 找目标
为了区分总线上的节点,每个节点都需要有唯一的身份标识。以太网使用MAC(Media Access Control),介质访问地址来区分不同的节点。
MAC地址是一个6字节的字段。每个节点的网卡有一个唯一的MAC地址。
2.1.3 发数据
总线传输的最大特点在于,每个节点发出的信号,所有节点都会感知。所以最大的问题在于各路信号发生冲突。
防止:
- 中继电路
- 从协议角度杜绝。所以引入了CSMA
CSMA(载波侦听机制):发现总线空闲才放置信号
CD(冲突检测):如果完全相同的时刻,另一个节点也放置了信号,检测到冲突以后,撤销声明。
节点获得使用权之后,开始发送数据,以一定间隔放置到总线上,直到数据帧传播完,再进行下一轮的CSMA/CD。
A想与B通信,A会在数据帧的某个字段里面填入B的MAC地址,目的节点会对总线上所有数据的目的MAC地址进行匹配,如果匹配成功的则留下。
广播地址:定义特殊的MAC地址,48位为1,所有接收到此帧的节点均会保存下来提交协议层处理。
2.2 网桥式以太网
网桥:将接口分组,每个组的接口都在一个独立的总线上。减小了冲突域。物理上隔离。
桥接芯片要对数据帧做分析,如果源目的的MAC地址都在总线1上,则不会复制到其他的总线。
所以网桥必须学习MAC-总线的对应关系。
当总线上有数据帧通过的时候,提取其源MAC地址,放入对应表中。
如果帧的目的地址还没有学习到,便向除发送帧的总线之外其他总线转发。
网桥不记录哪个端口所连的节点具有这个MAC,只要数据帧进入总线,所有端口的节点均会知道数据,所以只需要记录总线-MAC统计表。
2.3 交换式以太网
交换机是特殊的网桥。交换机中每个端口组中只有一个端口,也就是说交换机的每个端口都独占一条总线,隔离了冲突域。
网桥学习MAC-总线表,而交换机每个端口占一条总线,于是交换机学习并记录的就是MAC-端口表。
最大的进步在于不再是共享总线,而是可以任意时刻,任意两端口同时收发数据。
第三章 TCP/IP协议
以太网的出现,给系统的互联带来方便的方式,每个节点安装一块以太网适配器,上层程序只要将发送的数据以及目的MAC地址告诉以太网卡,就可以完成通信过程。
但是实际上,以太网不是直接被应用程序用来收发数据的,因为以太网是一个没有传输保障的网络。
- 不会对数据帧进行校验纠错。
- 由于交换量大,可以造成缓冲区队列充满而主动丢弃。并且不会通知发送者。
所以需要运行上层程序来获得可靠数据。
比如NetBEUI,NetBIOS,IPX,TCP/IP,这些协议其下层调用以太网提供的服务,上层对外提供新的调用接口。
而TCP/IP因为适用广,性能好,可以在超大规模的网络上运行,迅速得到普及。
3.1 IP
以太网已经实现了OSI的下三层,即物理层、链路层、网络层,
(现在普遍认为以太网只作用到了链路层,这种误解的原因是以太网与TCP/IP结合就沦落为TCP/IP的链路层,其第三层地址被以太网IP所映射掉了。)
而且以太网定义了MAC地址,也有自己的物理层,完全可以用来进行寻址。那么完全靠MAC来寻址的缺点:
- MAC 太长,48bit,用于路由寻址的时效低。
- 世界上不是每个环境都用以太网来建立网络,还可以有其他的网络系统,有其他的寻址方式。
以太网天生的弱点导致它必须向TCP/IP合作,而且只能将MAC地址隐藏,对外通通使用IP地址。
因为除了以太网以外,还有很多其他类型的联网方式,而几乎所有的联网方式都有自己的编址和寻址方式,为了兼容,只能将地址全都映射到IP地址上
ARP协议:以太网交换机是不理解IP地址的。所以需要将IP地址映射到MAC地址。
ARP协议就是用来处理一种地址和另一种地址的映射。运行在每个网络设备上,将一种地址映射成底层网络设备所使用的另一种地址。
所以每种网络要想用IP来统一就必须运行各自的ARP协议,比如以太网的ARP , 帧中继的ARP。
我们以浏览器中输入网络域名之后发生的事情来举例。
- 首先DNS兑换程序自动向DNS服务器查询,获得域名对应的地址,然后用IP地址与服务器通信。
- 数据包带着IP地址到了服务器所在的局域网,会通过局域网的路由器发出的ARP请求,将IP地址兑换为服务器所在局域网的地址,
- 如果服务器所在的局域网是以太网,则对应成MAC地址,然后通过以太网交换设备,找到此MAC地址所在的交换机端口,将数据包发向这个端口。
上述过程发生了两种不同的兑换:
- IP转换为域名:为了方便记忆
- MAC转换IP:为了统一。
其实以太网适合局域网通信,但是不适合广域网,广域网的联网协议,比如PPP , HDLC , FrameRelay , X25 , ATM等,也如以太网一样各有各的寻址体系。
在一个Internet上有如此多的不同类型的网络,如果要联通,需要各种转换,映射。所以最好才解决方案是给他们通通分配一个IP地址给每个节点,对外以IP地址作为寻址地址,再将IP地址映射到所在网络的地址上,比如IP映射到Frame Relay 的DLCI ,映射到ATM的地址等。
3.2 IP的另一个作用
IP层另外的作用是适配上下层:给链路层和传输层提供适配。
链路层有MTU的概念:链路的最大传输单元,即每帧所允许的最大字节数。
链路层就类似司机和交通规则,对货车的载重、大小有要求,如果货物太大,就必须分割。这个动作是由IP层程序来做,也就是IP根据链路的MTU来分割货物,然后贴上源目的IP地址、顺序号。路由器每次选择的路径不一样,所以到达目的地以后可能乱序了,此时可以使用顺序号。这个顺序号是根据分割处相对起点的距离,根据这个号,等所有货物到达了以后,对方的IP程序可以将这个号码组装起来。
每个货物块都携带IP头,但是只有第一块携带TCP头部 。因为传输层头部是在应用数据之前的,所以IP在分割的时候,一定会把头部分到第一块中。
3.3 IP缺乏传输保障机制
IP最大的作用是寻址和路由,以及适配链路层的MTU。但是以太网是个面向无连接的网络, 不保障数据一定会传送到对方。
Frame Relay协议,其前身X.25协议,有很好的传输保障功能,因为其设计初衷是为了运行在不稳定的链路,当链路的质量不断提升,x25的做法有些多余,所以在FR替代了X25,只留下流控机制。
但是以太网和FR都没有实现端到端的传输保障。端到端是相对于“过路”而言的。过路是指在两个终端之间通信路径上的网络设备之间的路径。链路层只保障两个设备之间传送的数据无误,但是不能保证最终终端传输的无误。
3.4 TCP和UDP
TCP/IP协议包含两个亚层:
- IP:统一底层网络地址和寻址
- TCP或者UDP:逻辑上位于IP上。
TCP和UDP的功能
- TCP功能:维护复杂的状态机,保障发送方发出的数据包都会传送到接收方。出错的话,则反馈信息。
- UDP功能:TCP/IP对以太网的透传。没有传输保障功能的亚层。除了UDP可以提供比以太网更方便的调用方式,其他没有本质区别。
TCP/IP协议向应用程序呈现的接口就是Socket接口,即插座接口。TCP/IP想让应用程序更方便的使用网络,就像插头插入插座一样。
基于TCP/IP的应用程序,必须依赖于TCP/IP协议,如Ping , Trace , SNMP,Telnet , SMTP,FTP,HTTP
这些协议加上IP、TCP等,然后加上物理层链路层(以太网等),形成了TCP/IP协议簇。
所以说TCP运行在终端上,监控终端最终发送的接收的数据包的顺序、缓存区、校验。
3.4.1 TCP协议
TCP就是个押运员,是由它把货物交给IP做调度的。
货物最初是由应用程序生成,调用Socket接口向接收方发送货物。通告TCP/IP去特定的内存区将数据复制到Socket缓冲区,然后TCP再从缓冲区将数据通过IP层分片之后,从底层网络适配器发送到对端。TCP通过MSS(max Segment Size)来调整每次转给IP层的数据大小。而MSS值完全取决底层链路的MTU。
为了避免IP分片,MSS总等于MTU值减掉IP头,再减掉TCP头的值,TCP发送给IP的数据,IP加上IP头之后,恰好等于底层链路的MTU值,使得IP不需要分片。
TCP将上层应用的数据完全当成字节流,不进行定界处理,认为上层应用数据就是一连串的字节,不认识字节的具体含义,却可以分割这些字节,封装成货物进行传送,但是必须保证数据排列顺序。
TCP将上层数据“分段” , IP将TCP分段再“分片”(若此段大于MTU)
IP到达目的地以后,会将分片合并为分端,然后放到货仓,顺序排放,不管上层消息的分界。
3.4.1.1 UDP协议
UDP只是被动的起到了一个IP和上三层的接口的作用。
没有出错重传,没有缓冲、定时器、状态机,而且也不会像TCP将数据流分段,适配MTU的工作完全由IP来做。
没有握手机制,所以UDP头部只有8个字节长,包括目的和源端口号,UDP数据包长度、UDP校验和,效率高。
用于实时性高的地方:视频流
3.4.1.2 端口号
OS上运行N个程序,如果需要通信,可以使用号码来标识,所以只要知道了进程号就可以区分程序。
同一PC上的程序通信,一般是在内存中直接通信,但是如果两台计算机的两个程序都需要通信,若用内存共享,成本太高,所以可以采用先发送到另一台计算机,然后让接收消息的计算机将这个消息发送给对应的程序。
所以接收方的OS中的TCP/IP协议必须知道某个数据包应该放到哪一个应用程序的缓冲区,因为同一时刻可能有多个应用调用Socket 进行数据收发。
为了区分正在调用Socket的不同应用程序,规定了端口号。
所以在调用socket的时候,必须声明连接目的计算机TCP/IP协议的那个端口号。
3.5 TCP/IP与以太网的关系
有人把TCP/IP与以太网等同起来,是完全错误的。
TCP/IP与以太网是互相利用,而非相互依存。
TCP/IP协议不像以太网有底层专门的硬件,绝对是可以租用一切合适的硬件来作为物理和链路层。
比如TCP/IP可以用无线、USB、COM串口、ATM作为物理层和链路层。
以太网有自己的网络层编址和寻址,有网络层的元素
TCP/IP在网络层和传输层的功能应用太广泛了,所以OSI的第三和第4层几乎是被TCP/IP统治了。
第四章 协议融合
4.1 网络通信协议的四级结构
网络通信协议一般可以分为:Payload 层、信息表示层、交互逻辑层、寻址层
其中最重要的是交互逻辑层
4.1.1 Payload层
payload指的是与本协议逻辑无关的最终数据。可以是最终应用的数据,也可以是另一种协议的信息表示层+Payload
协议A封装了B的信息表示层+Payload数据,可以说协议A封装了B,或者A承载了B,或者说B is over A(BoA)
而AmB则是一种彻底的协议转换,而不是仅仅做隧道封装,描述一种协议被Map到另一种协议。
4.1.2 信息表示层
附加到Payload数据之外的一段数据,是协议开销。
运行在通信双方的通信协议用来交互各自的状态,比如信封上的姓名等。
4.1.3 交互逻辑层
这一层其实就是运行在通信双方协议系统上的动作程序代码逻辑,它根据对方传送来的信息表示层数据作出动作。返回自己的信息表示层。
是协议的设计思想,是协议的灵魂。
4.1.4 寻址层
寻址层顾名思义是找到目标的一套编址和寻址机制。不同协议的寻址层可以互相映射翻译。
4.2 协议融合的三种方式
- 调用:完全利用另一种协议
- 隧道封装(Tunnel):将另一种协议完整打包
- 映射(Map):对另一种协议进行翻译,只将原来协议的Payload层数据提取,重新打包到新的协议数据包中。
4.2.1 调用
因为协议自身没有某些功能。比如TCP需要调用IP,因为TCP没有寻址的功能。IP调用以太网,因为IP没有链路传输的功能。
IP调用PPP:就是上层协议为了达到通信目的,使用另一种协议来服务。
4.2.2 隧道
将一种协议的完整数据包(包括Payload和协议开销)作为另一种协议的Payload进行封装。
所以协议转换的设备只要将数据包通通打包即可,不需要关心内层协议是什么。
Tunnel主要用于:由于内层协议和外层协议都在某一方面有相似的功能,但是在某些条件下,内层的协议不一定比外层的协议更优秀,如同用船来装火车箱。另外一个目的是伪装内层存协议。
4.2.3 映射关系
Map比Tunnel更复杂,更融合。
所谓Map就是将内层协议的部分或者全部逻辑映射翻译到外层协议对应的功能相似的逻辑上。
内层的Payload层在Map里面不会改动,因为只有两端的通信应用程序才能理解。
4.2.4 Tunnel 和Map融合方式各论
TCP/IP满足了Internet范围的网络通信,FC满足了后端存储的专用高速公路,而SCSI不适合Internet的通信。这就如同火车或者汽车,同样是运输货物,但是它们都适应了不同的需要。
对于SCSI而言,如果要跨越大范围的通信,就要将其承载到TCP/IP上,形成了ISCSI协议。TCP不用关心SCSI协议的什么,只需要封装和传输。同样,因为以太网是面向无连接的,没有握手过程,也没有终端认证机制,没有NCP(PPP用来协商上层参数的),而PPP却有,所以PPP适合ISP对接入终端进行认证。但是PPP不如以太网广泛,所以融合成为PPPoE
4.2.5 Tunnel方式
ISCSI 和PPPoE是典型的Tunnel。之前已经定义了Tunnel模式 ,就是两种协议对某一特定的功能,都有自己特定的实现。如果一种协议在某方面的功能,另一协议没有实现,就是调用。比如IPoE,因为IP没有链路层功能。
IP与以太网之间的编址逻辑是映射而不是使用关系,即IP地址与MAC地址相互映射。
ISCSI中,TCP/IP可以实现寻址和传输保障,而SCSI协议也可实现寻址和传输保障。
4.2.5.1 VPN的引入
Tunnel另一个作用是伪装。两种协议实现的功能、适用 的环境都相同,但是还是需要tunnel
比如IP协议中的GRE,通用路由封装。
将IP协议承载到IP本身上面,自己承载自己,再封装一层,使得一些不能在公网路由的IP包,封装到可以在公网进行路由的IP包
两端就像在一个内网里面一样,经过Internet的时候,使用公网地址封装内网的IP包,还可以对IP包进行加密、反修改等。形成IPSec
4.2.5.2 例解Tunnel
- 寄信人将信件(Payload)装入信封(协议信息表示层数据)
- 填好收信人的地址、邮编等(通信协议的信息表示层、寻址层)
- 交给邮局(网络交换路由设备)
- 物流业借助水陆空等“链路层”。建立了自己的流程体系(协议交互逻辑)
- 用户可把信件封装到邮政普通的信封直接发,也可以封装到快递公司的信封发送,
- 把邮政协议Tunnel到快递公司的可以获得快速、优质的服务。
若A快递公司在北京没有送货机构,但是青岛需要向北京送货?
可以让有送货机构的B代送,到目的地以后B的送货员剥开了信封,用户收到了快递A的信封,以为是A送过来的,这就是伪装。
4.2.6 Map方式
Map就是将一种协议逻辑翻译成另一种协议逻辑,Payload数据完全不变。
A将青岛地区的送货外包给B,但是表面上必须保持A的原样。
起初:客户信件放入A信封,再封装成B,这就是Tunnel。
现在:
- 让B的取件人了解寄件人提供的信息,取代了A公司的角色,用户按照A公司的协议将信封头信息告诉取件人。
- 取件人直接将信件装入了B的信封,但是将A的信封头转换为了B的信封头。
- B转发以后,送货员将B的信封头转换为A的信封头。
所以两端的用户感受不到中间是有B完成的。
Map方式最大的好处在于开销变小。
比如IP地址必须要映射到MAC地址才能享受以太网服务