码迷,mamicode.com
首页 > 其他好文 > 详细

tcp/ip 学习笔记 章二 链路层

时间:2017-07-26 21:50:28      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:tcp/ip

一、数据链路层

当需要在一条线路上传递数据时,除了必须使用一条物理设备时,还需要一些必要的通信协议来控制数据的传输,若把实现这些协议的硬件和软件的加到链路上,就叫做数据链路;最常用的是-----网络适配器。一般适配器都包含了数据链路层和物理层这两层的功能。


物理层的包含多种与物理介质相关的协议和标准

物理层协议分类:

  1. 电磁与光学协议(电流、光调制、编码)

  2. 机械协议(链接介质机械标准,大小、形状、化学成分)

  3. 功能性的协议

  4. 程序性协议(比如二进制数1,表示的电压)

  eg:EIA/TIA-232

         V.35

         RJ45


数据链路层协议:

负责对上层如何成帧

负责对下层控制对介质的访问

错误发现(不能纠正)

eg:

 以太网,802.3,802.2

 HDLC/PPP

Frame-Relay




二、数据传输 

数据传输分两种方式:点对点,广播通信 

  1. 点对点信道

    主要协议:PPP协议,SLIP  (这两个都属于串行接口链路协议)

    点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP-IP 协议集中它是一种用来同步调制连接的数据链路层协议(OSI 模式中的第二层),替代了原来非标准的第二层协议,即 SLIP。除了 IP 以外 PPP 还可以携带其它协议,包括 DECnet 和 Novell 的 Internet 网包交换(IPX)


 2.广播信道

      主要协议:以太网协议、IEEE802.3


3. 以太网帧格式:

以太网不是唯一的数据链路层协议,但是使用是最广泛的。

根据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 字节


IEEE 802委员会制定了,另外一个以太网标准802.3,即(rfc1042)。目前实际使用的仍然是以太网居多。一些交换机之间的网络协议会使用rfc1402.

RFC规定:

1.以太网主机必须能支持RFC894的封装格式(发送和接受)

2.应该能接受RFC849和RFC1042的格式

3.也许能发送RFC1042的分组,如果同时支持发送两种封装格式的分组,必须可以设置用哪一种,且默认为RFC894的格式


三 MTU

 传输协议定义的,对数据帧长度的最大限制。如果网络层的数据报大于MTU的值,需要进行分片。

路径MTU,链路中最小的MTU

以太网 MTU=1500

802.3 MTU=1492


本文出自 “随笔” 博客,请务必保留此出处http://sunsj.blog.51cto.com/2007940/1951230

tcp/ip 学习笔记 章二 链路层

标签:tcp/ip

原文地址:http://sunsj.blog.51cto.com/2007940/1951230

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!