博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络架构与七层参考模式简介
阅读量:4329 次
发布时间:2019-06-06

本文共 10412 字,大约阅读时间需要 34 分钟。

Network Connectivity

1. Important terminologies

1) Link 设备连接的连线。Link本身既可以是有线的,也可以是无线的。

2) Node 设备。电脑,笔记本电脑,手机都可以是Node。

3) Point-to-point 连接的设备只有两个。

4) Multiple access 连接的设备两个以上。多个设备同时去存取的这样一个Link。

5) Switched Network

-> Circuit Switched 通讯之前线路必须建立起来。有实实在在的实体线路,线路可能经过多个交换机,将双方连接起来    

-> Packet Switched 传送资料时,将资料分割成一个个packge(封包),将每一个封包丢到网络中去进行switch,也就是说,资料进行交换的单位是packet。

6) Message 原始的资料。比较大,比较长。

Packet 是 message 经过分割后的单元。如果将太大太长的资料直接丢到网络中去的话,网络可能无法处理。

7) Store-and-forward

网络的设备在处理packge时,通常将其先收起来(store),收起来之后再看看这个packge到底要送给谁(我们在网络上收到packge时,一定要看看这个packge到底要送给谁,注意,资料上会有这个packge是谁送的以及送给谁的信息),因此我们需要去查表(这个表在router或者switcher里都会有),查表之后我们就会知道这个封包如果要送到某个destination的话,需要从哪个port出去。总结下,就是,先将封包(packge)store,然后查表得知从哪个port出去,再将封包(packge)转出去(forward)。每一个封包进来,网络设备(如路由器)的处理都是:收-查-转。

交换机与路由器的端口(port)通常很多,有的十来个,有的二十多个,有的甚至100多个。如果一下子有很多封包进来的话,实际上对设备存在着很大的考验。封包是存放在设备的memory里,如果封包进来的速度很快,会不会因为memory不够大导致来不及存储从而导致封包loss;还有,封包进来的速度很快,但是由port转出去的速度较慢(port有自己的传送速率,比如以太网一般稍快,无线较慢)也会导师封包loss(从快速的Link上收到大量的封包,当这些封包想要转到慢速的网络上去时,会出现问题。也就是进来的封包量太大,来不及消化,那么必须queue起来,放在所谓的buffer里(记忆体里),但是如果进来的还是太快,消化的还是太慢,那么queue就会爆掉,封包无法完全保留,就会开始掉封包)

8) Hosts 主机。

9) Switches

交换机。一般来说,交换机是layer2的设备。但是也会有layer3,layer4的交换机。网络上一般会有很多交换机,我们通常将其接成有回路的状态,因为在网络运作时,回路可以增加网络的可靠性。例如,网络上某一个link断掉,或者某一个交换机荡掉,此时,我们并不希望网络因此就被断掉或隔离开来。

但是,回路本身在package传送时,也会造成两个问题。一是,因为有回路,我们的package可能在网络上绕好几圈,甚至可能会收到好几次。第二个是,package在传输时,会做address learning,学习host到底在什么地方,如果有回路的话,会让address learning错误,这个以后再讲。

10) Spanning tree

为了让网络在运作时,暂时先不要有回路,网络会先建构成一个Spanning tree的结构。下图中红色的link部分就是一个Spanning tree。 

                       图1 A switched network

在一个树状结构中,任意两个Node之间都有唯一的路径。这个路径就是我们package走的路径。因此Spanning tree本身就提供了我们routing的路径。

图1,是一个switched network,我们是用交换机将很多主机连接起来的。这样一个网络我们还是称其为区域网络,因为它是局限在一个比较小的区域内的。而我们整个Internet是非常大的,我们需要将全世界都连接起来。

11) internetwork

如果将很多网络连接起来,就是所谓的internetwork,互联网。也就是将许多网络再连接起来,其中每一个网络都是图1那样的网络。

12) Router/gateway

