博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
毕业设计之路(3)——以太网协议与ARP协议
阅读量:2226 次
发布时间:2019-05-09

本文共 2428 字,大约阅读时间需要 8 分钟。

对于不是网络工程学院的孩子,关于网络方面的了解真是一张白纸。TCP/IP以前听说过,认真看起来真头疼,不过协议是死的,多看几遍就熟悉了。

看看书,了解一下TCP/IP有关概念,否则后续工作开展不下去。

TCP/IP协议分为4层。

  • 应用层——Telent, FTP, HTTP, SMTP
  • 传输层——TCP, UDP (ICMP, IGMP)
  • 网络层——IP, ARP
  • 链路层——设备驱动(PPP, 以太网, FDDI等)
注:ARP属于网络层和链路层的通道。括号内的ICMP和IGMP协议,有人将其归为网络层。
了解一下几个比较重要的协议。
以太网协议
Ethernet II标准是一种比较旧的以太网标准。后来IEEE又创立了IEEE802.3标准。
首先看Ethernet II帧的封装。本来想照书上画个图直观的,可不知道怎么画,用什么软件可以画出来那样。哎。
  • 报头:供8字节,其中前7字节是连续的0xAA,用于同步,然后是一个0xAB,它表示帧开始的地方。它提供了同步和前定界的功能。
  • 目标地址:长度是6字节,表示目标节点的地址,它可能是单播、多播、广播地址,单播即物理地址,也叫MAC地址。广播地址一般是0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,广播地址可以通过网桥,但通不过网关。
  • 源地址:与上面相同,但它只能是单播地址。
  • 以太网类型:长度是两字节,用来表示有效负载上的协议。0x0800为IP报,0x0806为ARP报,0x8035为RARP报,0x86DD为IPv6报,0x880B为PPP报(基于以太网的PPP报)。
  • 有效负载:Ethernet II帧最大负载时1500字节,最小为46字节。
  • 帧检查序列:长度4字节,用于检查帧的完整性,其原理和PPP帧的检查序列一样。
下面是IEEE802.3帧的封装。
  • 报头、目标地址、源地址:与Ethernet II相同。
  • 长度:指从DSAP开始到有效负载的最后一位的字节数。最大值1500,最小值为46.
  • DSAP:长度是1字节,表明目标节点的下一层的协议类型,如SNAP为0xAA.
  • SSAP:与DSAP相同,表示源节点下一层的协议类型。
  • 控件:长度可能是2字节,有可能是1字节。取决于在该层协议的可靠传输服务,单字节为不可靠的连接服务,2字节为面向连接的可靠服务。但IP报和ARP报都不使用面向连接的可靠服务,,所以它们的控件都是1字节、用0x03来表示。
