数据帧的产生
2017-01-24 16:15
246 查看
帧到底是由谁来产生的?
追问
追答
追问
追答
以太网(IEEE 802.3)帧格式:
1、前导码:7字节0x55,一串1、0间隔,用于信号同步
2、帧起始定界符:1字节0xD5(10101011),表示一帧开始
3、DA(目的MAC):6字节
4、SA(源MAC):6字节
5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)
6、数据:46~1500字节
7、帧校验序列(FCS):4字节,使用CRC计算从目的MAC到数据域这部分内容而得到的校验和。
据RFC894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。
按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6+6+2+1500=1514。
以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。
网卡可以产生,交换机也可以产生。交换机产生的话是因为交换机之间需要一些协议来维护特定的功能,如STP,VTP而最重要的功能还是转发网卡(也就是主机)所产生的帧。
追问
那比如说,我的设备是这么连的:主机---路由器---交换机---外网。那网卡是在我计算机内的,也就是网卡直接跟路由器相连。那我要向外发送数据。网卡传给路由器的不是数据帧吗?可是路由器是工作在网络层的,比网卡高。在这里是什么样的情况,还有这里的交换机的作用? 真的对这些很模糊,希望能说得明白一点,谢谢。
追答
主机----交换机---路由器--外网,这样连是比较正常的。 而你那种连法,把交换机去掉,也是可以的。(也不是说交换机连了就不可以,而是,没必要) 所谓路由器工作在网络层,那指的是【实现功能中里最高的层次】,上层必须有底层的支持,也就是说路由器当然能支持数据链路层的功能。 你要弄清楚数据的流向:一个帧到了交换机,它不需要把帧解封装,也就是不会处理网络层里数据包的内容,而是根据帧的信息转发。而到了路由器,它需要解开帧的封装,查看数据包的信息,然后根据数据包的目标地址再结合自己的路由表查找路径,重新封装成帧发往下一个目标。这也是路由器工作在网络层的含义
追问
非常感谢你的回答。我还有疑问,那就是在计算机内部数据也是从高层(向外发送数据的时候)流向低层,也就是说在说算机内部也完成了对数据的封装,那计算机也具有网络层及以下层的功能吗?这种是不是只是协议上的用软件来实现的?也就是说这种功能不只有路由器才有(因为我们都说路由器工作在网络层)? 我就是对这里感到疑惑,还有你说的某设备工作在某层,那它是不是具备它所在层及以下层的功能?
追答
计算机具有所有层的功能,其中网卡完成数据链路层和物理层(可以看成硬件),TCP/IP协议栈完成其余上层功能。(可以看成软件) 路由器本质上就是计算机,里面也可以分底层模块和高层模块,一般都是底层由硬件实现而高层会涉及软件。其实高端路由器的一些比较强大的功能是可能超越网络层的(但路由器绝大部分还是在网络层) 对于你最后的问题:是的。还是那句话,高层必须有底层支持。其实物理层我没有提到,但所有设备都是有物理层功能的,也必须经过物理层
以太网(IEEE 802.3)帧格式:
1、前导码:7字节0x55,一串1、0间隔,用于信号同步
2、帧起始定界符:1字节0xD5(10101011),表示一帧开始
3、DA(目的MAC):6字节
4、SA(源MAC):6字节
5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)
6、数据:46~1500字节
7、帧校验序列(FCS):4字节,使用CRC计算从目的MAC到数据域这部分内容而得到的校验和。
据RFC894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。
按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6+6+2+1500=1514。
以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。
相关文章推荐
- 数据帧在不同VLAN间的传输过程
- 【oracle】关于日志产生量的计算-日志切换频率
- java中四位验证码的产生(简单有趣)
- UTF8 + BOM产生问题与小结
- 让你的系统选单变为彩色,修改boot.ini产生彩色的启动菜单[附颜色代码]
- Keil的代码优化产生的问题
- 获取createprocess运行的命令行中产生的字符(Pipe方法)
- s3c2440 socketcan移植修改sja1000收发CAN数据帧
- hduoj2094产生冠军
- 用图片做超链接标签<A></A>的热点的时候,如何去除超链接对图片产生的边框(忘了,加深下印象)
- MySQL 1067 错误产生的一种原因
- 运行HBase应用开发程序产生异常,提示信息包含org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory的解决办法
- 程序在resin中运行时产生意外多条线程
- log4j 产生的日志位置设置 和 catalina.home、catalina.base
- python3 利用当前时间、随机数产生一个唯一的数字作为文件名
- Sping2.5配置文件的单例共享模式与独立产生实例,同步方法使用
- Linux环境下段错误的产生原因及调试方法小结
- 【ASP】在特定的范围内产生N个不同的随机数
- 去除MDI子窗体最大化后在MainMenuStrip上自动产生的图标和最大化、最小化等按钮
- android导入第三方jar后,产生:java.lang.NoClassDefFoundError错误 解决方案