数据链路层:负责设备之间的数据帧的传送和识别。
一、以太网
以太网的帧格式
如何分离报头和有效数据?
报头是固定长度的
如何将数据交给上层协议?
通过类型,如果是0800,则交给IP协议,如果是0806,就交给ARP协议
Mac地址
- MAC地址用来识别数据链路层中相连的节点
- 长度为48位,及6个字节。 一般用16进制数字加上冒号的形式来表示(如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突,也有些网卡支持用户配置mac地址)
在网络传输时,源IP地址/目的IP地址不变(NAT技术将内网IP替换成公网IP除外),表示横跨多个网络的地址,源Mac地址/目的Mac地址会一直变化,描述的是路径上的每段路途的起点和终点
认识MTU
MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层产生的限制
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位
- 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)
- 不同的数据链路层标准的MTU是不同的
所以UDP/TCP发送的数据报文的大小都要在一定的范围内,不然在IP层就会被分片,让数据丢失的概率变大,效率变低。
UDP的报文中的有效数据<=1500-20-8=1472,TCP的报文中的有效数据<=1500-20-20=1460(最大段长度MSS)。TCP在建立连接时就会约定好MSS的大小,取两者的较小值
二、ARP协议
在局域网通信中,我们总是能通过主机的IP地址找到主机的Mac地址,从而将数据发送出去,但是我们如何通过IP地址得到Mac地址呢?--- ARP协议
ARP协议格式
- 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
- 硬件类型指链路层网络类型,1为以太网
- 协议类型指要转换的地址类型,0x0800为IP地址
- 硬件地址长度对于以太网地址为6字节
- 协议地址长度对于和IP地址为4字节
- op字段为1表示ARP请求,op字段为2表示ARP应答
这里有三点需要注意:
- 主机会将收到的ARP结果缓存起来(一段时间后失效) --- 有效减少ARP请求的次数,同时也防止别人的主机换了,我们还在往过期的地址发送数据
- 一台主机既能收到ARP请求也能收到ARP应答
- 主机会按照最新的地址信息来跟新缓存
用arp -a 命令,就能看到主机中缓存的地址
和ARP协议对应的还有一个RARP协议,作用是已知Mac地址要求IP地址,有兴趣可以了解一下
三、DNS协议(域名解析协议)
所谓的域名,就是我们日常输入的网址中写的类似www.baidu.com的字符串,它可以帮助我们记忆网站地址,不需要在使用IP地址。DNS协议的作用在于将域名翻译成IP地址。会有专门的域名解析服务器来帮助我们完成这一动作。
域名使用 . 连接
- com:一级域名,表示这是一个企业域名,同级的还有 "net"(网络提供商),"org"(非盈利组织) 等
- baidu:二级域名,公司名(或者组织的名称)
- www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于www.xxx.xxx这样的格式,来表示主机支持的协议
四、ICMP协议
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
- ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此把它归结为网络层协议
- ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要是用ICMPv6
以下是ICMP协议的一些主要特点和用途:
- 错误报告:当IP数据包在传输过程中出现问题时,如无法到达目的主机、TTL(Time To Live)超时等,目标主机会向源主机发送一个ICMP错误报告。这些错误报告有助于源主机了解数据包为何未能成功传输,从而采取相应的措施。
- 网络探测和诊断:ICMP协议提供了一些用于网络探测和诊断的工具,如ping命令。ping命令使用ICMP回显请求和回显应答报文来测试两台主机之间的网络连通性。当源主机发送一个ICMP回显请求报文给目标主机时,如果目标主机可达且工作正常,它会返回一个ICMP回显应答报文给源主机。
- 路由跟踪:traceroute(在Windows中为tracert)是一个使用ICMP报文和TTL值来追踪数据包从源主机到目标主机所经过的路由器路径的工具。通过逐步增加TTL值并观察ICMP超时或目标不可达报文,traceroute可以确定数据包在传输过程中经过的每一跳路由器。
- 网络管理:ICMP协议还可以用于网络管理,如地址掩码请求和应答(用于动态主机配置协议DHCP)以及路由器发现等。
ping命令
- 注意,此处 ping 的是域名,而不是url,一个域名可以通过DNS解析成IP地址
- ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存周期)
- ping命令会先发送一个 ICMP Echo Request给对端,对端接收到之后,会返回一个ICMP Echo Reply
- ping是基于网络层的ICMP协议的,没有端口号
五、NAT技术
NAT技术,全称为Network Address Translation(网络地址转换),是一种在IP网络中用于解决IPv4地址短缺问题的技术。以下是NAT技术的简单介绍:
定义与背景
- NAT技术是在1994年提出的,旨在通过将一个外部IP地址和端口映射到更大的内部IP地址集来转换IP地址。
- NAT允许在本地网络中使用私有IP地址,当连接互联网时则使用全局IP地址。
工作原理
- NAT使用流量表将流量从一个外部(主机)IP地址和端口号路由到与网络上的终结点关联的正确内部IP地址。
- NAT的实现方式有三种:静态转换(Static NAT)、动态转换(Dynamic NAT)和端口多路复用(OverLoad或PAT)。
NAT技术的缺点:
1、外网无法直接访问内网中的主机,因为转化表是内部主机访问外网时才会创建映射关系
2、 装换表的生成和销毁都需要额外开销
代理服务器
NAT vs 代理服务器
- 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器
- 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换。代理服务器往往工作在应用层
- 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网
-
从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上