由上可看出,Ethernet II与IEEE802.3帧的不同之处就是以太网类型变成了帧长度。可以把IEEE802.3帧的DSAP、SSAP、控件都看做Ethernet II帧有效负载的一部分。所有在接收到一帧数据时,判断它是Ethernet II帧还是IEEE802.3帧可以由Ethernet II帧的以太网类型来判断,大于等于1500(0x05DC)就是Ethernet II帧,小于1500就是IEEE802.3帧。
ARP协议
称为地址解析协议,是联系IP协议和LAN协议的桥梁,应用范围是局域网(LAN),是基于访问共享和广播技术的协议。该协议把节点的IP解析成对应的MAC地址(也叫物理地址),它可以在局域网内寻找IP所对应的MAC地址,并保存起来以供发送使用。它是基于数据链路层协议之上的,但不属于网络层协议。
ARP有两种帧组成,
请求帧和应答帧。前者即在网络里面查找IP地址对应的MAC地址。后者即回答该IP地址对应的MAC地址是多少。工作过程是这样的,请求帧由要发IP报的节点发出,它是一个广播报,子网内的所有节点都能够收到。各节点收到后,如果目标IP和自己的IP相同,就发送一个ARP应答报;否则就扔掉。当发送请求帧的节点接收到应答报后,就知道了对方的MAC地址,即可发送IP报。
再看
ARP缓存表,它是一个保存网络内IP地址和对应MAC地址的缓存表。在发送IP报时,首先查看ARP缓存表中目标IP是否有对应的MAC地址。如果有就直接发送;否则,就向网络发送ARP请求帧,并等待ARP应答帧。如果没有APR应答报回复,就取消IP的发送。另外一种情况是收到正确的ARP应答帧时,就要更新ARP缓存表,并把IP报发送出去。ARP缓存表的表项都有一个
生存时间,生存时间和系统时间相对应,表项生存时间为0时表示该表项失效,重新发ARP请求帧后得到正确的IP地址对应的MAC地址时恢复生存时间。
ARP帧的以太网类型是0x0806,ARP帧不包含IP帧,ARP帧过不了IP路由器。
下面说明ARP帧的结构。
  • 硬件类型:2字节,指出数据链路层的协议。如0x0001表示以太网。
  • 协议类型:2字节,指出要解析的协议。如0x0800表示IP协议,即指出ARP报要解析的协议时IP协议。
  • 硬件地址长度:1字节,指出物理地址的长度,单位是字节,如以太网地址的长度是6字节,该字段就是0x06.
  • 协议地址长度:1字节,指出要解析的协议地址的长度,单位是字节。如IP协议的IP地址长度是4字节,该字段就是0x04.
  • 操作:2字节,用于表示该ARP帧的类型,如0x0001表示ARP请求帧,0x0002表示ARP应答帧,0x0008表示反转ARP请求帧,0x0009表示反转ARP应答帧(反转ARP帧只用在帧中继)。
  • 发送端硬件地址:它的长度等于硬件地址长度的值,如以太网是6字节。在以太网中它是发送端节点的MAC地址。
  • 发送端协议地址:它的长度等于协议地址长度的值,如IP协议是4字节。用IP协议时,它是本节点的IP地址。
  • 接收端硬件地址:它的长度等于硬件地址长度的值,如以太网是6字节。在以太网中它是接收端节点的MAC地址。如果是发送请求帧,它是0x00,0x00,0x00,0x00,0x00,0x00.
  • 接收端协议地址:它的长度等于协议地址长度的值,如IP协议是4字节。用IP协议时,它是接收端节点的IP地址。

转载地址:http://zhofb.baihongyu.com/

你可能感兴趣的文章
mysql数据库,悲观锁。for update 的用法。
查看>>
springboot+jta+atomikos多数据源和 springboot+mybatisplus+aop实现数据库读写分离而引发的一些思考
查看>>
java面试中常考的一些面试sql语句
查看>>
一个字节等于多少位?
查看>>
帧框架frameset的用法总结
查看>>
java1.8中创建hashmap的初始化大小设置标准
查看>>
mark一下,service的实现层没有加@service注解。
查看>>
jq对象转换成js对象。已经jq的复合选择器。
查看>>
(一)alin‘s mysql学习笔记----概述
查看>>
(二)alin’s mysql学习笔记----mysql的存储引擎
查看>>
(三)alin’s mysql学习笔记----常用的join连接查询
查看>>
(四)alin’s mysql学习笔记----索引简介
查看>>
分布式系统中的幂等性的理解
查看>>
spring的注解开发中的常用注解(一)------@bean @Configuration @ComponentScan @Import @Scope @Lazy
查看>>
(五)alin’s mysql学习笔记----索引性能分析
查看>>
Spring中使用@Transactional注解进行事务管理的时候只有应用到 public 方法才有效
查看>>
springboot整合rabbitmq及rabbitmq的简单入门
查看>>
mysql事务和隔离级别笔记
查看>>
事务的传播属性(有坑点)自调用失效学习笔记
查看>>
REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
查看>>