计算机网络为什么要分层?

1、什么是网络

  计算机网络(可简称网络)把许多计算机连在一起,而互联网则是把许多网络连接在一起,是网络的网络。
  以小写i开始的interne(互联网)是通用词泛指由许多个计算机网络互联而成的网络。在这些网络之间的通信协议是可以任意的。
  以大写字母I开始的Internet(互联网)是专用名词,他指当前全球最大的,开放的由众多网络相互连接而成的特定互联网,并采用TCP/IP协议族作为通信规则,且前身是美国的ARPANET。Internet的推荐翻译是“因特网”。

2、网络作用范围分类

2.1、WAN

  WAN(wide area network)广域网,作用范围通常是几十到几千公里。广域网是互联网的核心部分,其任务是通过长距离运输主机所发送数据。常见于光猫或路由器的外网接口。

2.2、MAN

  MAN(metropolitan area network)城域网,因器作用范围较小,通常并入局域网范围。

2.3、LAN

  LAN(local area network)局域网,通常公司,或家庭内主机相连组成的网络叫局域网。范围小于1KM,常见于路由器的LAN口。

3、网络的体系结构

  计算机网络是个非常复杂的系统,两台计算机通信除了有一条数据通道之外,还有更多的工作需要完成。相互通信的两个计算机系统必须高度协调工作才行,而这种协调是相当复杂。
  为了设计设计这样复杂的计算机网络,最初ARPANET提出分层的想法。分层可以将庞大而复杂的问题,转化为若干个局部问题。全球那么多网络当然也产生了很多的体系结构,全球经济的发展迫使不同网络体系结构的用户迫切的能够互相交换信息。为了不同体系结构的计算机网络都能互联,国际标准化组织定义了著名的开放系统互联基本参考模型OSI/RM(open systems Interconnection reference model)简称OSI。
  OSI的七层协议体系结构虽然概念清楚,理论也较完善,但他既复杂又不实用。后来就简化出了TCP/IP体系结构,并得到了广泛的应用。体系结构是抽象的,而实现这是具体的,是真正运行的计算机硬件和软件。

在这里插入图片描述
  其中运输层也通常称为传输层。在学习计算机网络原理是往往采取这种的办法,将OSI和TCP/IP优点综合,采取一种只有五层协议的体系结构。

3.1、物理层

  物理层,是参考模型的最低层,也是OSI模型的第一层。它实现了相邻计算机节点之间比特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关心网络的具体传输介质。“透明传送比特流”的意思是经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

3.2、链路层

  单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?这就是"链接层"的功能,它在"物理层"的上方,确定了0和1的分组方式。
  早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做"以太网"(Ethernet)的协议,占据了主导地位。
  以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
在这里插入图片描述
  "标头"包含数据包的一些说明项,比如发送者、接收者、数据类型等等;"数据"则是数据包的具体内容。"标头"的长度,固定为18字节。“数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
  上面提到,以太网数据包的"标头”,包含了发送者和接受者的信息。那么,发送者和接收者是如何标识呢?

以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

在这里插入图片描述
  每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。

定义地址只是第一步,后面还有更多的步骤。
首先,一块网卡怎么会知道另一块网卡的MAC地址?
回答是有一种ARP协议,可以解决这个问题。(下篇将会写到ARP相关内容),以太网数据包必须知道接收方的MAC地址,然后才能发送。

3.3、网络层

  以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,北京的网卡就可以找到纽约的网卡了,技术上是可以实现的。
  但是,这样做有一个重大的缺点。以太网采用广播方式发送数据包,所有成员人手一"包",不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是不合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难。
  互联网是无数子网络共同组成的一个巨型网络,想象上海和洛杉矶的电脑会在同一个子网络吗,这几乎是不可能的。
  因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。(“路由"的意思,就是指如何向不同的子网络分发数据包,下篇将会总结。)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。
  这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址”,简称"网址"。

于是,"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

  规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。结合上篇写过的IP协议,本文就不在赘述。
  根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。

把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

  具体来说,IP数据包也分为"标头"和"数据"两个部分。
在这里插入图片描述
"标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。

IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。
因此,理论上,一个IP数据包的"数据"部分,最长为65,515字节。
前面说过,以太网数据包的"数据"部分,最长只有1500字节。
因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

ARP协议
  因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,只有知道对方ip才会去通信,但是我们不知道它的MAC地址。
所以,我们需要一种机制,能够从IP地址得到MAC地址。
  这里又可以分成两种情况。第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。
  第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。
总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

3.4、传输层

  有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。
  接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?
  也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
  "端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

"传输层"的功能,就是建立"端口到端口"的通信。相比之下,“网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字”(socket进程间通信方式之一)。有了它,就可以进行网络应用程序开发了。

相关的传输层协议UDP,TCP等以后在详细总结。

3.5、应用层

  应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。“应用层"的作用,就是规定应用程序的数据格式。
应用层协议众多,dns、ntp、http,https,ftp,ssh,tftp,snmp,pop,imap、smtp、Telnet等等
  举例来说,UDP或TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层”。这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。
在这里插入图片描述
详细的数据包内容可以通过wireshark等工具抓取数据包,可以直观的看到数据包的没层包头组成和相关内容。
在这里插入图片描述

4、通信过程

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ZBraveHeart/article/details/123483585