OSI模型

OSI模型
  OSI Model是Open System Interconnect Model的简写,即开放系统互联模型。它定义了网络工作所必须的独立功能。
  OSI Model将网络分成成七个独立功能。这与客机类似:发动机提供向前的动力,机翼提供向上的升力,客舱可以容纳乘客,货舱可以存放货物,除了这些还有起落架、灯,应急设备等等。每个部分都提供相对独立的功能,这些功能组合在一起,共同实现了客机的功能。
  OSI Model分成七层,每一层都实现独立的功能,并且与邻接的层有交互,这七层共同实现了计算机之间的数据传递。

  接下来,我们分别介绍这些层以及这些层对应的功能。

物理层(Physical)

  物理层负责传递比特位,也就是0和1。
  物理层对应的是连接两个网络节点的物理介质,通常是各种线,例如经常使用的网线就是其中的一种,还有光纤。实际上物理层对应的无需是“有形的”,也可以是像WiFi和蓝牙这样通过无线电传播信息的方式。

  除了物理的线之外,中继器(Repeater)和集线器(Hub)也属于物理层。中继器只是简单的从一个介质接收信号,对信号进行放大,然后再将放大后的信号从另一个介质发送出去。而集线器类似一个多端口的中继器,如果多个设备接到同一个集线器上,那么任何一个设备发送的数据都会发给其它设备。

数据链路层(Data Link)

  数据链路层负责与物理层对接,负责从“物理的线”(包括无形的,例如WiFi)上接收比特位,以及将比特位通过“物理的线”发送出去。
  数据链路层也称为二层。
  物理网卡(Network Interface Card(NIC))就是实现数据链路层的功能,它从“物理的线”上接收信号并转成比特位,或者将比特位转成信号通过“物理的线”发送出去。无线网卡是类似的,它接收无线电信号将其转成比特位,或者将比特位转成无线信号发送出去。
  数据链路层将比特位收集起来,组成一个比特位的序列,通常称为帧(Frame)。
  数据链路层有一个地址系统,称为Media Access Control address,简称MAC address,即MAC地址。每个网卡都有一个全球唯一的MAC地址,这个地址是厂商生产网卡时“烧录”进去的,所以MAC地址也称为“物理地址”。
  除了网卡,交换机(Switch)也是工作在数据链路层。


网络层(Network)

  网络层负责端点之间的包传递。
  网络层也称为三层。
  网络层传输的数据通常称为包(Packet)。
  网络层也有一个地址系统,称为Internet Protocol address,简称IP address。与MAC address不同的是,IP address不是厂商设置的,而是使用者自行设置的,并且可以变化,所以它也称为“逻辑地址”。
  路由器(Router)就是工作在网络层。


二层 VS 三层

  二层与三层的联系和不同是理解数据从一个计算机传递到另一个计算机的关键。
  二层和三层都有各自的地址系统,每个地址系统都有各自的功能。二层使用MAC地址,而三层使用IP地址。MAC地址用来标识下一跳(hop)(数据包从一个设备直接传递到另一个设备时,接收设备称为下一跳)的;而IP地址是用来标识端点(数据包经过多个设备最终到达目标时,最开始的数据发送者和最终的数据接收者称为端点)的。
  下面通过一个简化后的场景来进行阐述:


  如上图所示,计算机computerA要给计算机computerB发送一个数据包,中间会经过两个路由器router1和router2。
  第一步:computerA发送给router1的(computerA => router1》数据包中包含四个地址,分别是:
源IP地址:computerA的IP地址
源MAC地址:computerA的MAC地址
目的IP地址:computerB的IP地址
目的MAC地址:router1的MAC地址

  第二步:router1接收到数据包后,会将数据包中源MAC地址改成自身的MAC地址,目的MAC地址改成route2的MAC地址,然后发送给route2。router1 => router2的数据包的四个地址:
源IP地址:computerA的IP地址
源MAC地址:router1的MAC地址
目的IP地址:computerB的IP地址
目的MAC地址:route2的MAC地址

  3.router2 => computerB
outer2接收到数据包后,会将数据包中源MAC地址改成自身的MAC地址,目的MAC地址改成computerB的MAC地址,然后发送给computerB。router2 => computerB的数据包的四个地址:
源IP地址:computerA的IP地址
源MAC地址:router2的MAC地址
目的IP地址:computerB的IP地址
目的MAC地址:computerB的MAC地址
  显然,在数据包的传递过程中,IP地址(包括源和目标的IP地址)都不变,IP地址是用来表示端点的;而MAC地址(包括源和目标的MAC地址)会变成每次传递的两个设备的MAC地址,MAC地址是用来表示下一跳的。

传输层(Transport)

  传输层负责区分网络流。
  传输层也称为四层。
  现在的计算机通常都运行着支持多任务的操作系统,意味着同一时刻,用户会使用浏览器浏览网站,同时使用在线音乐播放器播放歌曲,同时还使用聊天软件进行聊天,等等。这样,这些应用的数据都会发给这个计算机的网卡。这就存在一个问题,如何区分哪些数据是属于浏览器的,哪些是属于在线音乐播放器的?传输层就是用来解决这个问题的。
  传输主要通过端口号来区分数据包属于哪个应用。
  有两种不同的网络流,这两种网络流对应两种传输控制协议,它们分别是TCP协议(Transmission Control Protocol)和UDP协议(User Datagram Protocol)。TCP和UDP都分别有65536个端口号可以使用,这些端口号与IP地址(源和目标)共同标识数据包属于哪个应用。
  如果说二层是负责将数据传输到吓一跳,三层负责将数据传输到端点,那么四层可以认为是负责将数据传递到服务。

会话层(Session)、表示层(Presentation)、应用层(Application)

  OSI Model是一个概念上的Model,除了OSI Model还有一个网络模型叫TCP/IP Model。TCP/IP Model是一个实际上应用非常广泛的模型。TCP/IP Model将OSI Model的会话层、表示层和应用层(五层、六层和七层)合并成一个层:应用层。


封装和解封装

  在网络模型中,向实际的数据添加用于传输的附加内容的过程,称为封装;反之,将附加内容剥去的过程称为解封装。
  封装主要用在发送数据时,数据从高层向低层传递过程中;解封装主要用在接收数据时,数据从低层向高层传递过程中。