目录
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握手,以建立安全连接:
客户端发送支持的加密算法列表和随机数。
服务器返回选择的加密算法、证书(含公钥)和随机数。
客户端验证证书合法性(如颁发机构、有效期)。
客户端生成预主密钥,用服务器公钥加密后发送。
双方根据随机数和预主密钥生成对称会话密钥,后续通信加密。
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 包。
telnet是23端口, ssh是22端口, 那么ping是什么端口 ???
ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息
5、NAT技术
主机A、B、C都是通过路由器进行转发的。那么。要从服务器往回转发的时候,通过路由器时,路由器怎么知道要发给哪个主机?
路由器会维护转换表左边的IP地址唯一(就算相同,端口号也会不同) 右边也唯一,一一对应就可以反向查表,把数据给主机。