1) 应用层(Application Layer)------"业务在说什么"
干什么:产生"有意义的数据"并定义"对话语义"
典型单位:请求/响应/SQL/事务/HTTP报文/协议消息
例子(Oracle 语境):
•客户端应用 / JDBC / OCI 要做的:登录认证、发 SQL、取行、commit/rollback
•Oracle 协议层:把它封装成 Oracle Net 的消息(TNS 层在上面跑)
•OS 看到的,已经是"一串要发出去的 payload",但此时还不知道走哪根线、怎么保证不丢
关键点:
•应用层不等价"你写的应用代码",它更像是"带语义的最终载荷"
•你前面说"VIP漂移让应用层快速知道失败"------更准确说法是:TCP 把失败信号(RST/写错误)一路返回给 socket API,最终应用层拿到错误并决定重连
- 传输层(Transport Layer)------"这条连接怎么可靠送到"
干什么:在两台机器的 进程端口之间,管:
•端到端投递(靠端口:1521/3306/...)
•可靠性(重传、排序、ack、窗口)
•连接状态机(三次握手、四次挥手、keepalive)
典型协议:TCP / UDP
单位:Segment(段),头里最关键的是:
•SrcPort / DstPort
•Seq/Ack(排序与确认)
•标志位(SYN / ACK / FIN / RST)
Oracle 语境里它负责什么:
•客户端连 VIP:1521,靠的就是 TCP(IP+端口=连接四元组)
•"TCP 超时太长很难受"的根源就在这一层:
•如果链路"中间变黑洞",TCP 会 重传(retransmission) 等 RTO 增长
•很多时候不是应用层迟钝,而是传输层还在努力抢救连接
•VIP 漂到另一节点后,新节点 没有旧 TCP 状态,通常会回 RST → 传输层立刻告诉应用层:"别等了,死透了"
一句话:传输层管的是"这条管道通不通、按序到没到",不管你 SQL 在管道里说了什么。
- 网络层(Network Layer)------"往哪个IP走、过哪些路由器"
干什么:把包从源 IP 送到 目的 IP(寻址 + 路由选择)
典型协议:IP(IPv4/IPv6)、ICMP
单位:Packet / Datagram(包)
头里最关键:
•SrcIP / DstIP
•TTL(跳数限制)
•Protocol(告诉对方这是 TCP=6 还是 UDP=17)
Oracle/VIP 语境里它负责什么:
•VIP 本质上就是一个 IP 地址资源,漂移=把这个 IP 从节点A的网卡摘下来,配到节点B的网卡
•漂移后会发生 ARP 更新(IP→MAC 映射变啦),让局域网交换机把去往该 IP 的帧送到新网卡
•路由表决定:"去 VIP 下一跳是谁、从哪个网卡出去"
一句话:网络层不管'端口/连接状态',只管'IP 到 IP 的路径'。
- 物理层(Physical Layer)------"比特怎么在线上跑"
干什么:把"0/1"变成电信号/光信号/无线电,送上介质
单位:比特 / 符号(电压、光脉冲、电磁波)
例子:
•双绞线电平、光纤光强、Wi‑Fi 调制
•网卡 PHY、交换机端口状态(up/down)、速率、双工
跟DB/RAC 最相关的事实:
•你看到 ip link show里 state DOWN,基本就是物理层/链路层断了(网线松、交换机 shutdown、端口 err-disable)
•物理层一断,上面三层在短时间内会表现为"hang",直到链路层/传输层判定不可达(RST/超时)才会上报应用层
用一张"发一条 SQL"的顺向/逆向把四层钉死(你前面那张数据流图的正身)
请求下去(Client → DB)
1.应用层:拼出 SQL/OCI消息
2.传给 传输层(TCP):套上 TCP 头(src-port→VIP:1521),变成 segment
3.传给 网络层(IP):套上 IP 头(ClientIP→VIP),变成 packet
4.往下到 链路/物理层:封装成帧/信号,从网卡发到交换机→服务器
回包/失败往上(DB → Client)
4→3→2→1 逐层剥头:帧→packet→segment→最后应用层拿到结果或错误