浏览器发起请求(域名解析)
DNS 或 HTTPDNS 查询:用户在浏览器输入网址(URL),浏览器需将域名(如www.kaola.com)转换成 IP 地址。通过 DNS 或 HTTPDNS 协议,浏览器查询得到了对应的 IP 地址,例如 106.114.138.24。
URL 转换成 IP:域名就像网络的“地址簿”,将人类记忆的域名转成计算机辨认的 IP 地址,这是访问的第一步。
网络层与 IP 路由
IP 层封装:传输层封装完成后,将数据包交给网络层,网络层添加源 IP(浏览器地点的 IP 地址)和目的 IP(服务器的 IP 地址)。
路由选择:操作系统检查目的 IP 地址。如果是外部地址(如外网),则会通过默认网关转发出去。默认网关的 MAC 地址通过 ARP 协议解析获取。
数据包的路由传输
ARP 协议:浏览器通过 ARP 协议询问本地网关的 MAC 地址,然后将封装有目的 IP 的数据包发送给网关。
网关的路由转发:数据包到达网关(路由器),路由器根据其路由表决定下一跳,逐级找到到达目的服务器的最佳路径。
多跳传输:每个路由器就像旅途中的城关,将数据包沿着路由协议(如 OSPF 或 BGP)确定的路径逐跳转发,直到到达目的网络。
TCP 三次握手过程:
第一次握手:客户端向服务器发送 SYN 包,请求创建连接。
第二次握手:服务器收到 SYN 包后,返回一个 SYN-ACK 包以确认。 >第三次握手:客户端收到 SYN-ACK 包,返回一个 ACK 包,连接正式创建。
IP 层的操作: 在每次握手时,TCP 会封装数据包,并在网络层(即 IP 层)加入 IP 头部,包含源 IP 和目的 IP 地址。
路由选择:如果客户端和服务器不在同一个网络,IP 层负责确定命据包的路由路径,从源 IP 经过多个路由器,最终到达目的 IP。
分片与重组:如果数据包过大,IP 层大概会对其举行分片。每个分片带着 IP 头,传输至目的地址后,重新组合成完整的数据包。
MAC 层的操作: MAC 层是在数据链路层(第二层)上工作的,负责在局域网中找到目的设备的物理地址(MAC 地址)并传输数据。
ARP 协议(地址解析协议):在每次握手前,IP 层需要通过 ARP 查询目的 IP 地址对应的 MAC 地址(如果尚未缓存)。
例如,客户端会向局域网广播一个 ARP 请求,询问目的 IP 的 MAC 地址。目的设备回应其 MAC 地址,之后数据包中会包含这个 MAC
地址。 帧的封装:当 IP 层准备好数据包后,MAC 层会封装它,生成包含源 MAC 和目的 MAC 的帧,用于局域网内传输。
数据帧的传输:在局域网中,互换时机利用 MAC 地址表决定命据帧的转发路径,使其到达目的 MAC 地址。
在三次握手中,IP 层负责路由和 IP 地址管理,确保数据包从源 IP 发送到目的 IP。而MAC 层负责局域网内的传输,通过 ARP 获取 MAC 地址并举行帧封装,使数据帧能在局域网内正确路由。
2、 二层设备处置惩罚的包里,有没有 HTTP 层的内容呢?
DNS 解析(域名到 IP 地址的转换) 输入主机名:你在 SSH 客户端中输入公有云主机的域名(例如 cloud.example.com)时,系统需要先获取目的主机的 IP 地址。 本地 DNS 缓存检查:客户端会先查询本地 DNS
缓存,如果已经缓存了域名对应的 IP 地址,则直接利用。如果没有,则向 DNS 服务器请求解析。 递归查询:如果本地没有缓存,客户端会向
DNS 服务器发送域名查询请求。DNS 服务器会举行递归查询,直到找到对应的 IP 地址,然后将其返回给客户端。 得到 IP 地址:DNS
解析完成后,客户端得到公有云主机的 IP 地址,以便举行后续的网络通信。
TCP 三次握手创建连接 客户端发送 SYN 包:客户端向目的主机的 IP 地址发送一个 SYN 包,表现希望创建连接。这个包会到达服务器的 22 端口(默认 SSH 服务端口)。 服务器响应 SYN-ACK 包:公有云主机上的 SSH
服务器吸收到 SYN 包后,回应一个 SYN-ACK 包,表现接受连接请求。 客户端回应 ACK 包:客户端收到服务器的 SYN-ACK
包后,发送一个 ACK 包,确认连接已经创建。此时 TCP 连接正式创建完成,双方进入“已连接”状态。 三次握手创建的 TCP 连接为
SSH 协议的加密通信提供了可靠的底子传输通道。
DNS 解析(将域名转换为 IP 地址) 本地 DNS 缓存检查:浏览器起首检查是否已经缓存了目的域名对应的 IP 地址。如果缓存存在且有效,则跳过 DNS 查询。 DNS 服务器查询:若缓存中没有该 IP 地址,浏览器会向 DNS 服务器发起 DNS
查询请求。 递归查询:如果 DNS 服务器也没有该记载,它会向根 DNS 服务器递归查询,逐级寻找 authoritative DNS
服务器来获取目的域名的 IP 地址。 获取 IP 地址:DNS 解析完成后,返回目的服务器的 IP 地址,浏览器利用该 IP 地址创建连接。
TCP 三次握手创建连接 客户端发送 SYN 包:浏览器向目的 IP 地址发送 SYN 包,请求创建连接(默认端口为 443)。 服务器响应 SYN-ACK 包:电商网站的服务器收到 SYN 包后,回复一个 SYN-ACK 包,表现同意连接。 客户端发送 ACK
包:浏览器收到服务器的 SYN-ACK 包后,发送 ACK 包确认连接成功创建。至此,TCP 连接创建完成,为后续的 HTTP
请求提供传输通道。
调用 process_layer2(buffer) 处置惩罚数据链路层 进入process_layer2(buffer) 函数后,程序会从 Buffer 中解析出二层的 MAC 头部,并根据目的 MAC 地址判定是否需要继承处置惩罚。 如果目的 MAC地址与本机匹配,说明该包是发给本机的,则进入下一步;否则,程序会丢弃该包。
调用 process_layer3(buffer) 处置惩罚网络层 在 process_layer3(buffer) 中,程序会解析并移除 IP 头部,检查目的 IP 地址。 如果目的 IP 地址不是本机地址,程序会将包转发至其他网络设备;如果 IP 地址是本机的,则继承处置惩罚。程序根据 IP 头中的协议字段,判定是 TCP 包照旧 UDP 包,并相应地进入下一步。
DHCP Discover(我来啦,有人吗?)
新设备刚接入网络时,就像个新来的游客,啥都不清楚,只知道本身的 MAC 地址,于是它“吼”了一声:“我来啦,有人能给我个 IP 地址吗?”这就是 DHCP Discover 步调。在这个阶段,设备用 IP 地址 0.0.0.0 作为源地址,因为它还没有正式的 IP 地址,而目的地址是广播地址 255.255.255.255,全部网络设备都能收到。这个数据包封装在 UDP 和 BOOTP 里,虽然实际上 DHCP 是 BOOTP 的增强版,但在抓包软件里大概还会显示为 BOOTP 协议。
Discover 包的内容很简单:设备带着本身的 MAC 地址,告诉网络管理员(DHCP Server)本身还没有 IP,问谁能租个 IP 地址给它。
DHCP Offer(来了新人,有 IP 给你!)
如果网络管理员已经设置了 DHCP Server,负责管理 IP 地址,就会马上知道有新人入网了。在确认 MAC 地址唯一的环境下,DHCP Server 就会给新人发送一个 DHCP Offer。DHCP Server 把这个 IP 地址“生存”给这个新人,确保不会再分配给其他设备。
在这个 Offer 包里,DHCP Server 提供了一个 IP 地址,同时也包含了子网掩码、网关和租约时间等设置信息。由于新设备还没有 IP 地址,DHCP Server 也需要通过广播方式发送 Offer 数据包,让它能吸收到。
DHCP Request(确认吸收租约)
新设备收到 DHCP Server 的 Offer 包后,发现有个 IP 可以用了,自然很开心!如果网络中有多个 DHCP Server,设备乃至大概收到多个 IP 地址(真是被宠若惊)。不过它会挑一个(通常是第一个到达的)并发送 DHCP Request 包来确认。这个 Request 包照旧用广播方式发送,因为设备还在用 0.0.0.0 源地址,并把本身选定的 IP 地址、MAC 地址以及 DHCP Server 的信息包含在包中,以便告诉全部的 DHCP Server:“我决定选这个 IP 地址了,谢谢大家!”
DHCP Acknowledgement(正式入网)
当 DHCP Server 收到设备的 Request 后,会广播一个 DHCP ACK 包,表现已经确认设备选的 IP 地址。这个 ACK 包包含 IP 地址的租用信息和其他设置信息,表现“欢迎加入网络大家庭!”这一步后,新设备就可以正式利用这个 IP 地址,成为网络的一部分。