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 ?
Datagram,资料包,又称数据包、数据报、数据电报、数据段,在封包交换网络(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 实际上代表了速度)