计算机网络八股

介绍一下TCP/IP模型和OSI模型的区别 OSI和TCP/IP都是计算机网络的分层模型; OSI 先有模型后有协议,是理论上的标准模型; TCP/IP 是先有协议后有模型,从实践中总结来的事实标准; OSI把网络从上到下分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层; 而TCP/IP分为: 应用层:TCP/IP认为应用层、表示层、会话层应由应用程序本身处理,合为一个应用层;提供与应用程序交互的接口,比如HTTP、FTP等; 传输层:提供进程间、端到端的通信;主要协议有TCP和UDP,其中TCP保证可靠性而UDP不保证可靠性; 网络层:提供跨网络的通信;主要协议是IP,提供数据包的路由和转发,也就是如何从一台电脑找到另一台电脑;IP协议使用IP地址来区分主机和网络,并进行寻址; 网络接口层:对应OSI模型的数据链路层和物理层;它负责物理传输媒介的传输;该层包含硬件地址,也就是MAC地址的管理; 从输入 URL 到页面展示到底发生了什么? 输入URL,解析并准备发送HTTP请求 浏览器进行缓存查询,如果没有则进入下一步网络请求 DNS域名解析:通过DNS解析获得想要访问的域名的IP地址,按照浏览器缓存 → 操作系统缓存 → 本地HOSTS文件 → 本地DNS服务器 → 迭代查询,直到找到域名的IP地址 通过TCP三次握手建立连接 Client发送HTTP请求:建立连接后浏览器会构建请求行、请求头等信息,发起HTTP请求数据; Server解析请求,返回响应数据 Client拿到数据,通过TCP四次挥手断开连接 浏览器解析数据并渲染页面: 如果响应头状态码是301、302,则会重定向 如果数据类型是字节流,则将请求提交给下载器 如果是HTML,则开始渲染,创建DOM树,解析CSS样式,将CSS与DOM合并,构建渲染树,最后布局和绘制渲染树得到页面 HTTP请求报文和响应报文是怎样的,有哪些常见的字段? HTTP请求报文由四部分组成:请求行、请求头、空行、请求体; 其中请求行由三个部分组成: 方法:如GET、POST、PUT、DELETE 资源路径:URI,资源唯一标识,绝大多数时候就是资源路径URL HTTP版本 请求头是键值对,常见字段有: Host:目标主机名 User-Agent:浏览器标识 Accept:可接受的响应类型 Accept-Language:可接受的语言 Cookie:携带的Cookie Connection:连接管理,如keep-alive 空行:用于分割head和body 请求体通常见于POST和PUT,包含发送给Server的数据; HTTP响应报文也是四部分组成:状态行、响应头、空行、响应体 其中状态行包括: HTTP版本 状态码:比如200、301、404 状态信息:OK 响应头常见字段有: Date:响应时间 Server:服务器标识 Content-Type:响应体的媒体类型及编码 Content-Length:响应体大小 Set-Cookie:向客户端写入Cookie Location:301、302重定向时跳转URL 响应体则是响应返回的数据,常见的有HTML、视频、图片等等; HTTP有哪些请求方式? 常见CRUD: GET:获取资源,幂等安全,可被缓存; POST:提交数据,非幂等,不可缓存; PUT:整体更新,替换资源,幂等; DELETE:删除指定资源,幂等; 其他: HEAD:只返回头部不返回资源,常用于检查资源是否存在; PATCH:部分更新; OPTIONS:查询某服务器支持的方法; GET请求和POST请求的区别 语义层面:GET用于获取资源,是读操作;POST用于提交数据,是写操作; 参数位置:GET的参数直接写在URL中,POST的参数放在请求体中; 安全性:GET是明文,可以直接看到;POST相对安全,但是如果不走HTTPS,抓包一样可以看到; 幂等性:GET是读操作不改变资源状态,天然幂等;POST提交数据会改变资源状态,不幂等; 缓存:GET会被浏览器缓存;POST则默认不缓存; 长度限制:GET有长度限制,最大一般几KB;POST理论上没有; 注意上述的一些区别主要来自于浏览器而不是HTTP协议本身,比如GET也可以写请求体,POST也可以用于获取数据,并不违反协议但是不够RESTful; ...

March 12, 2026 · KahanaT800