将网络连接起来的设备就是router或者gateway。

                   图2 Interconnection of networks

用router将许多网络连接起来的就是internetwork,在我们的现实世界中,就是Internet。

13) Host-to-host connectivity

将两个可能在非常远的地方的host,用网络连接起来。它们中间的连接就是所谓的host-to-host connectivity。

14) Address

每一台电脑或者每一个网卡,都必须有一个位置,我们称之为address。因为只要这样我们才能知道它到底是谁,它在哪。

网卡的address 叫作 mac address。

主机的address 叫作 IP address。

15) Routing

在Internet上,我们怎样找到一条路径,将我的package送给对方。

16) Unicast/broadcast/multicast

送出去的package分为Unicast/broadcast/multicast。

Unicast指package只给特定的对象。

multicast指package丢给多个对象。

broadcast指package丢给所有对象。broadcast一般只在一个区域网络中形成。router一般会把broadcast挡掉,不然你一个broadcast,要把全世界都瘫痪掉了。

17) LAN (Local Area Networks)

18) MAN (Metropolitan Area Networks)

19) WAN (Wide Area Networks)

2. How datagrams are delivered in an Internet ?

资料包,又称数据包、数据报、数据电报、数据段,在封包交换网络(package switched network )中的最小传输资料单元。

RFC_1594对资料包的定义如下:一个自我完备的独立资料实体,携带着足够的资讯,它能够从源头,选取路径,最终到达目的电脑,而不用依赖起始电脑、目的电脑以及传输网络预先交换的资讯。(摘自wikipedia)

        图3 How datagrams are delivered in an Internet ?

网络的状态随时在改变,一次封包传送的路径并不是固定的。router之间可以进行信息的交换,这样就可以知道哪边快一点,哪边拥塞等等。

router有将大封包分割成小封包的能力。为什么要分割成小封包呢?因为每一个网络都有一个封包上限值,对于不同的网络其值是不同的。例如对于以太网,封包上限值为1518个byte,而无线网络是2312个byte。如果我们的封包比较大,要进入一个网络时,发现大封包进不去,那就只好将其切成小封包。

切成小封包的做法是将其内容切成小片段,而对于切割后的每个小片段还是要将其包成封包的样子。举例来说,假设你要寄一封信,但是信件内容过多超重了,那么我们自然会将信件分成多封寄出去。但是对于信件的分割来说,我们只是将其内容进行分割,分割后的每一封信仍然需要有完整的信封。当然每一封信件不能超重啦(对于封包来说,就是不能超过要传送的网络的封包上限值)。此后,经分割后的每一封信件,都可以由不同的邮差经过不同的路线,送达给目的地(对于分割后的封包来说,可以由不同的路线送达destination)。

先送的封包,可能在Internet上绕来绕去,反而较晚到达destination;而后送的封包,可能选择了一条没有阻塞的路径,很快就到达了destination。因此先送未必先到。

更严重的是,可能封包在Internet中绕来绕去,最终却绕不出去。比如,网络一会再这边塞,一会在那边塞,就有可能发生这种情况。因此我们有这样一种机制:任何一个封包在网络上绕的时候,每经过一个router(注意:绕来绕去都是靠router),封包本身有一个数字会减1,当减到0时,就将该封包扔掉。因此Internet本身是unrelible的,你丢给它一个封包,它只是尽可能帮我们送达给对方,不排除封包会掉的可能。

封包会掉的一种原因就是上面所提的,封包在网络中绕太久绕不出去,router被丢掉。甚至更简单的原因可以是,一个router连接两个速度不用的网络,比如一个是lan,速度较快,一个是wan,速度较慢。那么如果从lan送进router的封包量比较大,而从router出去的速度又比较慢,那封包一定会暂时存储起来,因为来不及送出去。那么如果存起来的时间太久,或者是说进来的流量太大都不成比例了,那么router最后会留不住封包,因为router内存会满,那么就会把封包drop掉。因此Internet本身是不可靠的,它是尽可能(best effort)帮我们传送,但是万一封包被网络所丢掉,那么所谓的unreliable就意味着封包丢掉就是丢掉了。到目前为止,我们的Internet都是这样的。

