优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

081_局域网监听系统

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

3.2 网络协议的分析与实现
3.2.1 链路层
在数据链路层中分离出来的数据帧,并从帧头中得到源MAC地址、目标MAC地址以及数据内容所用的协议。

图3-2 以太网的封装格式(RFC 894)
在TCP/IP世界中,以太网IP数据报的封装(如图3-2所示)是在RFC894[Hornig 1984]中定义的。以太网帧由一个包含三个字段的帧头开始,前两个字段包含了物理地址,各六个字节,头部的第三个字段包含了16位的以太帧类型,帧后面是数据区。根据帧类型可以判断是哪种数据报,一般常用的有0X0080(IP数据报)、0X0806(ARP请求/应答)、0X0835(RARP请求/应答)三种类型。
实现过程中MAC头的定义如下:
typedef struct tag_mac_header
{
u_char dadd[6];//6个字节 目标地址
u_char sadd[6];//6个字节 源地址
u_short mac_type;//2个字节 类型
}mac_header; [版权所有:http://think58.com]

3.2.2 网络层
IP协议是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP数据都以IP数据报格式传输,TCP/IP协议中传输数据的基本单位为IP数据报,其结构描述如图3-3所示。
1)版本号:4位,表示目前的IP协议的版本号。
2)首部长度:4位,确定IP数据包首部字段的长度,基本单位为4字节,IP首部长度是20 个字节。
3)服务类型(TOS):8位,选择哪一种网络服务。目前,大多数已不再使用该选项,
4)总长度:16位,指整个IP数据包的长度,是IP首部中必要的内容,它的基本单位为字节。由于该字段长16比特,所以IP数据报最长可达65535字节。
5)标识字段:16位,唯一标识主机发送的每一个数据报,并且每发送一次数据包该字段值自动加1。通过它可以唯一确定一个数据包是哪个进程发送,对同一个主机的多个应用程序就可以区分开来。

think58.com

[资料来源:http://THINK58.com]

[资料来源:http://THINK58.com]


图3-3 IP数据报格式及首部中的各字段
6)标志域:3位,第一位为“不分片”位(DF)表示通过IP层时,即使确定要进行分片,IP不对其进行分片处理,抛弃该数据包,第3位为“更多的片”位(MF)除了最后一个分片外,其它的分片的这个域设置为1。对TCP 则设“不分片”位的比特置1,因为TCP 有超时和重传机制。
7)片偏移:13位,以8 字节为单位表示的分片偏移。并且通过它可对IP 数据包进行分片与重组。
8)TTL(time-to-live)生存时间字段:8位,设置了数据报可以经过多少路由器数。它指定了数据报的生存时间。TTL 的初始值由源主机设置( 通常为32或64 ),一旦经过一个路由器,它的值就减1。当该字段的值为0时,数据报就被丢弃,并发送ICMP 报文通知源主机。
9)协议类型:8位,表示IP 数据包的数据部分属于什么协议。
取值:1 表示为ICMP协议
2 表示为IGMP协议
6 表示为TCP协议
17 表示为UDP协议
10)首部检验和:16位,是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。
11)任选项:是数据报中的一个可变长的可选信息。
通过以上的网络层分析在协议标识的第10个字节为6时,表示IP包的内容是一个TCPsegment,从而获得网络层TCP 的数据包。 think58 [来源:http://think58.com]
实现过程中4Bit的IP头的定义:
typedef struct tag_ip_address
{
u_char byte1; //sizeof(u_char)==1 u_char占一个字节(8位)
u_char byte2;
u_char byte3;
u_char byte4;
}ip_address;
实现过程中IP数据报报头的数据结构如下:
//定义IP头 IP数据包=IP头+TCP数据段(或UDP数据段)
typedef struct tag_ip_header
{
u_char ver_ihl; // u_char 8位 版本(4位) + 头长(4位)
u_char tos;//TOS 服务类型
u_short tlen;//包总长 u_short占两个字节
u_short identification;//标识
u_short flags_fo;//标志位Flags(3位)+分段偏移(13位)
u_char ttl;//TTL
u_char proto;//Protocol
u_short crc;//校验和
ip_address saddr;//源地址
ip_address daddr;//目的地址
u_int op_pad;//选项+填充字段 u_int占4个字节 32位
//接下来是数据段,不属于IP头部
}ip_header;
ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息 。
ICMP报文是在IP数据报内部被传输的,如图3-4所示。

图3-4 ICMP封装在IP数据报内部 think58.com [资料来源:http://THINK58.com]
ICMP报文的格式如图3-5所示。

图3-5 ICMP数据报格式及首部中的各字段首部
ICMP报文的种类有两种:ICMP差错报文和ICMP询问报文。
ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码、检验和,剩下的其他字节则互不相同。
1)类型:8位,可以有15个不同的值,以描述特定类型的ICMP报文。
2)代码:8位,是为了进一步区分某种类型中的几种不同的情况。
3)检验和:16位,检验和字段覆盖了整个ICMP报文。
typedef struct tag_icmp_header
{
u_char type;//8位 类型
u_char identifer;//8位 代码
u_char sequence;//序列号 8位
u_char chksum;//8位校验和
}icmp_header;

think58好,好think58 [版权所有:http://think58.com]

[资料来源:http://www.THINK58.com]

think58 [资料来源:http://think58.com]

[资料来源:http://www.THINK58.com]