以太网学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:本文主要介绍我学习使用DM9000以太网模组以及TCP/IP协议过程中的一些心得体会,希望能对接触此模块及网络相关领域的伙伴们提供一些参考。
1 TCP/IP协议体系简单认识
简单理解,TCP/IP协议族是一整套把各种系统连接在一起并保证数据数据准确快速传输的规定和格式。通常我们把TCP/IP协议族抽象成为一种具有四层结构的模型:链路层、网络层、运输层、应用层。每层各负责一个或一系列独立的功能。接下来将简单介绍各层的功能。其中需要注意的一点是——地址标识的概念。协议族中每一层都会有自己特有的身份识别方式。如同我们要读取某个存储器单元的数据需要有地址一样,对等的层与层之间也是依靠某些标志性信息识别传输对象的。这一点在各层的简单介绍中都会提及。
1) 应用层:
应用层直接面向用户,必须具有清晰的会话过程。如常见的HTTP协议、FTP协议等。直观来说,就是为用户提供有特定的功能的一些应用实例。
2) 运输层:
运输层提供的服务可以让应用层的程序或者进程可以通过特定的通道或特定的标志(如端口)获取流入本机的网络数据或者将应用层的数据加上这些特定的标识信息后送入发送队列中。如,A机器的某个应用程序进程PA需要传输一个文件给B机器的一个应用程序进程PB,则进程PA可以通知运输层需要占用某个端口PortA来进行通讯,并告知其需要送到的目的地址与端口号PortB。那么,进程PA通过端口PortA写入给运输层的数据就会被准确的传送到目的地B主机的PortB端口。此时,如果主机B上的进程PB已经将PortB设置为自己的监听端口,那么运输层就会将此数据送给进程PB,从而完成端到端的数据传输。可以看出,运输层就是依靠这种端到端的身份识别实现的通讯。TCP协议和UDP协议是该层中的主要协议。其中,TCP协议是基于连接、确认机制的协议,可以提供可靠的传输服务,两个进程通讯之前必须建立一条TCP连接通道,每次发送数据,对方接收到之后必须回传确认信号以表示数据的接收成功,从而保证数据从某台主机的某个端口准确传输到另一台主机的某个端口;UDP协议提供不可靠的传输服务,它仅提供最大努力的端口到端口的交付服务,并不保证数据的正确,也没有数据到达的确认机制。
3) 网络层:
网络层让信息可以发送到TCP/IP网络上的任一主机上,IP协议是该层中传送数据的主要协议。该层实现了主机到主机的通信,使得TCP/IP网络上任意两台主机之间可以准确传递数据,为上层协议的端到端通信提供了基础。事实上,站在应用层的角度,TCP/IP网络的几乎所有的数据报都是以IP数据报的形式传递的。IP协议依靠主机的IP地址传递数据。另外,网络层还包含另外两个协议:ICMP(Internet 控制报文协议)和IGMP(Internet组管理协议)。其中,ICMP协议传递差错报文以及一些其他需要注意的信息。这些差错报文被交付给IP协议或上层协议使用以便实现差错控制等。
4) 链路层:
控制着同一物理网络上的不同网络设备之间相互传递数据。链路层包含网络接口设备的驱动程序以及ARP(地址解析协议)、RARP(逆地址解析协议)等协议,依靠网络设备的硬件地址(MAC地址)
传输数据。它实现的是网络接口设备之间的直接通信。
以太网的数据传输格式如图1所示:
图 1 以太网帧格式
其中“目的地址”和“源地址”均为网络接口设备的MAC地址;“帧类型”表示数据的类型,如0x0800表示IP数据报,0x0806宝石ARP 请求/应答等;“数据”部分一般是IP数据报文、ARP请求/应答、RARP 请求/应答等。
ARP协议负责将IP数据报中的IP地址转换成实际的网络设备的MAC地址。因为链路层从网络层得到的数据都是IP数据报,里面仅含有目的主机的IP地址信息,而最终网络接口设备发送数据是要依靠目的设备的硬件地址做为身份标识,故需要该协议的支持,以便将IP数据报准确送到对应的网络接口设备。
RARP协议负责将MAC地址转换成IP地址。如何理解这个过程呢?实际上,该协议最先主要用在无盘系统启动时候的网络接口配置上。因为无盘系统不能保存自己的IP地址等信息,当系统启动后,唯一可以得到的是自己的网络接口设备的MAC地址。然后RARP协议会发送RARP请求报文,以便通知服务器分配IP地址给自己,从而完成网络接口设备的配置。
接下来我们看看网络接口设备发送和接收数据的过程(以DM9000为例):
发送的时候:DM9000接收SPCE061A传递的数据(用户填充数据),并在这些数据前面加上一个用于同步的8byte的前导,在后面加上4byte的CRC校验,然后以串行方式将这一串bit流变成物理链路上的传输电平信号发送出去。当然,这个发送的过程还可能包含许多其他的工作,比如,检测当前物理链路是否空闲,能否允许发送数据;检测当前发送的数据是否与其他设备发送的数据发生碰撞等等。
接收的时候:大多数情况下,DM9000都在不断检测物理链路上的电平信号,从物理链路上拾取信号并转换成bit数据流。一旦发现接收到的是8byte的前导,则认为接下来是一帧数据的开始。如果不考虑中间的用户数据的格式,此时DM9000应该一直接收直到这一帧数据接收完毕。事实是,DM9000在接收的同时会将“目的地址”与自己的MAC地址比对,如果匹配的话,则会继续接收数据,否则,将丢弃该帧数据。
我们再来看一下下面的图2,希望能帮助我们理解数据在各层之间传递的过程以及各层的作用:
图 2 数据进入TCP/IP协议栈时的封装过程
面向最终用户的实际有用的数据(用户数据)被应用层添加了一些应用层协议规定的控制信息(Appl 首部),然后交付运输层;
运输层收到来自应用层的数据,添加一些必要的控制信息(如TCP首部),如应用程序的端口号(以便标识是哪个进程需要发送数据)、目的端口号(以便使远端主机能够根据此端口号找到需要接收此数据的应用程序进程)、必要的连接控制信息等,送入网络层发送;
网络层将运输层的数据再次打包,加入源、目的地址、数据包控制信息等,送至链路层转换成实际的可以用于网络接口设备之间通信的数据帧格式发送。
接收数据的过程与此相反。图3清晰的反应出各层的各个协议之间的数据分用过程:
图 3 以太网帧数据在TCP/IP协议栈中的分用过程
网络接口设备接收到的与自己的MAC地址匹配的数据帧,根据其帧类型标识,将拆掉以太网帧头和帧尾的数据送至IP协议或ARP协议、RARP协议处理。
如果数据为IP数据报,IP协议将根据首部的协议类型把拆掉IP首部后的数据送入相应的运输层协