当前位置: 首页 > news >正文

【Linux网络(七)】数据链路层

目录

1、认识MAC地址

2、 mac帧格式

3、局域网的通信原理

4、ARP协议

浏览器输入url1后发生的事情:(面试题)


数据链路层解决的是:直接相连的主机(不仅仅包括电脑,还包括路由器)之间,进行数据交付的问题

1、认识MAC地址

Mac地址用来在同一个局域网中,区分特定的主机。

1、MAC地址用来识别数据链路层中相连的节点;
2、长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
3、在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).

MAC地址 像身份证号(唯一标识设备硬件),IP地址 像邮寄地址(逻辑定位网络位置)

信封(数据帧)上写收件人MAC地址(快递员只看这个送货到下一站)

信纸(IP包)内写收件人IP地址(确保最终送到正确城市和街道)

MAC地址 是设备硬件的“身份证”,负责局域网内精准投递。

IP地址 是网络中的“邮政编码”,负责全局路由定位。

协作方式:IP地址决定数据包的最终目的地,MAC地址决定下一跳交给哪个设备(如路由器或本地主机)。两者缺一不可,共同实现网络通信。

为什么需要MAC地址,只用IP地址不行吗?

IP地址是逻辑分配可变的,而MAC地址是物理设备的唯一标识,交换机等二层设备依赖MAC地址在局域网内高效转发数据

2、 mac帧格式

ARP:IP换mac

RARP:mac换ip

1、mac帧如何做到解包和封装?

采用定长报头       将报头和有效载荷进行分离

目的地址:下一跳主机要去的mac地址  

源地址:这台主机的mac地址

2、如何做到分用?

如何知道我的有效载荷是什么数据呢?

类型:0800  载荷是IP报文    0806 是ARP报文  8035 是RARP报文

通过类型就可以只要我要将我的有效载荷交给上层的谁。就可以做到分用。

3、局域网的通信原理

mac帧只在局域网中有效,经过路由器要经过解包和重新封包的过程。

局域网中的主机越多,发生碰撞的概率就越大。  碰撞避免算法来防止碰撞

交换机可以划分碰撞域,减少局域网中的碰撞。

发送的数据尽量少,因为数据量大需要花费的时间就长,发生碰撞的概率就会变大。因此一次要发送尽量少的数据。让更多的报文在局域网中岔开发送。即上面的最多1500字节。IP分片,tcp分段根本原因就是局域网通信原理。

因为要减少碰撞,所以最多发1500.那么数据链路层就给网络层说数据发送要少,IP层可以分片,但是分片不好,所以要减少分片。即网络层:1500-20(报头长度)=1480 ,那么控制数据的发送速度就是要传输层来控制,即tcp控制,那么tcp报头+有效载荷   = 1480  , 1480 - 20 = 1460 

1460:MSS---传输层(TCP) 单次能发送的应用层数据最大长度(不包括TCP/IP头部)

MTU 是物理网络的限制,决定数据链路层能传输的最大包大小。

MSS 是TCP为避免IP分片而主动限制的应用数据长度,基于MTU计算。

数据发送到目标网络,本质是通过无数个连续的子网实现的。

4、ARP协议

ARP协议是局域网协议。在局域网中进行通信,就一定要将数据封装成数据帧。在局域网中,将目标主机的IP转为mac地址!因为在路由器转发时是要进行解包和重新封包,因为只知道目标IP而不知道目标mac地址。

先进行广播,然后再一对一把地址反向回来。

以太网头部时mac帧 

ARP协议属于MAC帧上层,但是归属到数据链路层。

硬件类型:指网络类型,写1表示以太网。

协议类型:要转化的地址类型    0800代表的是IP地址

op:1表示ARP请求    2表示ARP应答

先进行广播,然后再一对一把地址反向回来。

在arp过程中,收到任何arp报文,都是先看op!!

 op决定了arp的类型是请求还是应答。如果是请求就看目的mac地址和目的ip地址,如果是应答就看发送端mac地址和发送端IP地址。

收到一个报文,它的入口路由器中会存在很多内网当中主机的ip地址到mac地址的映射关系

arp的周边问题:

1、arp只有在缓存失效的时候才会触发,不必每次都做。

2、ping会触发arp请求  ping目标IP 如果目标IP存在arp就会解析其mac地址并缓存到本地 ARP 表。就可通过 arp -a(Windows)或 arp -an(Linux)查看缓存的 IP 和 MAC 地址。

浏览器输入url1后发生的事情:(面试题)

http过层+域名解析:通过域名解析,拿到目标服务器的IP地址,浏览器拿着目标主机的IP地址进行http请求,三次握手建立连接,构建http请求,构建它的请求行,经过网络转发到达目标主机,目标主机进行http应答,构建响应,构建响应报头,加正文,再通过tcp连接把响应发给我,浏览器得到之后对报文做解析,解析之后对正文做解释,浏览器渲染就可以看到结果。https提一下

