💓博主CSDN主页:杭电码农-NEO💓
⏩专栏分类:Linux从入门到精通⏪
🚚代码仓库:NEO的学习日记🚚
🌹关注我🫵带你学更多操作系统知识
🔝🔝
Linux网络
- 1. 前言
- 2. 认识MAC地址
- 3. 认识以太网
- 4. ARP协议详解
- 5. DNS技术
- 6. 总结以及拓展
1. 前言
如果说网络层解决的是数据从A主机发到B主机的问题, 那么数据链路层解决的就是数据从当前路由器转发给下一台路由器的问题.
本章重点:
本篇文章会讲解以太网协议, MTU对上层协议的影响, ARP协议, DNS技术等. 本篇文章结束, 标志着对整个Linux网络的认知学习就结束了
2. 认识MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
通俗来讲, 拿唐僧西天取经的例子来说, IP地址代表, 唐僧从东土大唐要到西天去, 东土大唐和西天就是两个IP地址, 而从东土大唐到西天, 途中会经过火焰山, 狮驼岭, 女儿国, 盘丝洞等地方, 从火焰山到狮驼岭, 这其中火焰山和狮驼岭可以理解为MAC地址, 是真实路由时需要经过的地点(网络中对应路由器)
下面的以太网的目的地址, 其实就是下一跳的MAC地址
3. 认识以太网
“以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;
宏观上, 网络的本质就是一个一个局域网构成的
以太网的格式:
我们注意到, 数据的大小最大只能是1500字节, 是不是很熟悉? 没错, 在网络层讲解IP协议时说过, 数据链路层一次性最大只能带1500字节的数据, 所以上层会有分片操作, 首尾呼应
局域网通信原理:
在局域网通信中, H1主机向H6主机发送信息时, 会直接将数据扔在局域网中(可以理解为上图的横线), 也就是说在这个局域网中, 不仅仅H6会收到H1发来的数据, H2,3,4,5,甚至是H1自己也会收到, 但是在数据链路层解包后, 发现目的MAC地址并不是本机, 这些机器会自动丢弃这些数据, 所以说最后只有H6的数据会被交付到上层. 不仅如此, 局域网中若多态主机都在发送数据, 数据之间就会发送碰撞, 一旦发送碰撞, 数据就不能再使用了
数据链路层转发过程::
一旦一份数据的MAC地址不在本局域网, 它会通过路由器被转发到其他局域网, 一直如此, 直到找到目标IP地址机器才会停下. 所以说, 在网络转发中, 目的IP地址不变, 但是每一次转发时的mac帧报头会发送改变, 因为你的下一跳的MAC地址是会一直变化的. 但是任意一台主机都暂时无法得知下一跳的MAC地址, 如果不知道下一跳的MAC地址也就无法封装mac帧(由ARP协议解决)
4. ARP协议详解
先明确一点:
ARP协议建立的主机IP地址和MAC地址的映射关系, 在同一网段中, 需要通过目的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数据报的格式
其实聪明的你一定发现了, 当数据从主机A进入到主机B所在的局域网时, 由于局域网通信只看MAC地址, 所以你只知道对方的IP地址是没用的! 所以在通信前, 主机A会先发送一个广播, 得知对方的MAC地址, 之后再进行通信时, 只要数据传输到主机B所在的局域网, 就能直接将数据发给B. 除此之外, ARP协议分为请求和应答, 这个也很好理解, 当一台主机收到一个广播时, 一定会先查看是对方返回的应答(里面存放对方MAC地址),还是有其他机器给你发的请求(代表其他主机想给你发数据)
5. DNS技术
你好不好奇, 为什么在搜索栏输入QQ会跳转到QQ官网? 你并没有输入URL, 怎么做到的?答案是: DNS(Domain Name System),是一整套从域名映射到IP的系统
- 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系.
- 如果新计算机接入网络, 将这个信息注册到数据库中;
- 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.\
计算机上仍然保留了hosts文件. 域名解析过程会优先查找hosts文件的内容.
cat /etc/hosts
6. 总结以及拓展
其实作为学习后端开发的在校生, 数据链路层的内容了解到这种程度已经很不错了, 对于Linux网络的宏观学习就到此为止了, 其实你要细究网络的细节, 还是有很多值得学习的东西的, 比如说NAT,NAPT技术, 代理服务器, ICMP协议等. 这里就交给大家自己探索了.
还有一点, 面试时经常会问: 浏览器中输入url后, 发生的事情, 这里大家可以自己总结总结. 详情可以参考这篇文章: 浏览器输入URL后发生的事