一、OSI参考模型
今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。
1、OSI的来源
ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
2、OSI七层模型的划分
每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。
![](https://i-blog.csdnimg.cn/blog_migrate/af4e21f32e7838f1880b0e5e3144e9de.png)
3、各层功能定义
这里我们只对OSI各层进行功能上的大概阐述,不详细深究,因为每一层实际都是一个复杂的层。后面我也会根据个人方向展开部分层的深入学习。这里我们就大概了解一下。我们从最顶层——应用层 开始介绍。
整个过程以公司A和公司B的一次商业报价单发送为例子进行讲解。
<1> 应用层
OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。
<2> 表示层
由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。
<3> 会话层
会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确定公司B接收到此份报价单后,此次会话就算结束了,外联部的同事就会终止此次会话。
<4> 传输层
传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路
。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。
传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。
<5> 网络层
本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。
网络层就相当于快递公司庞大的快递网络,全国不同的集散中心,比如说,从深圳发往北京的顺丰快递(陆运为例啊,空运好像直接就飞到北京了),首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。
<6> 数据链路层
将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。
数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。
MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。 在实际使用中,LLC子层并非必需的。
这个没找到合适的例子
<7> 物理层
实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。
快递寄送过程中的交通工具,就相当于我们的物理层,例如汽车,火车,飞机,船。
4、通信特点:对等通信
对等通信,为了使数据分组从源传送到目的地,源端OSI模型的每一层都必须与目的端的对等层进行通信,这种通信方式称为对等层通信。在每一层通信过程中,使用本层自己协议进行通信。
![](https://i-blog.csdnimg.cn/blog_migrate/fc1f1946afa902fbd2cfd4e94028e128.png)
二、TCP/IP五层模型
TCP/IP五层协议和OSI的七层协议对应关系如下。
![](https://i-blog.csdnimg.cn/blog_migrate/eca0e73015d9249281bb4776da3b7a08.png)
在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的。
![](https://i-blog.csdnimg.cn/blog_migrate/e7245ba58f2248ece3105e0937fee0f6.png)
在每一层实现的协议也各不同,即每一层的服务也不同.下图列出了每层主要的协议。其中每层中具体的协议,我会在后面的逐一学习。
一、数据封装
当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,知道最后到物理层数据转换成比特流,送入网络。而再这个过程中,每一层都会对要发送的数据加一些首部信息。整个过程如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/01d5e1d94cbca6d6acd2d77d84648683.png)
如图可以看出,每一层数据是由上一层数据+本层首部信息组成的,其中每一层的数据
,称为本层的协议数据单元 ,即PDU.
应用
层数据在传输层添加TCP报头后得到的PDU被称为 Segment(数据段 ),图示为TCP段
传输层的数据(TCP段)传
给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包); 图示为IP数据包
网络层
数据报(IP数据包)被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧),图示为以太网帧。
最后,帧被转换为比特,通过网络介质传输。
这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。
二、数据格式
需要注意的是,这里所说的以太网帧,与我们常说的以太网是不一样的。下面我们就来介绍每一层数据的 首部信息 内容。
首先我们知道世界上有个协会叫作IEEE,即电子工程师协会,里面有个分会,叫作IEEE802委员会,是专门来制定局域网各种标准的。而802下面还有个分部,叫作802.3.就是我们经常提到的 IEEE802.3,这个部门制定的规范叫以太网规范,这个以太网规范中就定义了上面提到的“以太网首部”,这个以太网规范,实际只定义了数据链路层中的MAC层和物理层规范。(注意数据链路层包括MAC子层和LLC子层两个子层,而LLC子层是在IEEE802.2中规范的)。
1、以太网帧格式
以太网常用帧格式有两种,
一种是Ethernet II,另一种是IEEE 802.3 格式。这两种格式区别是:Ethernet II中包含一个Type字 段,。而IEEE 802.3格式中,此位置是长度字段。
其中Type字段描述了,以太网首部 后面所跟数据包的类型,例如Type为0x8000时为IP协议包,Type为8060时,后面为ARP协议包。以太网中多数数据帧使用的是
Ethernet II帧格式。
a、
Ethernet II帧格式
![](https://i-blog.csdnimg.cn/blog_migrate/1004a084f7ffa2194d41bac89b644ea6.png)
b、
IEEE 802.3
帧格式
![](https://i-blog.csdnimg.cn/blog_migrate/511bfface22c77e70cee47f13475d663.png)
前导码:
Ethernet II是由
8个8‘b10101010构成,
IEEE802.3由7个
8‘b10101010+1个字节SFD..
目的地址:目的设备的MAC物理地址。
源 地址 :发送设备的MAC物理地址。
类型(
Ethernet II)
:
以太网首部 后面所跟数据包的类型,例如Type为0x8000时为IP协议包,Type为8060时,后面为ARP协议包。
长度(
IEEE802.3
):当长度小于1500时,说明该帧为
IEEE802.3帧格式,大于1500时,说明该帧为
Ethernet II帧格式。
数据:数据长度最小为46字节,不足46字节时,填充至46字节。因为最小帧长度是64字节,所以,46+6+6+2+4=64。(不算前导码)
FCS: 就是CRC校验值
以太网首部就是:
![](https://i-blog.csdnimg.cn/blog_migrate/3cef52ccd1973f2a28896503d95bbc91.png)
2、IP数据包格式
IP数据包格式如下图。IP首部,如图也表示出来了。
![](https://i-blog.csdnimg.cn/blog_migrate/831d61e4c09449253d6570d6f79dd13f.jpeg)
3、TCP数据段格式
如图所示为TCP首部和TCP数据段格式
![](https://i-blog.csdnimg.cn/blog_migrate/b61eb1177f7dd93a8cda399419fabdce.jpeg)
下面我们再介绍几个常见的数据格式
4、UDP数据段格式--传输层的
![](https://i-blog.csdnimg.cn/blog_migrate/fc491f65ce08fa6d43afc568843734fb.png)
其中UDP首部如上图所示。
5、ARP数据包格式(摘自:来源:
http://blog.sina.com.cn/s/blog_9c5d29f70101dwgk.html)
![](https://i-blog.csdnimg.cn/blog_migrate/b4e0bf8609547565270d378777fee50d.png)
(1)硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1;
(2)协议类型字段指明了发送方提供的高层协议类型,IP为0800(16进制);
(3)硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
(4)操作字段用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
(5)发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;
(6)发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;
(7)发送方IP(0-1字节):源主机硬件地址的前2个字节;
(8)发送方IP(2-3字节):源主机硬件地址的后2个字节;
(9)目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;
(10)目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;
(11)目的IP(0-3字节):目的主机的IP地址。