网络-八股
文章目录
介绍一下TCP/IP模型和OSI模型的区别
背景
是在物联网起初, 不同厂商有自己不同的标准, 他们无法互通.
随着互联网的发展, 我们需要一个统一的, 标准化的模型, 让两个计算机能通信
是什么
TCP/IP模型是当今世界上最主流的网络模型(OSI模型是只存在于教科书上的模型, 并没有被实际采用)
TCP/IP模型从用户到硬件可以分为以下五层
应用层
传输层
网络层
数据链路层
物理层
物理层是规定硬件(比如网线)要怎么设计, 要遵守什么规范
传输层, 网络层, 数据链路层共同完成数据的转发过程
传输层只关注路径的起始和终点, 数据是从源主机的哪个进程(程序)发出的,要送到目标主机的哪个进程, 常见的协议是TCP/UDP
网络层负责路径规划的地址管理, 从源IP主机到目标源IP主机, 主要的协议是IP
数据链路层将上面规划好的路径进行具体的实施, MAC地址完成相邻设备之间的实际传输
这三层是硬件设备/操作系统设定好的, 是程序员无法干预的
应用层是程序员可以干预的
就是拿到数据怎么用, 定义数据格式/交互规则, 主要的协议有HTTP协议
每一层都只与相邻层交互,发送方从上往下封装,接收方从下往上解封装
OSI模型和TCP/IP模型基本一样, 就是把表示层, 会话层, 应用层合并为一个应用层
为什么
最后是为什么。 之所以采用分层设计,核心原因有两点:
第一,分治思想降低复杂度。网络通信涉及的问题太多,分层后每层只关注自己的职责,应用层管数据格式,传输层, 网络层, 数据链路层复杂完成数据的转发,物理层负责物理传输。各层解耦,方便维护
第二,标准化带来互操作性。分层定义了清晰的接口规范,只要遵循协议,不同厂商的设备就能互联互通,这为互联网的规模化发展奠定了基础。
从输入 URL 到页面展示到底发生了什么?
- URL解析和处理: 确定了 Web 服务器和文件名, 如果浏览器内有缓存, 则直接返回
- DNS查询: 将域名转化为IP地址
- 建立网络连接 TCP 三次握手, 如果是HTTPS, 还要TLS握手
- 发送HTTP请求与接收响应 构建HTTP报文, 向服务器发起请求并接受响应
- 浏览器渲染 解析响应并渲染页面
其中应该还涉及到
IP 路由、MAC 寻址、交换机的步骤
这些由操作系统和网络设备自动完成,程序员基本没办法干预, 所以我没有深入理解
所以在这个问题上,我回答的步骤是我更关注和理解并的那部分
DNS查询过程
DNS用来把域名转化为IP地址
整个过程可以概括为三级缓存查询+三级迭代查询
三级缓存: 浏览器缓存-系统缓存-本地DNS服务器缓存
三级迭代: 根服务器-顶级域名服务器-权威域名服务器
如果缓存中没有查到, 就会从本地DNS服务器逐级向上找
假设用户第一次访问www.baidu.com
- 浏览器检查自身缓存, 没有记录
- 操作系统查询hosts文件和系统DNS缓存, 也没有
- 查询本地DNS服务器缓存, 也没有记录
本地DNS服务器开始迭代查询
- .根域名服务器-返回.com顶级域名服务器
- .com顶级域名服务器-返回baidu.com的权威域名服务器地址
- baidu.com的权威服务器-返回www.baidu.com的IP地址, 比如…
最后, 这个IP沿原路返回, 本地三层都会缓存这个结果, 浏览器拿到IP后就可以建立TCP连接了
CDN是什么,有什么作用?
CDN是一种分布式网络服务, 它的核心是"将内容缓存到离用户更近的地方", 通过"就近访问"来加速内容传输
- 就近访问: CDN在全球范围内部署了多个服务器节点, 用户的请求会被路由到最近的 CDN 节点, 提供快速的内容访问
- 内容缓存:
- CDN会缓存静态资源, 如图片, 样式表, 脚本等. 当用户请求访问这些资源时, CDN会首先检查是否已经缓存了这些资源.
- 如果有缓存, CDN节点会直接返回缓存的资源,
- 如果没有缓存所需资源, 它会从源服务器回源请求, 并将资源缓存到节点中, 以便后续请求
- 通过缓存内容, 减少对原始服务器的请求, 减轻了源站的负载
- 即使某些节点出现问题, 会自动调度到健康节点
Cookie和Session是什么?有什么区别?
┌─────────────────────────────────────────────────────────────────┐
│ Cookie和Session关联流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ 1.登录请求 ┌─────────────┐ │
│ │ ├───────────────────────>│ │ │
│ │ 浏览器 │ │ 服务器 │ │
│ │ │<───────────────────────┤ │ │
│ └──────┬──────┘ 2.创建Session └──────┬──────┘ │
│ │ │ │
│ │ 3.服务器返回: │ │
│ │ - Session ID: "abc123" │ │
│ │ + 自动设置Cookie: │ │
│ │ Set-Cookie: JSESSIONID=abc123 │ │
│ │ │ │
│ │ 4.浏览器保存Cookie │ │
│ │ ┌───────────────────────┐ │ │
│ │ │ 浏览器Cookie存储: │ │ │
│ │ │ JSESSIONID = abc123 │ │ │
│ │ │ user = admin │ │ │
│ │ └───────────────────────┘ │ │
│ │ │ │
│ │ 5.后续请求自动携带Cookie │ │
│ │ GET /api/session/data │ │
│ │ Cookie: JSESSIONID=abc123 │ │
│ │ │ │
│ │ 6.服务器查找Session │ │
│ │ ┌───────────────────────┐ │ │
│ │ │ 服务器Session存储: │ │ │
│ │ │ "abc123" → { │ │ │
│ │ │ username: "admin", │ │ │
│ │ │ loginTime: 123456, │ │ │
│ │ │ ... │ │ │
│ │ │ } │ │ │
│ │ └───────────────────────┘ │ │
│ │ │ │
│ │ 7.返回Session数据 │ │
│ │ │ │
└──────────┴──────────────────────────────────────┴────────────────┘
cookie和session本质上都是键值对, Cookie 在客户端存 Session ID,Session 在服务端存用户数据,通过 ID 关联
举个例子
浏览器发起登陆请求
服务器创建session
{
username: "admin",
loginTime: 123456,
...
}
服务器返回
session id: “abc123”
自动设置cookie
浏览器cookie存储
session id=abc123
后续请求自动携带cookie
服务器查找session
abc123->…
返回session数据
Cookie和Session的区别?
- 存储位置:
Cookie数据存储在用户的浏览器中,而Session数据存储在服务器上。 - 数据容量:
Cookie存储容量较小,一般为几 KB。Session存储容量较大,通常没有固定限制,取决于服务器的配置和资源。 - 安全性:由于
Cookie存储在用户浏览器中,因此可以被用户读取和篡改。相比之下,Session 数据存储在服务器上,更难被用户访问和修改。 - 生命周期:
Cookie可以设置过期时间,Session依赖于会话的持续时间或用户活动。 - 传输方式:
Cookie在每次HTTP请求中都会被自动发送到服务器,而Session只传Session ID
单机上,TCP和UDP服务为什么可以占用同一个端口?
端口只在同一传输层协议内唯一,TCP 和 UDP 是两套完全独立的协议栈,端口空间相互隔离。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)