链路层属于OSI模型的第二层,第一层物理层主要研究的是传输媒介,电线电缆等,而第二层主要研究的是物理寻址,链路层的主要目的是为IP模块发送和接收IP数据报,为ARP模块发送ARP请求和应答,以及为RARP发送RARP请求和接收RARP应答,它起着承接第一层和第三层的作用,这边主要介绍当今网络上最流行的两种二层技术,以太网和PPP协议
以太网是Xerox公司发明的基带LAN标准,它采用带冲突检测的载波监听多路访问协议(CSMA/CD),速率为10Mbps,传输介质为同轴电缆,目前已经发展到10G,传输介质也改为光纤,以太网2.0之前有两种标准,一种是以太网标准,另一种是在以太网基础上完成的IEEE802.3定义的以太网,封装格式也有稍许不同,但是现在的以太网设备一般都兼容这两种格式
1. 前导同步符/帧起始定界符:7字节0x55, 用于信号同步,1字节0xd5(10101011)表示一帧开始
2. 目的地址:6字节,(XX:XX:XX:XX:XX:XX)
3. 源地址: 6字节, (XX:XX:XX:XX:XX:XX)
4. 类型/长度:2字节,0~1500保留为长度域值, 1536~65535保留为类型
5. 数据:46~1500 字节
6. 帧校验序列(FCS): 4字节, 使用CRC计算从目的MAC到数据域这部分内容的校验和,不包括前导码
RFC894规定以太网封装的IP数据包的最大长度是1500字节,也就意味着以太网帧最大长度是 7(前导同步符)+1(帧开始符)+6(DA)+6(SA)++2(类型)1500(data)+4(FCS)=1526,
但实际上抓包最大帧是1514字节,因为数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始符,然后对帧进行CRC校验,如果校验和错则丢弃此帧,如果符合,就将帧交“设备驱动程序”处理,此时才是网卡上抓到的包,需要去掉8(前导同步符)+4(FCS),最大帧长为1514
以太网同时规定数据域最小为46字节,也就意味着最小帧长为6+6+2+46+4=64,除去4(FCS),抓包则是60字节,当数据字段小于46字节时,MAC子层为在data后面填0,以满足最小帧长大于64,设备驱动程序则是MAC子层
以太网以CSMA/CD作为MAC算法,来检测网内是否会发生冲突,一旦发生冲突则让每台主机都检测到,为了避免冲突,才有了发送最小间隙和最小帧长的规定,可见以太网是无连接的,不可靠的服务,它并不知道对方有没有收到自己发出的数据包,但如果数据帧发生错误,它会重传,数据帧发生错误一般产生在发生碰撞时,两台主机都检测到空闲,一起发送,则有可能碰撞,而产生错包,重传。
我们知道以太网是基于CSMA/CD的工作原理进行数据传送的,CSMA/CD载波监听/冲突检测,属于计算机网络以太网的工作类型,即在总线上不段的发出信号去探测线路是否空闲,如果不空闲则随机等待一定时间,在继续探测。直到发出型号为止
CSMA/CD的工作原理
由IEEE 802.3标准确定的CSMA/CD检测冲突的方法如下:
(1)当一个站点想要发送数据的时候,它检测网络查看是否有其他站点正在传输,即监听信道是否空闲。
(2)如果信道忙,则等待,直到信道空闲;如果信道闲,站点就传输数据。
(3)在发送数据的同时,站点继续监听网络确信没有其他站点在同时传输数据。因为有可能两个或多个站点都同时检测到网络空闲然后几乎在同一时刻开始传输数据。如果两个或多个站点同时发送数据,就会产生冲突。
(4)当一个传输节点识别出一个冲突,它就发送一个拥塞信号,这个信号使得冲突的时间足够长,让其他的节点都能发现。
(5)其他节点收到拥塞信号后,都停止传输,等待一个随机产生的时间间隙(回退时间,Backoff Time)后重发。
问题就在这,当很小的帧发送到对端前,对端也发送帧,此时产生冲突,这个充突帧传到发送端还需要一定的时间,如果帧太小,发送端已经发送完了,再接收到这个冲突帧,为时已晚,所以规定一个最小发送帧,使得发送端能够检测到冲突帧从而判断发出去的这个帧作废,IEEE将10M以太网的时隙定义为512比特,即51.2us,那么10M换算下来10MB/s*51.2us=512bit,512bit正好就是64字节,因此定义以太网的帧最小为64字节,这样如果64字节没有发生冲突,数据就不会发生冲突,认为数据发送成功
以太网头部有8个字节的前导符,在抓包中是看不到的,那它起什么作用呢,MAC子层的标准规定了帧间最小的间隔是9.6us,也就是说当主机监测到线路空闲后,还要等9.6us才能发送数据,这样做是为了使刚刚收到的数据帧的主机的接收缓存来得及清理,做好接收下一帧的准备,9.6us即96bit,也就是12字节的帧间隔的由来,也就是帧开销的一部分,而8字节的前导符作用在于告诉监听设备数据将要到来,因此帧开销就是20字节。
一台百M交换机用仪表接到两个端口上,互发46字节大小的数据包,看包转发率为148809,从而计算带宽大小为 148809*64*8=76M,那么其它的带宽干什么去了,因为以太网有8个字节的前导符,以及12字节的帧间隔,因此每个帧有20字节的固定开销,这还是最小的开销,交换机实际的端口吞吐量为148809*(64+8+12)*8=100M,交换机的实际数据吞吐量为76M,还有一部分用来处理额外的开销,这个开销是物理层所必需的。
如果对接的是以太网交换机,那么IP数据包到达第二层都会加上以太网头,来进行数据链路层的传输。
PPP协议全称为point-to-point protocol点到点协议,提供在点到点链路上传输,封装网络层数据包的数据链路层协议,处于链路层的第二层,于以太网不同的是网络结构,以太网是一个局域网,可以广播,而PPP只适用于点对点串行链路,PPP主要由三类协议组成:链路控制协议(LCP),网络层控制协议(NCP)和PPP协议扩展,其中链路控制协议主要用于建立,拆除和监控PPP数据链路,网络层控制协议主要用于协商在该数据链路上所传输的数据包的格式与类型,PPP扩展协议主要用于提供PPP功能的进一步支持,同时PPP还提供网络安全方面的PAP和CHAP协议。由于提供验证,易扩冲,从而获得广泛的应用。
0x7E标识一个帧的开始和结束
FCS为帧校验域
PPP报文内容为 地址0xFF, 控制0x03, PPP头即0xFF03
Protocol为协议域紧接着code域表明了此报文为哪种PPP协商报文,如为IP报文则不存在此域,取而代之的则为IP数据
Identifier域用于进行协商报文的匹配
Length域为此协商报文长度
Data域所包含的为协商报文的内容
常用protocol: 0021 IP
C021 LCP(Link control protocol) 链路控制协议
C023 Password Authentication protocol密码认证协议
8021 internet protocol control protocol 网络控制协议
PPP是链路层协议,所以数据单位是帧,7EFF03…7E这种格式封装的即为PPP帧, 0x7E标识帧的开始和结束,网络是分层的,对等层之间进行通信,下层为上层服务,对等层通信需要知道对方的地址,而对于不同的网络,这个地址是不一样的,链路层需要知道MAC或者X.121或者是ATM地址,而网络层则需要对端的IP地址,在传输层则需要知道对端的协议端口号,例如如果是在以太网上通信,发送端则需要对端的MAC地址,而PPP协议是运用在点对点的链路上,不像广播和多点访问的网络,点对点的链路可以唯一标识对方,因此PPP无需知道对端地址,因为只有你一个,所以该字节无意义,为0xFF,同地址域一样,控制域也没有意义,规定填写0x03,就PPP协议本身而言我们关心的是协议域和信息域,协议域可用来区分PPP数据帧中信息域所承载的数据报文的内容,信息域默认最大帧长为1500字节,协议域和信息域要和在一起看,协议域为0xC021表示LCP,链路控制, 0x8021表示NCP,网络控制, 0x0021表示IP协议
PPP为用户发起呼叫建立链路,在建立链路时协商参数选择,其中LCP起作用
当LCP将链路建立好后,PPP要开始跟不同用户的需要,配置上层协议所需的环境,PPP用NCP来为上层提供服务接口,如果是IP则提供IPCP接口,如果是IPX提供IPXCP接口等
当一个PC终端拨号用户发起一次拨号后,此PC终端首先通过调制解调器呼叫远程访问服务器,如提供拨号服务的路由器。当路由器上的远程访问模块应答了这个呼叫后,就建立起一个初始的物理连接。接下来,PC终端和远程访问服务器之间开始传送一系列经过PPP封装的LCP分组,用于协商选择将要采用的PPP参数。如果上一步中有一方要求认证,接下来就开始认证过程。如果认证失败,如错误的用户名、密码,则链路被终止,双方负责通信的设备或模块(如用户端的调制解调器或服务器端的远程访问模块)关闭物理链路回到空闲状态。如果认证成功则进行下一步。
在这步骤中,通信双方开始交换一系列的NCP分组来配置网络层。对于上层使用的是IP协议的情形来说,此过程是由IPCP完成的。
当NCP配置完成后,双方的逻辑通信链路就建立好了,双方可以开始在此链路上交换上层数据。
当数据传送完成后,一方会发起断开连接的请求。这时,首先使用NCP来释放网络层的连接,归还IP地址;然后利用LCP来关闭数据链路层连接;最后,双方的通信设备或模块关闭物理链路回到空闲状态。
PAP为两次握手协议,它通过用户名及口令来对用户进行验证。过程如下:被验证方A发送用户名及口令到验证方B, 验证方B根据本地的用户表或radius服务器查看是否有此用户,口令是否正确,如果正确回ACK,如果不对则回NAK
CHAP为三次握手协议,首先验证方B发送挑战信息给被验证方,信息为(01(认证请求)+id(此次认证序列号)+随机数据+B的主机名),被认证方收到挑战信息后,根据B的主机名去找密码,查到后用(B的密码+id+随机数据)三个数据MD5算出一个HASH值
第二步,被验证方回复认证请求,该回复信息包含【02(此报文为认证响应)+ id + HASH值+被验证方A的主机名】,验证方B处理该信息,查找A的密码,随后用(A的密码+id+随机数据)根据MD5算法算出一个hash值,与被验证方A算出的HASH对比,如果一致则通过
因此CHAP的核心就是利用对方主机的密码进行加密,HASH进行比较,它需要双方的口令HASH,还不是一方的就可以,更加安全
TCP/IP协议卷一
http://blog.csdn.net/jackywangjia/article/details/7788312 PPP协议
http://www.360doc.com/content/11/1226/14/7998898_175090729.shtml 以太网最小帧长
http://network.51cto.com/art/201109/291563.htm PAP与CHAP