1、解析URL 

如果输入的URL是  (http://www.example.com/index.html)

协议:如HTTP或HTTPS,决定后续的通信方式

域名:如www.example.com  需要转化为ip地址

路径:/index.html,服务器上的资源路径

2、DNS查询-----将域名转化为IP地址

浏览器缓存:检查本地缓存是否有该域名的IP

系统缓存:查询操作系统(如本地hosts文件)

路由器缓存:检查本地路由器的DNS缓存

ISP的DNS服务器:向互联网服务提供商的DNS服务器发起递归查询

根域名服务器→顶级域名服务器(.com)→权威域名服务器(如example.com的NS记录),最终返回 IP。

3、建立TCP连接(和TLS加密)

浏览器通过ip地址和端口(默认HTTP是80,HTTPS是443)与服务器建立TCP连接,过程为三次握手:

a、客户端发送SYN   

b、服务器返回SYN+ACK

c、客户端发送ACK,连接建立

如果是HTTPS,需要进行TLS握手,以建立安全连接:

  1. 客户端发送支持的加密算法列表和随机数。

  2. 服务器返回选择的加密算法、证书(含公钥)和随机数。

  3. 客户端验证证书合法性(如颁发机构、有效期)。

  4. 客户端生成预主密钥,用服务器公钥加密后发送。

  5. 双方根据随机数和预主密钥生成对称会话密钥,后续通信加密。

4、发送HTTP请求

浏览器发送HTTP请求报头,内容包含:
请求行:方法(GET/POST)、路径、协议版本

请求头:Host、User-Agent、Accept、Cookie 等。

请求体:如POST请求中的表单数据)。

5、服务器处理请求并返回响应

服务器处理请求后返回 HTTP 响应报文:
·状态行:状态码(如200 0K、404 Not Found)。
·响应头:Content-Type、Content-Length、Cache-Contro1 等。
·响应体:HTML、CSS、JavaScript 等资源内容

6、浏览器解析和渲染页面

浏览器解析响应内容并渲染页面:
1. 构建 DOM 树:解析 HTML生成文档对象模型(DOM)。
2.构建 CSSOM 树:解析 CSS 生成 CSS 对象模型。
3.合并为渲染树:结合 DOM 和 CSSOM,排除非可见元素(如<head>)。
4.布局(Layout):计算元素的位置和尺寸(如盒模型)。
5.绘制(Paint):将渲染树转换为像素数据,显示到屏幕。
6.执行JavaScript:遇到<script>标签时,可能阻塞渲染,直到脚本执行完成。

7、断开连接

若使用 HTTP/1.1的 Connection:keep-alive,TCP 连接会保持复用;否则通过 四次挥手断开连接:
1. 客户端发送 FIN 包。
2.服务器返回ACK 包。
3.服务器发送 FIN 包。
4.客户端返回ACK 包。

telnet23端口, ssh22端口, 那么ping是什么端口 ???

ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. ICMP中根本就不关注端口号这样的信息

5、NAT技术

主机A、B、C都是通过路由器进行转发的。那么。要从服务器往回转发的时候,通过路由器时,路由器怎么知道要发给哪个主机?

路由器会维护转换表左边的IP地址唯一(就算相同,端口号也会不同) 右边也唯一,一一对应就可以反向查表,把数据给主机。

相关文章:

  • MySQL 表 t1 建立联合索引 (a, b, c),在 where a < ? and b > ? and c < ? 中哪些索引生效
  • 一台电脑最多能接几个硬盘?
  • localhost 和 127.0.0.1 的区别
  • 图解AUTOSAR_SWS_FlashDriver
  • 5G核心网(5GC)开户中,DNN(Data Network Name,数据网络名称)
  • 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解
  • Python 爬虫案例
  • Redis:String 类型 内部实现、编码、命令及应用场景
  • Java基础 3.27
  • C语言学习关键笔记
  • DeepSeek详解:探索下一代语言模型
  • 并查集(Union-Find Set)课程笔记
  • 【JavaScript】闭包笔记
  • Ubuntu 防火墙配置
  • 头条项目的文章延迟发布功能
  • pyqt环境搭建
  • 吐血教程:搭建Flutter开发环境
  • DQL语句-数据处理函数
  • Java 基本数据类型 vs 包装类(引用数据类型)
  • 搜广推校招面经六十
  • 东莞电商页面设计公司/重庆旅游seo整站优化
  • 拼团小程序制作平台/宁波seo外包服务平台
  • 电子商务网站开发费用/如何做一个自己的网站
  • 佛山专业做企业网站/建网站的公司排名
  • 供需网站开发/河北seo推广公司
  • 昆明网站建设一条龙/下载百度语音导航地图安装