数据链路层详解

数据链路层的目的

  • 用于两个设备(同一种数据链路节点)之间的进行传递

认识以太网

  • 以太网不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等
  • 例如以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
  • 以太网是当前应用最广泛的局域网计数,和以太网并列的还有令牌环网,无线LAN等

以太网帧格式

image

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP
  • 帧末尾是CRC校验码

理解MAC地址和IP地址

  • IP地址描述的是路途总体的起点和终点
  • MAC地址描述的是路途上的每一个区间的起点和终点

认识MTU

  • MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路层对应的物理层,产生的限制
  • 以太网帧的数据长度规定最小46个字节最大1500个字节,ARP数据包的长度不够46个字节,要在后面补填充位
  • 最大值1500称以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片
  • 不同的数据链路层标准的MTU是不同的

MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包操作

  • 即将较大的IP包分成多个小包,并给每个小包打上标签
  • 每个小包IP协议头的16位标志id都是相同的
  • 每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位表示结束标记,也就是表示当前是否是最后一个小包,如果是1的话,就说明是最后一个小包,反正0就说明后面还有这个报文的小包。
  • 到达对端时再将这些小包,就按顺序重组,拼装到一起返回给传输层
  • 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据
    image

MTU对UDP协议的影响

  • 一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报
  • 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败,那么这意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

MTU对于TCP协议的影响

  • TCP的一个数据报也不能无限大,还是受制于MTU,TCP的单个数据报的最长消息长度,称为MSSS
  • TCP在建立链接的过程中,通信双方会进行MSS协商
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
  • 然后双方得知对方的MSS值之后,选择较小的作为最终MSS
    -== MSS的值就是在TCP首部的40字节==变长选项中(kind=2)
  • MSS受制于MTU,MSS在选项中
    MSS和MTU的关系
    image

ARP协议

ARP不是一个单纯的数据链路层协议,而是一个介于数据链路层和网络协议之间的协议

ARP协议的作用

  • ARP协议建立了主机IP地址和MAC地址的映射关系
  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
  • 数据首先是被网卡接受到再去处理上一层协议的,如果接受到的数据包的硬件地址与本机不符,则直接丢弃
  • 通讯前必须获得目的主机的硬件地址
  • 如果没不用目的主机地址来先甄别,这样每次都要传到网络层才能甄别,效率太低了

ARP通信的过程

  • 源主机发出ARP请求,询问IP地址是192.168.0.1的主机的硬件地址是多少,并将这个请求广播到本地网段(以太网帧首部对的邮件地址填FF:FF:FF:FF:FF:FF表示广播)
  • 目的的主机接受到广播的ARP请求从,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
  • 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项
    则该表项失效,下次还要发出ARP请求来获得目的主机的硬件地址

查看ARP缓存表 (这样就不用再次请求IP地址对应的MAC地址了)

arp -a

  • 结果:
    image

为什么要有缓存表?

  • 下次就不需要再找MAC地址了

为什么表项要有过期时间而不是一直有效?

  • 可能IP或者MAC地址有变动,网卡坏了,换网卡了

ARP数据报的格式

image

  • 以太网地址其实就是MAC地址
  • 帧类型 : 区分是 ARP还是IP还是 RARP
  • 硬件类型:指链路层网络类型,1为以太网
  • 协议类型:指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度:对于以太网地址为6字节
  • 协议地址长度:对于和IP地址为4个字节
  • op:为1白哦是ARP请求,op字段为2表示ARP应答

DNS协议

此协议是把域名变成IP的系统

发展

互联网信息中心统一管理 (不方便,要每次下载更新)

  • 最初,通过互联网信息中心来管理这个hosts文件的
  • 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件
  • 其他计算机也需要定期下载更新版本的hosts文件才能正确上网。

hosts文件管理麻烦,于是产生了DNS系统

  • 一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系
  • 如果新计算机接入网络,这个信息注册到数据库中
  • 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址
  • 在域名解析的过程中仍然会优先查找hosts文件的内容

查询计算机上的hosts文件

cat /etc/hosts

浏览器输入一个url后 (域名解析过程)