如果我们要传送的封包很重要,就要自己想办法保证送到。而TCP是可以做到的(reliable),这个后面再讲。

3. Cost-Effective Resource Sharing(网络上的资源如何做有效的共享?)

1) Resource: links and nodes

     图4 Multiplexing multiple logical flows over a single physical link

图4中,交换机之间的绿色的link就属于需要共享的resource,而router和switch也属于nodes,也属于resource。

2) How to share a link ?

a) Multiplexing

多路复用(Multiplexing,又称“多工”)是一个和领域的专业,在没有歧义的情况下,“多路复用”也可被称为“复用”。多路复用通常表示在一个上多路或的过程和技术。(摘自wiki) 

FDM: Frequency Division Multiplexing(频分复用)

例如此图,将频宽分成4份,也就是有4个频道,每个频道的频宽只有原来的1/4,但是这4个用户可以同时传送封包,只是速度慢些而已。每个用户都有专用的频道。我们将frequency分割(devide)了,因此称为频分

Synchronous Time-division Multiplexing (TDM 时分复用)

将时间进行devide,不同的user在不同的时段传送封包(此处,每个时段user用的都是整个link的频宽)。

注意:无论FDM还是TDM都是Multiplexing的技术,但是其最大的问题就是:万一负载不平衡,比如有些用户想送的资料很多,而有些用户想送的很少,甚至没有,即使这样,频道或者时段也是不可以借用的(开始分配好,就固定下来了),因此效率还是比较差的。

那有没有技术,使得传的少的能借资源给传的多的呢?请看Statistical Multiplexing。

b) De-multiplexing Multiplexing的逆过程

c) Statistical Multiplexing(统计多工)

还是这张图,多个station共用中间那条用绿色粗线标记的Link。

-> Data is transmitted based on demand of each flow.

-> What is a flow?

flow,即为流量。其定义并不是固定的。flow可以是两个host之间所有的流量,也可是仅仅是两个应用比如skype之间的流量

-> FIFO, Round-Robin, Priorities (Quality-of-Service (QoS))

这些机制被交换机所运用。

FIFO:先进先出。每个host都有封包进来,先进的封包先出去,用的是link的所有频宽。当大家负载都差不多大的时候,大家所使用的资源是平均的。当有些用户负载较小时,当其送完,那么频宽就可以都给负载大的用户使用了,是相对公平的做法。

Round-Robin:每个用户的封包进入交换机后,都有一个queue。每个queue轮流送封包出去。公平。

Priorities:还可以为queue设立优先级,优先级高的先送。例如,视讯会议此类需要先送封包,保证了QoS的服务。而FDM,TDM此类是不会管这个的。

-> Congested ?(拥塞?)

肯定会掉封包,但是掉哪个,会有具体的策略,以后再说。

4. Logical Channels

两个host之间建立连线,属于Logical Channels,因为不会有实实在在的物理连线,而且封包传送时一般走的也是不同的path。

 

5. Network Reliability

Network should hide the errors.

1) Bits are lost

-> Bit errors (1 to a 0, and vice versa)

-> Burst errors – several consecutive errors

我们的资料在传送时,是一个bit一个bit传送的,而我们传送bit的link一般为同轴电缆,光纤或者无线。同轴电缆用电压高低表示0和1,容易受电场干扰,发生错误;光纤用光的亮度强弱表示0和1;而无线用电磁波强弱表示0和1,容易受电磁波干扰,发生错误。

2) Packets are lost (Congestion)

3) Links and Node failures

    link可能会断,node,例如router,如果停电或者设备故障,会荡掉

4) Messages are delayed

    封包在网络中绕来绕去,本身就delay了

