用于两个设备(同一种数据链路节点)之间传递
目录
- 对比理解"数据链路层" 和 "网络层"
- 以太网
2.1 认识以太网
2.2 以太网帧格式 - MAC地址
3.1 认识MAC地址
3.2 对比理解MAC地址和IP地址 - 局域网通信
- MTU
5.1 认识MTU
5.2 MTU对ip协议的影响
5.3 MTU对UDP的影响
5.4 MTU对于TCP的影响
5.5 查看硬件地址和MTU - ARP
6.1 认识ARP协议
6.2 ARP协议的作用
6.3 ARP数据报格式
6.4 ARP协议的工作流程 - DNS
7.1 背景
7.2 域名解析
7.3 dig工具分析DNS过程 - ICMP
8.1 功能
8.2 报文格式
8.3 ping命令
8.4 traceroute命令
8.5 问题 - NAT
9.1 技术背景
9.2 转换过程
9.3 NAPT
9.4 缺陷 - 代理服务器
10.1 上网
10.2 NAT和代理服务器的区别 - 总结
11.1 数据链路层
11.2 网络层
11.3 传输层
11.4 应用层
1. 对比理解"数据链路层" 和 "网络层"
网络层解决数据跨网络传递,数据链路层解决直接相连的主机数据交付的问题。在局域网中,用mac地址区分特定的主机
2. 以太网
2.1 认识以太网
以太网不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等
例如以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等
局域网通信过程中,有很多台主机,
2.2 以太网帧格式
帧格式如下:
原地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的
帧协议类型字段有三种值,分别对应IP、ARP,RAPP
帧末尾是CRC校验码
如何解包和封装
采取定长报文
如何分用
报头里有类型,不同的值代表了不同的报文类型
3. MAC地址
3.1 认识MAC地址
MAC地址用来识别数据链路层中相连的节点
长度为48位,及6个字节,一般用16禁止数字加上冒号的形式来表示(例如:08:80:27:03:fb:19)
在网卡出厂时就确定了,不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突,也有些网卡支持用户配置mac地址)
3.2 对比理解MAC地址和IP地址
ip地址描述的是路途总体的起点和终点
mac地址描述的是路途上的每一个区间的起点和终点
4. 局域网通信
局域网中有很多主机,发送一个报文时所有主机都会收到,通过分离报头mac地址分辨是不是发给自己的,如果不是,就丢弃 。局域网是一个共享资源,如果同一时间有两台主机发消息,就会数据碰撞,所以有一些碰撞避免算法。主机数越多,碰撞的概率越大
交换机
这种设备可以划分碰撞与,减少局域网碰撞。原理是交换机左边或同样右边的两台主机发送数据,就不需要往另一边发送,减少了碰撞的概率。发送的数据越短,速度越快,也可以减少碰撞的概率
传输过程
A主机往B主机发送数据,首先网络层查路由表决策,先发到R主机,所以数据链路层封装后,原地址MACA,目标地址MAXR,到达R主机,数据交付到网络层,查路由表后,数据链路层封装为目标地址MACX,原地址MACR
5. MTU
5.1 认识MTU
MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层产生的限制
- 以太网帧中的数据长度规定最小为46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位
- 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)
- 不同的数据链路层标准的MTU是不同的
5.2 MTU对ip协议的影响
由于数据链路层MTU的限制,对于较大的ip数据包要进行分包
- 将较大的ip包分成多个小包,并给每个小包打上标签
- 每个小包ip协议头的16位标识(id)都是相同的
- 每个小包的ip协议头的3位标志字段中,第2位置为0,表示允许分片,第3位标识结束标记(当前是否是最后一个小包,是的话置为0,否则置为1)
- 到达对端时再将这些小包,会按顺序重组,拼接到一起返回给传输层
- 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是ip层不会负责重新传输数据
5.3 MTU对UDP的影响
一旦UDP携带的数据超过1472(1500-20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个ip数据包
这多个ip数据包有任意一个丢失,都会引起接收端网络层重组失败,那么就意味着,如果udp数据报在网络层被分片,整个数据被丢失的概率就大大增加了
5.4 MTU对于TCP的影响
tcp的一个数据报也不能无限大,还是受限于MTU,tcp的单个数据包的最大消息长度,称为MSS(Max Segment Size)
TCP在建立连接的过程中,通信双方会进行MSS协商
最理想的情况下,MSS的值正好是在ip不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
然后双方得知对方的MSS值,选择较小的最为最终MSS
MSS的值就是在tcp首部的40字节变长选项中(kind=2)
最好避免数据分片
MSS和MTU的关系
5.5 查看硬件地址和MTU
使用ifconfig命令,可以查看ip地址,mac地址和mtu
6. ARP协议
6.1 认识ARP协议
arp不是一个单纯的数据链路层协议,而是一个介于数据链路层和网络层之间的协议
6.2 ARP协议的作用
在局域网发送中,只知道目标的ip地址,数据链路层需要封装mac地址,事实并不知道。arp建立主机ip地址和mac地址的映射关系
6.3 ARP数据报格式
arp是在mac帧的上面,但属于数据链路层
注意到源MAC地址,目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层以以太网的情况是多余的,但如果链路层是其他类型的网络则是必要的
硬件类型指链路层网络类型,1为以太网
协议类型指要转换的地址类型,0x0800为ip地址
硬件地址长度对于以太网地址为6字节
协议地址长度对于ip地址为4字节
op字段1表示ARP请求,2表示arp应答
6.4 ARP协议的工作流程
如何知道目标mac地址
源主机发出arp请求,询问ip地址是192.168.1.35的硬件地址是多少,会将这个请求广播到本地网段(以太网首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)
每台主机收到后,解包分用,看到目的以太网是广播地址,所以要受理。先看帧类型是arp请求,然后去掉报头交付给arp,arp先看op是请求,然后看目标ip地址不是发给自己的,就丢弃了
当发送的目标主机收到这个报文,arp层判断是自己的,重新填充报头,这时候源mac地址就可以填自己,目标就是发送给自己的主机。mac帧继续封装的时候目标mac地址这次知道了,就直接填对方。这时在数据链路第一层就能判断不是自己的,直接丢弃。当这个主机收到arp应答后,就知道了它的mac地址
arp过程中,收到的任何arp报文,都是先看op,op决定了arp类型
arp表
每台主机都维护了一个arp缓存表,可以用arp -a命令查看,缓存表中的表项有过期时间(一般20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发app请求来获得目的主机的硬件地址
维护这个表可以避免每次都需要arp请求,提高了网络通信的效率。设置过期时间可以动态更新,可能信息不会一直有效,资源优化,定期清理防止一直占用系统资源。安全性考虑,攻击者可能伪造arp应答欺骗主机,没有过期时间限制,可以长时间控制目标主机
网络欺骗
1.arp只有在缓存失效的时候,才会进行
2.可以通过我的ip和子网掩码,得到网络号,然后拼接ip地址,ping所有的主机,得到所有主机的ip和mac
3.如果收到多次同样的arp应答,会以最新的为准
有一台新主机hostM接入局域网,可以不断给主机发送arp应答,当维护的arp表失效时,由于会以最新的arp应答为准,所以主机A就会误认为这个是路由器的应答,这就是arp欺骗。这时,收到A的所有报文丢弃,就造成主机A断网。做中间人机器,将报文转发给路由器,将路由器的回复转发给主机A可以欺骗一方,也可以欺骗另一方路由器自己是主机A。
7. DNS
是一整套从域名映射到ip的系统
7.1 背景
tcp/ip使用ip地址和端口号确定网络上的一台主机的一个程序,但是ip地址不方便记忆
于是人们发明了一种叫主机名的东西,是一个字符串,并且使用host文件来描述主机名和ip地址的关系
在访问网页时,先要dns服务,获取ip地址,然后再访问
最初,通过互联网信息中心(SRI-NIC)来管理这个hosts文件的
- 如果一个新计算机要接入网络,或者某个计算机ip地址变更,都需要到信息中心申请变更hosts文件
- 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网
这样太麻烦了,于是产生了DNS系统
- 一个组织的系统管理机构,维护系统内的每个主机的ip和主机名的对应关系
- 如果新计算机接入网络,将这个信息注册到数据库中
- 用户输入域名的时候,会自动查询DNS服务器,由DNS检索数据库,得到对应的ip地址
至今,我们计算机仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容
cat /etc/hosts
问题:浏览器输入url后,发生了什么?
没有固定答案,越详细越好
需要全面回答,三个阶段,http过程+域名解析,https,然后是细节问题
7.2 域名解析
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称
域名使用 .连接
- .com :一级域名,表示是一个企业域名,同级的还有.net(网络提供商),".org"(非盈利组织)等
- baidu:二级域名,公司名
- www:习惯用法,人们在使用域名时,往往命名成类似于ftp.xxx.xxx/wwww.xxx.xxx这样的格式,表示主机支持的协议
7.3 dig工具分析DNS过程
安装dig工具
yum install bind-utils
使用dig指令查看域名解析过程
dig www.baidu.com
结果解释:
1.开头位置dig指令的版本号
2.第二部分是服务器返回的详情,重要的是status参数,NOERROR表示查询成功
3.QUESTRION SECTION 表示要查询的域名是什么
4.ANSWER SECTION 表示查询结果,结果先将www.baidu.com 查询www.a.shifen.com, 再将www.a.shifen.com查询成了两个ip地址
5.最下面时一些结果统计,包含查询时间和DNS服务器的地址等
更多idg的使用方法,参见
https://www.imooc.com/article/26971?block_id=tuijian_wz
8. ICMP
是一个网络层协议
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,但是IP协议并不提供可靠传输,如果丢包了,ip协议并不能通知传输层是否丢包以及丢包的原因
8.1 功能
icmp正是这种协议,主要功能包括:
确认ip包是否成功到达目标地址
通知在发送过程中ip包被丢弃的原因
icmp是基于ip协议工作的,但是并不是传输层的功能,因此人们把它仍然归结为网络层协议
icmp只能搭配ipv4使用,如果ipv6,需要用icmpv6
8.2 报文格式
ICMP大概分为两类报文:
- 一类是通知出错原因
- 一类用于诊断查询
8.3 ping命令
注意,此处ping的是域名,而不是url,一个域名可以通过DNS解析成ip地址
ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存周期)
ping命令先发送一个ICMP Echo Request给对端
对端收到后,会返回一个ICMP Echo Reply
8.4 traceroute命令
基于ICMP协议实现,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器
8.5 问题
telnet是23端口,ssh是22端口,那么ping是什么端口?
ping命令基于ICMP,是在网络号,而端口号,是传输层的内容,在ICMP中根本就不关注端口这样的信息
9. NAT技术
9.1 技术背景
之前讨论了ipv4协议中,ip地址数量不充足的问题
NAT技术当前解决ip地址不够用的主要手段,是路由器的一个重要功能;
- NAT能够将私有IP对外通信时转为全局IP,也就是一种将私有ip和全局ip相互转化的技术方法
- 很多学校,家庭,公司内部采用每个终端设置私有ip,而在路由器或必要的服务器上设置全局ip
- 全局ip要求唯一,但私有ip不需要,在不同的局域网中出现相同的私有ip是完全不影响的
9.2 转换过程
- 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发送数据时就会生成表中的映射关系
9.3 NAPT
那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的ip都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT解决这个问题,使用ip+port来建立这个关联关系
上面维护的关联关系同时区分了不同的port,由nat路由器自动维护,在tcp的情况下,建立连接,就会生成这个表项,断开连接后,会删除
9.4 缺陷
无法从nat外部向内部服务器建立连接
转换表的生成和销毁都需要额外开销
通信过程中一旦nat设备异常,即使存在设备,所有的tcp连接都会断开
nat穿越
内网穿透,用一台主机充当服务器,一台设备长时间建立连接,另一台设备通过访问服务器,服务器将请求转发给这台设备,就可以操控另一台电脑。工具有frp等
路由器往往都具有nat设备的功能,通过nat设备进行中转,完成子网设备和其他子网设备的通信过程
10. 代理服务器
代理服务器看起来和nat设备有一点像,客户端向代理服务器发送请求,代理服务器将请求转给真正要请求的服务器,服务器返回结果后,代理服务器又把结果传回客户端
代理服务器分为正向代理和反向代理,是一种应用比较广的技术
- 翻墙:广域网中的代理
- 负载均衡:局域网中的代理
代购例子
花王尿不湿是一个很经典的尿不湿品牌, 产自日本.
我自己去日本买尿不湿比较不方便, 但是可以让我在日本工作的表姐去超市买了快递给我. 此时超市看到的买家是我表
姐, 我的表姐就是 "正向代理";
后来找我表姐买尿不湿的人太多了, 我表姐觉得天天去超市太麻烦, 干脆去超市买了一大批尿不湿屯在家里, 如果有人
来找她代购, 就直接把屯在家里的货发出去, 而不必再去超市. 此时我表姐就是 "反向代理"
正向代理用于请求的转发(例如借助代理绕过反爬虫)
反向代理往往作为一个缓存
正向代理和反向代理在计算机网络中各自发挥着重要的作用。正向代理主要关注客户端的访问需求和安全性,而反向代理则更注重后端服务器的负载均衡、安全性和性能优化。在实际应用中,我们可以根据具体需求选择合适的代理方式,实现网络架构的优化和升级
10.1 上网
如果访问的是外网,在运营商这里判断出来会直接返回。常规情况下,http默认携带的是非http的其他数据,那么也可以携带http协议的报文。将http再封装一层,发送到运营商,运营商发现访问的是下面的服务器,发送过去,服务器解析后获得http请求,发送给目标服务器,目标服务器同样返回给服务器,服务器再封装一层http响应返回回来,就得到了外网的响应。这就是http的隧道技术,不只http可以,同样有其他更优秀的加密协议,如socks5
10.2 NAT和代理服务器的区别
从应用上讲,nat设备是网络基础设备之一,解决的是ip不足的问题,大力服务器更贴近具体应用,比如翻墙,加速器等
从底层实现上讲,nat工作在网络层,直接对ip地址替换,代理服务器往往工作在应用层
从使用范围讲,nat一般在局域网的出口部署,代理服务器可以在局域网,也可以在广域网,也可以跨网
从部署位置看,nat一般集成在防火墙、路由器等硬件设备,大力服务器是一个软件程序,需要部署在服务器上
11. 总结
11.1 数据链路层
数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据
以太网是一种技术,既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等
以太网帧格式
理解mac地址
理解arp协议
理解mtu
11.2 网络层
网络层的作用:在复杂的网络环境中确定一个合适的路径
理解ip地址,理解ip地址和mac地址的区别
理解ip协议格式
了解网段划分方法
理解如何解决ip数目不足的问题,掌握网段划分的两种方案,理解私有ip和公有ip
理解网络层的ip地址路由过程,理解一个数据包如何跨越网段到达最终目的地
理解ip数据报分包的原因
了解icmp协议
了解nat设备的工作原理
11.3 传输层
传输层的作用:负责数据能够从发送端传输接收端
理解端口号的概念
认识udp协议,了解udp协议的特点
认识tcp协议,理解tcp协议的可靠性,理解tcp协议的状态转化
掌握tcp的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答特性
理解tcp面向字节流,理解粘包问题和解决方案
能够基于udp实现可靠传输
理解mtu对udp/tcp的影响
11.4 应用层
应用层的作用:满足我们日常需求的网络程序,都是在应用层
能够根据自己的需求,设计应用层协议
了解HTTP协议
理解DNS的原理和工作流程