单片机与以太网接口设计厅Word格式文档下载.docx
《单片机与以太网接口设计厅Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机与以太网接口设计厅Word格式文档下载.docx(50页珍藏版)》请在冰豆网上搜索。
第2章TCP/IP协议(栈)简介
2.1TCP/IP协议的分层结构
TCP协议和IP协议是使计算机能相互通信的一组协议中的两个重要协议,通常就用TCP/IP来代表这一组协议。
该协议是用于通信的一个规则或标准,由计算机传送数据时使用,保证Internet上数据的准确快速传输。
本文采用TCP/IP的一种简化的四层模型,分别为:
应用层、传输层、网络层、链路层。
如表2.1所示。
表2.1TCP/IP协议的分层结构
层
主要协议
应用层
FTP、TELNET、SMTP、SNTP、HTTP
传输层
TCP、UDP
网络层
IP、ARP、RARP、IGMP、ICMP
链路层
接口层协议
链路层:
有时也称作数据链路层或网络接口层,定义计算机怎样连接网络,数据必须通过对网络的连接才能传出去,它提供物理介质(如网卡芯片)与单片机的接口,将原始数据转换成上一层能识别的逻辑帧。
网络层:
负责处理从原发送方到目的地的报文地址和路由信息,以便让信息可以发送到相邻的TCP/IP网络上的任意主机上。
IP协议就是层中传送数据的机制。
这一层使用的主要协议还有:
地址转换协议(ARP协议)、反向地址解析协议(RARP协议)、网际控制报文协议(ICMP协议)和Internet组管理协议(IGMP协议)。
传输层:
主要为两台主机上的应用程序提供发送端到目的端的通信。
这一层的协议有两个,基于可靠传输的传输控制协议(TCP协议)和不可靠传输的用户数据报协议(UDP)。
应用层:
负责对接收的数据提供解释服务。
对嵌入式系统来说,有两个协议是非常重要的,即超文本协议(HTTP协议)和文件传输协议(FTP协议)。
超文本传输协议用于将文件从一个主机传送到另一个主机,并在请求方主机上显示文字、文件;
文件传输协议用于将文件从一个主机传送到另一个主机,并将文件存储在发出请求的主机内。
它传送的只是一个拷贝,不是原文件。
其它的协议还有远程登录、简单邮件传输协议、简单网络管理协议等[3]。
2.2TCP/IP协议的封装和分用
TCP/IP协议采用分层结构,实现也采用分层实现的方法。
在实现的过程中首先要了解封装和分用的概念。
2.2.1什么是封装
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层,直到被当作一串比特流送入网络。
其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),这个过程称作封装。
如图2.1所示:
图2.1数据进入协议栈时的封装过程
2.2.2什么是分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈底层向上升,同时去掉各层协议加上的报文首部。
以太网帧要检查首部中的帧类型字段,IP要检查首部中的协议字段,TCP和UDP要检查首部中的端口号来确定数据属于哪一层,这个过程称作分用。
如图2.2所示:
图2.2以太网数据帧的分用过程
2.2.3以太网帧格式
各种通讯协议都有自己的报文格式,TCP/IP也不例外,它也有自己单独的报文格式。
对TCP/IP协议编程,首先要清楚其报文格式。
由于TCP/IP协议采用分层结构,各层都有专用的包头,下面先介绍以太网的物理帧格式,TCP/IP其它各层的帧格式讲座2.3节介绍。
以太网协议不止一种,本课题使用的是802.3协议,物理信道上的收发操作均使用此协议的帧格式。
一个标准的以太网物理传输帧由前导列PR、分隔位SD、目的地址DA、源地址SA、类型字段Type、数据段Data、填充位PAD和帧校验序列FCS共8部分组成。
帧结构如表2.2所示。
表2.2802.3协议以太网物理帧结构
PR
SD
DA
SA
Type
Data
PAD
FCS
56位
8位
48位
16位
46~1500字节
DATA小于46字节时补0
32位
PR:
同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010....。
SD:
分隔位,表示下面跟着的是真正的数据,而不是同步时钟,为8位的10101011,跟同步位不同的是最后2位是11而不是10。
DA:
目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给
哪个网卡。
如果为FFFFFFFFFFFF,则是广播地址,广播地址的数据可以被任何网卡接收到。
SA:
源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同
样是6个字节。
TYPE:
类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。
如:
0800H表示数据为IP包,0806H表示数据为ARP包,814CH是SNMP包,8137H为IPX/SPX包,(小于0600H的值是用于IEEE802的,表示数据包的长度。
)
DATA:
数据段,该段数据不能超过1500字节。
因为以太网规定整个传输包的最大长度不能超过1514字节。
(14字节为DA,SA,TYPE)
PAD:
填充位。
由于以太网帧传输的数据包最小不能小于60字节,除去(DA,SA,TYPE14字节),还必须传输46字节的数据,当数据段的数据不足46字节时,后面补000000......(当然也可以补其它值)
FCS:
32位数据校验位.为32位的CRC校验,该校验由网卡自动计算,自动生成,自动校验,自动在数据段后面填入。
对于数据的校验算法,我们无需了解。
数据帧传输时,除了数据段的长度不定以外,其他部分的长度固定不变。
数据段为46~1500字节。
以太网规定整个传输包的最大长度不能超过1514字节(14字节为DA、SA、Type),最小不能小于60字节。
除去DA、SA和Type共14字节以外,还最少必须传输46字节的数据,当数据段的数据不足46字节时需填充,填充字符的个数不包括在长度字段里,超过1500字节,需要拆成多个帧传送。
事实上,发送数据时,PR、SD、FCS及填充字段这几个数据段由以太网控制器自动产生;
而接收数据时,PR、SD被跳过,它们只被控制器检测,而不被作为接收数据接收,控制器一旦检测到有效的前序字段(即PR和SD),就认为接收数据开始。
2.3TCP/IP的子协议
2.3.1ARP协议
ARP是AddressResolutionProtocol的缩写,中文译作“地址解析协议”。
本质是
完成网络地址到物理地址的映射。
从概念上讲就是找到一个映射方法f,使得“物理
地=f(网络地址)”。
物理地址有两种基本类型:
以太网类型和ProNET令牌网类型,
前者有大型的固定的物理地址,后者有小型的易于配置的物理地址,网络地址特指
IP地址。
地址解析协议ARP是IP能够获得与某个给定IP地址相关的主机物理地址。
ARP
的功能分为两部分:
一部分在发送数据包时请求获得目的主机的物理地址;
另一部
分向请求物理地址的主机发送解析结果。
地址解析原理:
当主机A需要向同一物理网络中的主机B发送IP数据报时,主
机A的IP层要将IP数据报传给数据链路层进行帧封装,封装时要求给出目的主机
的物理地址。
因此,IP层发送IP数据报时通常将产生以下事件:
(1)IP调用ARP,请求IP地址为IB的目的主机B的物理地址为PA。
(2)ARP创建一个ARP请求帧,请求IP地址IB对应的物理地址。
ARP请求
将包括如下信息:
●请求主机的物理地址PA;
●请求主机的IP地址IA;
●目的主机的IP地址IB。
(3)主机A在本地网络中广播ARP请求帧,请求帧的目的地址为广播地址(全为“1”)。
(4)该网络中的所有主机都能接收ARP请求帧,并将该帧中的目的地址IP地址IB和自己的IP地址进行比较。
其地址IB不匹配的主机将忽略这个帧。
(5)如果主机发现请求中的目的主机IP地址IB与自己的IP地址相同,就产生一个包含其物理地址PB的ARP应答帧。
(6)ARP应答帧直接发回给发送ARP请求的主机A(ARP应答帧不以广播方式发送)。
ARP应答帧包含以下信息:
●应答主机的物理地址PB;
●应答主机的IP地址IB;
●请求主机的物理地址PA;
●请求主机的IP地址IA。
(7)利用从应答帧中得到的目的主机的物理地址PB完成IP数据报的帧封装,并将该帧发送给主机B。
这里需要注意一下两点:
(1)ARP请求帧在物理网络中是以广播方式发送的,因此此时还不知道目的主机的物理地址。
ARP应答帧是以单播方式发送的,因为应答方从请求帧中可以得到对方的物理地址。
(2)目的主机必须与源主机位于同一物理网络中。
由于ARP采用的是物理网络中的广播,IP路由器不会对该广播进行转发,因而不能用ARP确定远程网络中主机的物理地址,而且也没有必要知道远程地址的物理地址。
如果目的主机位于远程网络中,IP会将数据报先发送给路由器,然后又路由器进行转发。
在这种情况下,IP只需要利用ARP确定路由器的物理地址就可以了,而路由器将逐级向前转发数据报。
以下是ARP地址解析报文的帧格式:
表2.3地址解析报文的帧格式
字段
以太网首部
硬件类型
协议类型
硬件地址长度
协议地址长度
OP
发送端以太网地址
发送端IP地址
目的以太网地址
目的IP地址
位
16
8
48
32
●以太网首部:
帧封装时加在ARP报文的首部。
ARP报文作为以太网帧的数据部分进行发送。
以太网帧结构参见2.2.3节。
●硬件类型:
16比特,定义物理网络类型。
物理网络的类型用一个整数值
以太网的硬件类型值为“1”。
●协议类型:
16比特,定义使用ARP协议的类型。
如0x0800表示IPV4。
●硬件地址长度:
8比特,以字节为单位定义物理地址长度。
以太网为6。
●协议地址长度:
IPV4为4。
●操作类型:
16比特,定义报文的类型(“1”为ARP请求,“2”为ARP应答,“3”为RARP请求,“4”为RARP应答)。
●发送方以太网地址:
定义发送方的物理地址。
●发送方IP地址:
定义发送方的网络地址。
●目的以太网地址:
定义目的设备的物理地址。
●目的IP地址:
定义目的设备的网络地址。
2.3.2IP协议
正像TCP/IP协议的名称所表达的信息那样,因特网的核心协议是IP和TCP两大协议。
IP协议作为TCP/IP协议簇中的核心协议,提供了网络数据传输的最基本的服务,同时也是实现网络互连的基本协议。
除了ARP和RARP报文以外的几乎所有的数据都要经过IP协议进行发送。
IP协议位于网络层,位于同一层次的协议还有ARP和RARP以及上面的因特网控制报文协议ICMP和因特网组管理协议IGMP。
ARP和RARP报文没有封装在IP数据报中,而ICMP和IGMP的数据则要封装在IP数据报中进行传输。
由于IP协议在网络层中具有重要的地位,人们又将TCP/IP协议的网络层称为IP层。
IP是不可靠的无连接数据报协议,提供尽力而为(best-effort)的传输服务。
IP协议具有以下特点:
(1)是点对点协议,虽然IP数据报携带源IP地址和目的IP地址,但进行数据传输时的对等实体一定是相邻设备(同一网络)中的对等实体。
(2)IP协议不保证传输的可靠性,不对数据进行差错校验和跟踪,当数据报发生损坏时不向发送方通告,如果要求数据传输具有可靠性,则要在IP的上面使用TCP协议加以保证。
(3)IP协议提供无连接数据报服务,各个数据报独立传输,可能沿着不同的路径到达目的地,也可能不会按序到达目的地。
正因为IP协议采用尽力传输的思想,所以使得IP协议的效率非常高,实现起来也比较简单。
随着底层网络质量的日益提高,IP协议的尽力传输的好处也体现得更加明显。
IP层向下要面对各种不同的物理网络,向上却要提供一个统一的数据传输服务。
为此,IP层通过IP地址实现物理地址的统一;
通过IP数据报实现了物理数据帧的统一。
IP层通过对以上两个方面的统一达到了向上屏蔽底层差异的目的。
IP数据报文格式如下表所示:
表2.4IP数据报格式
版本
首部长度
服务类型
总长度
标识
标志
片偏移
生存时间
协议
头校验和
源IP地址
选项
数据
4
3
13
普通的IP首部长为20字节,如果包括选项字段可达60字节。
●IP目前的协议版本为4,因此有时IP也称为IPV4。
●首部长度字段长度为4比特,指出以32位字长(4字节)为单位的数据报首部长度。
由于IP数据报首部包含了IP选项这一变长的字段,所以需要通过首部长度确定首部和数据的分界点。
●用单片机实现TCP/IP协议要作一些简化,不考虑数据分片和优先权。
因此不讨论服务类型、标志和片偏移,只需填0即可。
●数据报总长度字段的长度为16比特,总长度以字节为单位指示整个IP数据报的长度。
IP数据报最大长度可达
(即65535)个字节。
根据首部长度和总长度可以计算出数据部分的长度。
●标识是数据包的ID号,用于识别不同的IP数据包。
●生存时间TTL是个数量级的概念,防止无用数据包一直存在网络中。
一般每经过一个路由器减1,因此通过TTL可以算出数据包到达目的地所经过的路由器的个数。
●协议字段表示创建该数据包的高级协议的类型。
1表示ICMP协议,6表示TCP协议,17表示UDP协议。
●头校验和字段为16比特。
用于保证首部数据的完整性。
数据部分的正确性则由高层协议予以保证。
●源IP地址指发送方IP地址。
●目的IP地址指接收方IP地址。
●选项字段为变长字段,是在传输数据报时可选的附加功能,用于控制数据在网络中的传输路径、记录数据报经过的路由器以及获取数据报在途中经过的路由器的时间戳。
IP选项长度受首部长度限制[4]。
2.3.3ICMP网际控制报文协议
TCP/IP的IP层在完成无连接数据报传输的同时,还实现一些基本的控制功能。
这些控制功能包括:
差错报告、拥塞控制、路径控制以及路由器和主机信息的获取等。
实现这些控制功能的协议是位于IP层的因特网控制报文协议ICMP(InternetControlMassageProtocol)。
ICMP报文分为两大类,差错报告报文和查询报文。
经常被认为是IP层的一个组成部分。
ICMP报文首先要封装成IP数据报,然后再传递给下一层。
报文格式见表2.5所示:
8位类型
8位代码
16位校验和
首部其它部分
表2.5ICMP报文格式
ICMP报文首部的通用部分由类型、代码和校验和3个字段构成。
●类型(TYPE):
指示ICMP报文的类型。
●代码(CODE):
提供关于报文类型的进一步信息。
●校验和(CHECKSUM):
提供ICMP整个报文的校验和,校验和算法与IP数据报首部校验和算法相同。
与IP数据报首部校验和不同的地方是,ICMP校验和是整个报文的校验和,另外使用校验和进行校验的设备不是中间的路由器,而是最终的目的地。
●首部其它部分为4个字节,大部分差错报告报文未用到这一部分,参数错报告报文用到其中的一个字节作为指针,请求应答报文对利用这4个字节匹配请求与应答报文。
不使用时将不使用部分填“0”。
●数据段部分在报告差错时,携带原始出错数据报的首部和数据的前8个字节,通常这些信息包括了该数据报的关键信息(前8个字节一般为上层协议的首部信息);
在请求和应答报文中,携带与请求和应答相关的额外信息。
所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。
类型字段可以有15个不同的值,以描述特定类型的ICMP报文。
有些ICMP还使用代码字段的值来进一步描述不同的条件。
ICMP差错报告报文常见类型和含义见表2.6所示:
表2.6ICMP常见类型号及其含义
类型
5
11
12
8或0
10或9
13或14
17或18
报文含义
目的地不可达
源中断
重定向
数据报超时
数据报参数有问题
回送请求和应答
路由器询问和通告
时间戳请求或应答
地址屏蔽请求或回答
本课题只考虑ICMP报文的目的站不可达和回送请求与应答报文,表2.7和表
2.8分别为这两种报文的格式。
表2.7目的站不可达报文格式
类型3
代码0-15
校验和
收到IP一部分,包括IP首部以及前8字节
类型8或0
代码
检验和
标识符
序号
可选数据
由请求报文发送,有应答报文重复
表2.8回应请求与应答报文格式
类型8和0
由请求报文发送,由应答报文重复
注:
类型0为回应应答报文,8为回应请求报。
整个数据包均参与检验。
2.3.4TCP传输控制协议
传输层是TCP/IP协议中的一个举足轻重的层次,网络层用IP数据报统一了数据链路层的数据帧,用IP地址统一了数据链路层的MAC地址,但网络层没有对服务进行统一。
传输层的目的在于弥补和加强通信子网服务。
在TCP/IP协议的传输层,提供了面向连接的传输控制协议TCP和无连接的用户数据报协议UDP。
就不同的底层网络而言,TCP和UDP有不同的适用范围,TCP适用于可靠性较差的广域网,UDP则使用于可靠性较高的广域网。
传输层以下各层只提供相邻机器的点到点传输,而传输层提供了端到端的数据传输,这里的端到端不仅指源主机到目的主机的端到端通信,而且指源进程到目的进程的端到端通信。
TCP采用协议端口来标识某一主机上的通信进程。
为了保证信息能够正确地到达指定的端进程,必须显示地给出全局惟一的信宿端得进程表示符。
主机可以用IP地址进行标识,IP地址是全局惟一的,再给主机上的进程赋予一个本地惟一的标识符(端口号),二者加起来,便形成了进程的全局惟一标识符。
每个应用进程之间的通信都是基于所谓的socket套接字。
套接字socket是系统提供的进程通信编程界面,支持客户/服务器模型。
它关联了应用程序和端口,并且为每一个端口分配多个通信端点,从而可以实现同一应用程序的多进程服务。
socket地址提供了进程通信的端点。
客户和服务器进程通信之前,双方先各自创建一个端点,构成各自的半关联。
每个socket都有一个操作系统分配的本地惟一的socket号。
然后客户根据服务器的熟知地址建立socket连接。
可以用一个完整的关联描述一个socket连接:
(协议,本地主机地址,本地端口号,远程主机地址,远程端口号)
socket支持不同的传输层协议,当使用TCP协议作为传输层协议时,一个socket连接就是一个TCP连接。
TCP是面向流的协议,发送方以字节流发送数据,接收方以字节流接收数据。
数据在建立的连接上按