5) Messages are delivered out-of-order

    封包在网络中绕来绕去,送达的顺序可能不一致,会有先送后到或者后送先到的情况发生。

6) Third parties eavesdrop

    我们的封包都是遵循 Store-and-forward 的机制,也就是说要先store,只要是存在记忆体中,就有可能被第三方所篡改。

Network Architecture

1. Example of a layered network system

我们先来看一个例子,将网络结构较为简单的、粗糙的分为4层,如下图:

最下面的是Hardware,也就是所谓的硬体层,一般是网络设备或者连线的设备,有link、网卡、理由器等等,我们将下面的整个网络都简化到一个所谓的Hardware。

在Hardware上面的一层是Host-to-Host Connectivity。由于我们网络的目的是能够让两端的主机能够连接,那我们在Hardware的上一层就可以想象成,我们有两个主机要连接起来做通讯,因此叫Host-to-Host Connectivity,表示两台主机之间可以做通讯。

而我们的主机上同时又会run很多应用,每一个应用可能会建好几个connection,变成process与process之间的通讯。因此Host-to-Host Connectivity的上一层是Process-to-process Channels.

而最上面的才是所谓的Application Programs.

2.  Protocols

在分层的概念下,一个很重要的元素或者一种很重要的机制就是Protocols,协议(或者叫作通讯的协定)。

那么为什么需要Protocol呢?这是因为我们的网络,是将很多不同的主机或者设备连结起来,那么当我的资料送给对方时,他要如何才能看得懂我送的资料?换句话说,我们要让主机与主机之间能够沟通,沟通就是要把封包扔给对方,那你封包扔给对方,对方为什么能看得懂?因此我们之间封包的格式需要一致。不仅仅是格式一致,封包通讯的流程也要正确,比如你丢给我第一个封包,我看到之后要回你什么封包,你看到我回的封包后要再回我什么封包。因此我们必须要制定Protocol,即双方通信的协议。大家都遵守这个协议的话,才可以通讯。如果你没有遵循这个协议的话,我送给你的资料你可能会看不懂,或者解读错误。

1) Protocol defines the interfaces between

-> the layers in the same system and with

-> the layers of peer system

2) Protocols are building blocks of a network architecture

3) Each protocol object has two different interfaces

-> Service interface: operations on this protocol

-> Peer-to-peer interface: messages exchanged with peer

4) Protocol Specification (协议规格)

pseudo-code(伪代码)

state transition diagram(状态转换图)

message format(信息格式)

注意:即使有明确的协议规格,各个公司或者工程师将其实现时(写成程序),通常也是不同的。当两个或多个实现能够互通时,我们称之为 Interoperable。

5) Interoperable

when two or more protocols that implement the specification accurately

6) IETF: Internet Engineering Task Force

Define Internet standard protocols

协议太多,我们需要有专门的组织来制定标准

3. Protocol Architecture

4. Encapsulation

5. OSI Architecture

将网络功能分成7层。

Physical Layer(实体层)

两台主机之间如何传送资料给对方?通过有线或者无线的媒介,如同轴电缆、光纤等。因此Physical Layer主要讨论的是如何将讯号(二进制)送给对方。

Data Link Layer(数据链路层)

将资料送到destination通常会经过很多网络,Data Link Layer 讨论的是如何将资料(frame)往前送一步,例如,中间有很多router,每送给一个router,就会依靠Data Link Layer。

需要注意的是,如果同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。因此我们需要一种方法,根据目的主机的IP地址,来获得其MAC地址。这就是ARP协议要做的事情。

所谓地址解析(address resolution)就是主机在发送帧(frame)前将目标IP地址转换成目标MAC地址的过程。 另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。(摘自wiki)

注意:ARP是网络层的协议,但工作在数据链路层。

因此,我在一开始提到的,Data Link Layer 讨论的是如何将 frame 往前送一步是指:如果发送方和接收方在同一个区域网络(lan) 中,那么下一步就是指接收方( sender 所填写的 mac address 就是receiver的mac address),如果不在同一个区域网络,则下一步是指 router(sender所填写的mac address 就是 router 的 address )。

