Created with Sketch.

计算机网络 标签下的文章 共 1 篇

目录 概述 HTTP/HTTPS (应用层) DNS(应用层) TCP/UDP(传输层) NAT(网络层) ARP(网络层) ICMP(网络层) 其它 一、概述 OSI 和 TCP/IP 网络分层模型 各层传输的数据单位 | 单位 | 层级 | 描述 | |-----------------------------|----------------|------------------------------------------------| | 数据(Data) | 应用层 | 例如 HTTP 请求、FTP 数据等 | | 报文段(Segment) | 传输层 | TCP 使用报文段 | | 数据报(Datagram) | 传输层 | UDP 使用数据报 | | 数据包(Packet) | 网络层 | 包含 IP 地址,用于跨网络的节点通信 | | 帧(Frame) | 链路层 | 包含 MAC 地址,用于同一局域网内的节点通信 | | 比特(Bits) | 物理层 | 最基本的传输单位,通过物理介质传输 0/1 | 二、HTTP/HTTPS (应用层) HTTP vs HTTPS HTTP 运行在 TCP 之上,传输的内容都是明文,客户端和服务端间无法验证身份。 HTTPS 运行在 SSL/TLS 之上,SSL/TLS 运行在 TCP 之上,建立连接时,通过证书颁发机构(CA,Certificate Authority)颁发的证书进行非对称加密,此后传输的内容采用对称加密(非对称加密效率低且加密的数据长度受限),但对称加密的密钥用服务器方的证书进行了非对称加密,相比 HTTP 安全性更高,但会耗费更多服务器资源。 HTTPS 请求流程 设有客户端 C,服务器 S,第三方信赖机构 CA,攻击者 A: 如果攻击者 A 向 C 发送一个诈包,假装是 S 公钥,C 后续就会用 A 的公钥对数据进行加密,在公开信道传输,那么 A 将捕获这些加密包,用 A 的私钥解密,就截获了 C 本要给 S 发送的内容。 为解决这一问题,SSL/TLS 采用了数字签名:CA 采用散列技术对证书生成摘要,通过 CA 私钥对其加密,附在证书下方。 TLS Handshake:C 向 S 发送 ClientHello(包含支持的加密算法、协议版本等)。 S 返回证书:S 选择加密算法,并向 C 发送 CA 颁发的证书(包含 S 的公钥和域名、CA 信息、证书有效期、数字签名)。 C 验证证书:C 根据本地的 CA 信任列表验证 CA 是否可信,确认证书是否已过期,以及检查证书上的域名是否与访问的域名匹配;之后 C 获取 CA 公钥,将签名解密成摘要,并对证书进行相同散列处理得到摘要,两个摘要如果相同,则信任 S 的公钥。 C 发送预主密钥:C 生成一个随机的预主密钥,用 S 的公钥加密并发送给 S。 双方计算会话秘钥:S 用自己的私钥解密后,C 和 S 共同计算最终的对称会话密钥。 预主密钥(Pre-Master Secret)作用:前向安全性(即使 S 私钥泄露,过去的会话密钥仍然安全);master secret 长度非常大,会增加通信延迟。 HTTP/1.0 vs HTTP/1.1 连接方式:HTTP/1.0 为短连接,HTTP/1.1 支持长连接。 状态响应码:HTTP/1.1 中新加入了大量的状态码。 缓存机制:HTTP/1.0 中主要使用 Header 里的 If-Modified-Since 、Expires 作为缓存判断的标准,HTTP/1.1 引入了更多的缓存控制策略,如 Entity tag 、If-Unmodified-Since 、If-Match 等。 带宽:HTTP/1.1 在请求头引入了 range 头域,允许只请求资源的某个部分而非整个对象,返回码为 206(Partial Content),实现断点续传,避免了带宽浪费。 Host 头:HTTP/1.1 引入了 Host 头字段,允许在同一IP地址上托管多个域名,从而支持虚拟主机的功能。 HTTP/1.1 vs HTTP/2.0 多路复用:HTTP/1.1 为了弥补串行化(一个请求完成后才能处理下一个请求)的限制,通常会打开多个 TCP 连接;而 HTTP/2.0 在同一连接上可以并行传输多个请求和响应,减少了 TCP 连接数量和网络延迟。 二进制帧:HTTP/1.1 使用文本格式的报文进行数据传输;HTTP/2.0 使用更加紧凑的二进制帧,减少了数据传输量和带宽消耗。 头部压缩:HTTP/1.1 仅支持对 Body 压缩,HTTP/2.0 支持对 Header 压缩。 服务器推送:HTTP/2.0 支持服务器推送,在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少了客户端的请求次数。 RPC(Remote Procedure Call)基于 TC