1、链路层概述
链路层主体是网卡,屏蔽了不同的物理层实现,将网络层的数据报传输到相邻的节点。
提供成帧、链路接入(MAC协议)、可靠交付、差错检测和纠正等服务。
差错检测和纠正包括(1)奇偶检校,检查1的个数,二位奇偶检校可以纠正单个比特差错(2)检验和(3)循环冗余检测
2、多路访问链路和协议
协调多个发送/接收点对一个共享广播信道的访问,避免碰撞,有如下几种协议:
(1)信道划分协议:时分、频分、码分等
(2)随机接入协议:碰撞后,重发该帧前等待一个随机时延
例如CSMA载波侦听多路访问协议,节点在传播前先侦听信道,直到检测到一小段时间内没有信号传输,然后再开始传输,如果检测到碰撞就停止传输,继续侦听。
(3)轮流协议:【1】轮询协议,有一个主节点,轮询每个节点 【2】令牌传递协议,无主节点
3、MAC地址,ARP和RARP协议
MAC地址是6字节16进制48位的,形如FF-FF-FF-FF-FF-FF,是网卡的地址(网络适配器)。目的MAC地址是下一跳的MAC地址,每经过一个路由器,源和目的MAC地址都会改变。
为什么同时要有IP和MAC地址?理论上也可以只使用IP地址转发(三层交换机),同时使用IP和MAC地址有利于分层,网络层不一定使用IP协议,链路层也不一定使用以太网协议。
MAC地址绑定硬件,而IP地址不是,当硬件离开子网A进入子网B,会根据DHCP协议被分配一个新IP,子网的IP前缀一致,便于管理。
交换机有一张表,存储MAC地址和通向该地址的接口号。交换机具有自学习的功能,对于进入的帧,存储它的源MAC地址和进入的接口号(如果表中原先没有该MAC地址的话)。
ARP:地址解析协议,提供IP-MAC地址的转换。ARP只为同一个子网上的主机和路由器接口解析IP地址,每台主机或路由器保存ARP表,表项有IP地址、MAC地址、TTL。如果目的IP不在表中,则广播询问子网内的节点。
RARP提供MAC-IP地址的转换。
4、交换机和网桥(链路层设备),中继器和集线器(物理层设备)
交换机和网桥:都有帧转发、帧过滤、生成树算法的功能;交换机有更多的输入输出端口。
中继器和集线器:都是在比特级别对信号进行再生和重定向,延长传输距离,集线器端口更多。
5、Web页面请求的历程
(1)如果没有IP地址,DHCP获得IP地址
生成DHCP请求报文,放入UDP报文段,放入目的地址255.255.255.255和源地址0.0.0.0的IP数据报中,放入目的MAC地址FF:FF:FF:FF:FF:FF和源MAC地址的以太网帧(链路层帧)中。
DHCP服务器收到请求,生成包含DHCP服务器分配的IP地址、DNS服务器IP地址、默认网关、子网掩码的ACK报文,放入UDP报文段,放入IP数据报和以太网帧(包括源MAC地址和客户MAC地址),源MAC地址是路由器连到归属网络的MAC地址。
(2)生成DNS查询报文,有查询缓存则利用查询缓存(浏览器缓存和DNS服务器缓存),放入UDP报文段,放入IP数据报,目的IP是本地DNS服务器的IP。
如果不知道本地DNS服务器的MAC地址,使用ARP协议。生成ARP查询报文,放在目的地址为FF:FF:FF:FF:FF:FF的以太网帧中,包含了默认网关路由器的IP地址,网关路由器发送ARP回答,客户获得网关路由器的MAC地址。
将生成的DNS查询报文放入以太网帧,交付给网关路由器。
(3)网关路由器寻址到DNS服务器
网关路由器抽取IP数据报,检查目的IP地址,根据转发表确定转出的接口,转发表已根据域内路由协议(RIP,OSPF)和域间路由协议(BGP)确定好了,最终报文到达DNS服务器,服务器返回目的网址的IP地址。
主机向本地DNS服务器是递归查询,本地DNS服务器向上层DNS服务器是迭代查询。
(4)TCP和HTTP
生成HTTP请求报文,根据目的IP生成TCP套接字,三次握手,客户发送SYN,根据路由器的转发表转发,到达欢迎套接字,生成连接套接字,返回SYN&ACK报文,客户端再返回ACK报文,附上生成的HTTP请求报文,最终服务器返回HTTP响应。
6、加密算法
对称加密(单密钥加密):使用同一密钥加密解密,有点是算法公开,计算量小,加密速度快,加密效率高,缺点是必须事先协商密钥,每对用户都要维护唯一密钥,数量巨大。
RSA(非对称加密):(1)选择两个大素数p,q,p*q为1024比特数量级
(2)n=pq,z=(p-1)(q-1)
(3)选择一个数e<n,e、z互质
(4)选择d使得ed mod z = 1,公钥为(n,e),私钥为(n,d),明文报文m加密为c = m^e mod n,解密时利用了数论的知识,m = c^d mod n
c^d mod n = m^ed mod n = m ^ (ed mod z) mod n = m
MD5:将信息位数填充到512的整数倍,分组进行位运算,输出32位16进制(128位)的结果。