1.域名解析

  • 1.浏览器得到url后先在缓存找,url缓存,缓存是有时间的(2分钟到30分钟不等)
  • 2.系统缓存- 如果在浏览器缓存里没有找到需要的记录,浏览器就会做一个系统调用,到系统缓存中找
  • 3.路由缓存
  • 4.ISP的DNS服务器中的DNS缓存
  • 5.递归搜索,你的ISP的DNS服务器从跟域名服务器开始递归搜索,从.com顶级域名服务器到Facebool的域名服务器。一般DNAS服务器的缓存中会有.com域名发,所以到顶级服务器的匹配过程不是那么必要

2.发送HTTP请求 返回一个重定向(为了排名,为了缓存能少点)

3.浏览器跟踪重定向地址

4.服务器处理请求

5.返回一个HTML响应

6.浏览器开始显示HTML

7.浏览器获取HTML中的对象 (比如图片)

Facebook聊天功能提供了关于AJAX一个有意思的问题案例:把数据从服务器端推送到客户端。因为HTTP是一个请求-响应协议,所以聊天服务器不能把新消息发给客户。取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息。

这些情况发生时长轮询是个减轻服务器负载挺有趣的技术。如果当被轮询时服务器没有新消息,它就不理这个客户端。而当尚未超时的情况下收到了该客户的新消息,服务器就会找到未完成的请求,把新消息做为响应返回给客户端

ICMP协议

  • ICMP协议是一个网络层协议
  • 用来测试网络是否畅通

ICMP功能

  • 确认IP包是否成功到达目标地址
  • 通知在发送过程中IP包被丢的原因
  • ICMP也基于IP协议工作,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议
  • ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要是用ICMPv6
  • ICMP确认IP包是否到达的过程其实也是ARP请求MAC地址的过程
    image
    ICMP的报文格式
0                 7                    15                  31
-------------------------------------------------------------
|   类型          | 代码                |校验和             |
-------------------------------------------------------------
|               不同类型的代码有什么不同的内容              |
-------------------------------------------------------------

ICMP大概分为两类报文

  • 一类是通知出错原因
  • 一类是用于诊断查询

ping 命令

  • 注意,此处ping的是域名,而不是url,一个域名可以通过DNS解析成IP地址
  • ping命令不光能验证网络的连通性,同时还会统计响应时间和TTL(IP包中的Time To Live ,生存周期)
  • ping命令会先发送一个ICMP Echo Request给对端
  • 对端接受到后,会返回一个ICMP Echo Reply

image

NAT技术

目的

  • 为了解决IP地址数量不充足的问题

关于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替换回10.0.0.10

NAPT

  • 当多个主机访问访问同一个外网服务器,对于服务器返回的数据中,目的IP都是相同对的,NAT路由器中用IP和port来建立这个关联
    image
  • 这个关联关系是NAT路由器自动维护的,例如在TCP的情况下,建立链接时,就会生成这个表项,在断开链接时,就会删除这个表项

NAT技术缺陷

  • 无法从NAT外部向内部服务器建立链接
  • 转换表的生成和销毁是额外的开销
  • 通信过程一旦NAT设备异常,所有上面的TCP链接也会断开

解决缺陷办法

NAT穿越技术 – 解决NAT缺点

NAT和代理服务器区别

目的

从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比
如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.

底层实现(网络层和应用层)

从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.

范围

从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以
跨网.

部署位置 (防火墙,路由器,服务器)

从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署
在服务器上.

代理服务器作用

  • 翻墙:广域网中的代理
  • 负载均衡:局域网中的代理

正向代理和反向代理

代购的例子

花王尿不湿是一个很经典的尿不湿品牌, 产自日本.
我自己去日本买尿不湿比较不方便, 但是可以让我在日本工作的表姐去超市买了快递给我. 此时超市看到的买家是我表
姐, 我的表姐就是 “正向代理”;
后来找我表姐买尿不湿的人太多了, 我表姐觉得天天去超市太麻烦, 干脆去超市买了一大批尿不湿屯在家里, 如果有人
来找她代购, 就直接把屯在家里的货发出去, 而不必再去超市. 此时我表姐就是 “反向代理”

  • 正向代理用于请求的转发(例如借助代理绕过反爬虫).
  • 反向代理往往作为一个缓存.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章