Network Layer(网络层)

讨论如何将一个封包(package)送给对方,即送到最远的那个destination,比 Data Link Layer 更远。Data Link Layer 是送一段,而 Network Layer 是送整条路线。

注意:通常,我们的host在接到router之前,中间可能会接触到我们的区域网络(lan),就以下图的Ethernet为例来说,

我们真正的连接是:主机接交换机,交换机接交换机,最后才是交换机接路由器。通常,Switch(这边指Layer 2 的 Switch)只处理 Data Link Layer 的 Protocol,而 Router 和 Host 都是处理 IP 的。而 Switch 根本不处理 IP ,或者说不处理 Network Layer 的 header 。当 package 往下送的时候,每一个 Ptotocol 为了与对方(Peer)沟通,必须将自己与对方沟通的资料添加在 Package 的 Header 里。(注意:Switch 根本不会处理 Network Layer 的 Protocol 的 Header,在此处,Switch 只会去处理我们图中的 Ethernet 的 Protocol 的 Header)

Switch 处理的是 Data Link Layer 的 Header,也就是说会去查看 mac address,也就是网卡的地址(主机接到交换机一定有一个网络口,里面会有一个网卡,现在的笔电一般网卡都是内置的),根据 mac address 就会知道 package 发往哪边。mac address 是网卡对网卡,而 IP 是主机对主机。

Transport Layer(传输层)

每一台主机会run很多不同的应用,比如browser,skype,online game,档案传输等等,每个应用本身在使用网络时会有不同的需求。例如,在做档案传输时,那网络一定要非常可靠(因为档案的内容不容有错);如果在看一个vedio(such as YouTube),YouTube的这个封包在传送时,如果稍微有点错,我们是可以忍受的,因为人的听觉和视觉没有灵敏到一点点错就可以察觉。

Transport Layer 就是负责将资料传送给对方,既可以是可靠的,也可是不可靠的。

6. Description of Layers

1. Physical Layer (如何将原始资料在 link 上传输)

-> Handles the transmission of raw bits over a communication link

a)Coaxial cable(同轴电缆)

b)Twisted pair (双绞线)
c)Optical Fiber (光纤)
d)Air space (wireless radio channel)

-> Different Signal Coding schemes

此处的 Coding 是指如何将bit(0或者1)在 Link 上呈现出来。铜线可以使用高低电位,光纤可以使用光的明暗。下图所示的就是电位。

用高低电位来分别表示1和0,就是一种 Coding 。但是实际上也没有我们想象的这么简单,如果一段很长的资料传过来,上面都是1,那么通通都是高电位,看起来就是一条直线。那么接收方看到的就是高电位拉上来的一条线,根本无法知道有多少个bit传送过来了。

因此每个电位还拥有一个 bit time 的属性,也就是图中电位的宽度。发送方在传送资料时,不仅要把0,1用高低电位表示出来,同时还得把自己发送的clock 隐藏在传送的信息中,接收方会抓出这个 clock ,之后根据这个 clock 用相同的速度来读取资料。之所以要把发送方要将自己的 clock 传送给对方,是因为每台电脑都有自己的clock(石英振荡器),各自石英振荡器的 clock 虽然很准,但是仍然会有误差,而这个误差是会累积的。因此,绝对不可以你用你的 clock 发送,我用我的 clock 接收。接收方必须把发送方的 clock 解读出来。(注释:也就是不能仅仅规定一个高电位或者低电位的 bit time 是多少,因为两边的 clock 解读同一个时间长度是会有误差的。也就是说,不仅要确定一个电位的时间宽度,还得确定以什么速度去接收,两边必须一致。clock 实际上代表了速度)

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/ImaY/p/3997893.html

你可能感兴趣的文章
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>
NSString的长度比较方法(一)
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>