Linux知识点 – 网络基础 – 数据链路层
文章目录
- Linux知识点 -- 网络基础 -- 数据链路层
- 一、数据链路层
- 1.以太网
- 2.以太网帧格式
- 3.重谈局域网原理
- 4.MAC地址
- 5.MTU
- 6.查看硬件地址和MTU的命令
- 7.ARP协议
- 二、其他重要协议或技术
- 1.DNS(Domain Name System)
- 2.NAT
- 2.1.NAT技术背景
- 2.2.NAPT
- 2.3.代理服务器
- 2.4.NAT和代理服务器
一、数据链路层
1.以太网
“以太网”不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等;
例如以太网中的网线必须使用双绞线,传输速率有10M, 100M, 1000M等;
以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等;
2.以太网帧格式
数据链路层标识主机唯一性的方案:MAC地址(网卡地址)
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应IP、ARP、
RARP; - 帧末尾是CRC校验码;
数据链路层如何解包和封装?
- 报头都是固定大小的格式,解包时只需要裁掉固定大小的报头就可以了,封装时也一样;
数据链路层如何向上交付?
- 按类型字段的划分,表明向上交付的数据类型;
3.重谈局域网原理
- 当一台主机在局域网中发送消息,局域网中所有的主机都会收到消息;
- 所有的主机都会对比目的地址,如果不是自己,就直接丢弃消息,只有目的主机会保留消息;
- 局域网本质是一个临界资源,多个主机通信时,任何时刻只能保证只有一个主机在发送;
- 发送的时候发生了碰撞,就会等一段时间再发送;
如果局域网中,同时有多台主机在发送数据,数据之间就发生了碰撞问题;
避免碰撞的算法:发送主机会休息随机时间,然后重新发送;
局域网中还存在交换机,能够减少碰撞的发生:
- 交换机:划分碰撞域,如果识别到碰撞,就不向另一端转发,减少交换机两侧碰撞域的压力
4.MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位及6个字节;一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19);
- 在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址);
对比理解MAC地址和IP地址
- IP地址描述的是路途总体的起点和终点;
- MAC地址描述的是路途.上的每一个区间的起点和终点;
5.MTU
局域网中的主机越少越好,能够减少碰撞的发生;
局域网数据帧发送的时候,数据帧不能太长,也不能太短,数据帧太长容易造成碰撞,太短携带的有效数据太少;
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充;
- 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
- 如果一个数据包从以太网路由到拨号链路上数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
- 不同的数据链路层标准的MTU是不同的;
MTU对于TCP协议的影响:
- TCP的一个数据报也不能无限大,还是受制于MTU,TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
- TCP在建立连接的过程中,通信双方会进行MSS协商,最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU);
- 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值;
- 然后双方得知对方的MSS值之后,选择较小的作为最终MSS;
- MSS的值就是在TCP首部的40字节变长选项中(kind=2);
MTU = 1500
IP有效载荷 = 1500 - 20 = TCP + 数据 = 1480
数据 = 1480 - TCP报头的长度(20) = 1460
因此MSS不能大于1460字节;
6.查看硬件地址和MTU的命令
使用ifconfig命令,即可查看ip地址,mac地址和MTU;
7.ARP协议
同一个网段中,两台主机之间进行网络通信,发送主机必须知道接收主机的MAC地址,然而,如果我们只知道目标主机的IP地址,而不知道对方的MAC地址,就需要通过目标IP地址,得知对方的MAC地址,这就是ARP协议(地址解析协议),这是一种局域网协议;
ARP数据报格式:
- 源MAC地址、目的MAC地址在以太网首部(MAC地址)和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的;
- 硬件类型指链路层网络类型,1为以太网;
- 协议类型指要转换的地址类型,0x0800为IP地址;
- 硬件地址长度对于以太网地址为6字节;
- 协议地址长度对于和IP地址为4字节;
- op字段为1表示ARP请求,op字段为2表示ARP应答;
- 发送端IP地址填本主机的IP地址;目的以太网地址就是目标主机的MAC地址,如果不知道,一般填FFFF…(表示广播);目的IP地址填目标主机的IP地址;
ARP协议获取目标MAC地址的过程:
- 当主机A在局域网中向获取主机D的MAC地址时,主机A的ARP数据报如下图所示:
主机A不知道主机D的MAC地址,在目的以太网地址中填的是全F,这样会对局域网中所有的主机进行广播,其他每一台主机都要对数据帧进行处理,解包并向上交付,MAC帧解包后,每一台主机都会拿到该ARP请求,拿到后先看的是op类型,判断是应答还是请求,如果是请求,再看目的IP地址并对比,如果不是自己的IP地址,就丢弃,如果是自己的IP地址,就应答;(ARP层丢弃) - 主机D对A的广播进行应答时,主机D发出的ARP数据报如下图所示:
对于主机D的应答,由于其目的MAC地址不是全F,因此其他主机不会处理该应答,在发现该报文的目的MAC地址是主机A后,直接将该报文丢弃 (MAC层丢弃);主机A收到该应答后,首先应该确认OP类型,再看发送端的IP地址和MAC地址,就拿到了主机D的MAC地址;
结论:
- 任何主机可能之前向目标主机发起过ARP请求,注定了未来会收到对应的ARP应答;
- 任何一台主机,也可能被别人发起ARP请求;
因此,局域网中,任何一台主机收到ARP请求的时候,可能是一个应答,也可能是一个请求; - ARP请求成功之后,请求方会暂时将IP地址和MAC地址的映射关系暂时保存下来,因此不用每次发送数据都要进行ARP协议;
- 不光是在目标最终子网中才会进行ARP,ARP的过程会在网络路径中随时发生,只要两台主机处于一个网段中,就有可能发生ARP;ARP在路由器到路由器之间也可能发生;
- arp -a命令可以获取主机所处局域网中所有主机的IP地址和MAC地址:
- ARP欺骗:伪装成为中间人;
二、其他重要协议或技术
1.DNS(Domain Name System)
DNS是一整套从域名映射到IP的系统;
- TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆;
- 于是人们发明了一种叫主机名的东西,是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系
最初,通过互连网信息中心(SRI-NIC)来管理这个hosts文件的:
- 如果一个新计算机要接入网络,或者某个计算机UP变更,都需要到信息中心申请变更hosts文件;
- 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网;
这样就太麻烦了,于是产生了DNS系统:
- 一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系;
- 如果新计算机接入网络,将这个信息注册到数据库中;
- 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址;
域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称;
域名使用 . 连接:
- com:一级域名,表示这是一个企业域名,同级的还有"net"(网络提供商), “org”(非盈利组织)等;
- baidu:二级域名,公司名;
- www:只是一 种习惯用法,之前人们在使用域名时,往往命名成类,似于.xx.xxxww.xx.xxx这样的格式,来表示主机支持的协议;
有时候,我们的QQ,微信和游戏能够正常运行,但是网页却打不开,这是因为浏览器内置的DNS IP地址对应的服务挂掉了;
2.NAT
2.1.NAT技术背景
NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能;
- NAT能够将私有IP对外通信时转为全局IP,也就是就是一 种将私有IP和全局IP相互转化的技术方法;
- 很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP;
- 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的;
NAT IP转换过程
- NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
- NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10;
- 在NAT路由器内部,有一张自动生成的,用于地址转换的表;
- 当10.0.0.10第一次向 163.221.120.9发送数据时就会生成表中的映射关系;
2.2.NAPT
那么问题来了,如果局域网内有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了,使用IP+port来建立这个关联关系;
- 其实在进行源地址转换的过程中,可能不一定只替换原IP,必要的时候,源端口也要被替换;
- 路由器在NAT转换的过程中,除了单纯的替换,还会为我们根据报文请求的四元组,为我们构建一个映射关系;
- 源IP表示唯一的一台主机,源端口表示该主机上唯一的一个进程;
源IP + 源端口表示唯一的一个进程,自己在自己的内网中的唯一性; - 无论从内向外,还是从外向内,都能在各自的网络中表示唯一性,所以,这个映射关系是互为KEY值的;
- 这种关联关系也是由NAT路由器自动维护的,例如在TCP的情况下,建立连接时。就会生成这个表项;在断开连接后,就会删除这个表项;
- 如果我从来没有访问过外网,外网能够直接访问内网吗? 理论上不能;
- 但是有很多基于NAT原理的软件,能够帮助我们进行从外网访问内网:内网穿透;
2.3.代理服务器
正向代理服务器:
- 用户所有的请求都要经过代理服务器,再由代理服务器发送给公网接收端服务器,服务器端的响应也需要经过代理发到客户端;
- 其中正向代理服务器会完成身份认证、数据缓存、内容审核、保证内网安全等功能(替用户做事情);
反向代理服务器:
- 在公司的大型机房中,所有用户的请求都会经过一台反向代理服务器,代理服务器将用户请求均衡的分配给每一台服务端主机,保证整个集群的负载均衡;
- 反向代理服务器不会做任何的业务处理,只负责将请求推送到后端的指定主机;
2.4.NAT和代理服务器
路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程;
代理服务器看起来和NAT设备有一点像,客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端;
那么NAT和代理服务器的区别有哪些呢?
- 从应用上讲,NAT设备是网络基础设备之一 ,解决的是IP不足的问题;代理服务器则是更贴近具体应用,比如通过代理服务器进行f q,另外像迅游这样的加速器,也是使用代理服务器;
- 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换;代理服务器往往工作在应用层;
- 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网;
fq是正向代理;