Skip to content

OSI & TCP/IP模型设计 ​

OSI七层模型 ​

OSI七层模型(Open System Interconnection)开放式的系统互联

  1. 物理层(Physical Layer)

职责:负责比特流的传输,也就是数据在物理介质上的传输,如光纤、电缆等。
比喻:想象你在玩“传话游戏”,最底层就是传递信息的基础——纸条。这里的纸条就像是电线或光纤,负责将信息从一个地方传到另一个地方。
关键词:电缆、光纤、无线电波

  1. 数据链路层(Data Link Layer)

职责:负责在物理层的基础上建立可靠的数据传输机制,包括帧的同步、差错控制和流量控制。
比喻:继续我们的“传话游戏”,这一层相当于你把纸条放在一个信封里,确保信息能够准确无误地到达目的地。如果有人不小心弄丢了信封,你会再发一封。
关键词:MAC地址、帧、差错检测与纠正

  1. 网络层(Network Layer)

职责:负责将数据包从源端传输到目的端,包括路由选择和逻辑寻址。
比喻:这一层就像是邮政服务,你要寄一封信给远方的朋友。邮政局会根据信封上的地址选择最合适的路线,确保信件能够送到朋友手中。
关键词:IP地址、路由、逻辑地址

  1. 传输层(Transport Layer)

职责:负责端到端的数据传输,保证数据的完整性,并进行流量控制和拥塞控制。
比喻:想象你正在打包一份礼物,不仅要在外面贴上标签,还要确保礼物完好无损地送到收件人手上。这一层就像快递员,确保包裹安全送达。
关键词:TCP、UDP、端口号、流量控制

  1. 会话层(Session Layer)

职责:负责建立、管理和终止会话,包括会话管理、同步和恢复等功能。
比喻:这一层就像是电话总机,负责接听来电,帮你建立通话,并在通话结束后挂断电话。它管理着整个对话过程。
关键词:会话管理、同步点、恢复机制

  1. 表示层(Presentation Layer)

职责:负责数据的表示和转换,包括数据格式化、加密和解密等。
比喻:这一层就像是翻译官,负责将你说的语言翻译成对方能够理解的语言。此外,它还负责确保信息的安全性,就像给你的信件加密一样。
关键词:数据格式化、加密、解密

  1. 应用层(Application Layer)

职责:提供网络服务给最终用户,包括文件传输、邮件服务、目录服务等。
比喻:这一层就像是邮局的服务窗口,你在这里可以寄信、收信、查询邮件状态等。它是用户与网络服务之间的接口。
关键词:HTTP、FTP、SMTP

总结

OSI七层模型就像是一座高塔,每一层都有其独特的职责,从最底层的物理传输,一直到最顶层的应用服务。每一层的工作都为上一层提供了坚实的基础,从而保证了整个网络通信系统的高效运作。

TCP/IP协议 ​

OSI 模型就像是一个详细的建筑蓝图,定义了每一层的功能和职责,但没有具体的建筑材料和施工方法。而 TCP/IP 协议就像是一个实际的建筑项目,使用了具体的建筑材料(协议)和施工方法(实现),完成了实际的建筑(网络通信)。

OSI模型对比tcp/ip协议栈

OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。

层次结构

  1. 应用层:提供网络服务,如 HTTP、FTP、SMTP 等。

  2. 传输层:负责端到端的通信,如 TCP 和 UDP。

  3. 网络层:负责数据的路由和转发,如 IP。

  4. **网络接口层:**负责物理连接和数据传输,如以太网、ARP 等。

TCP&UDP ​

TCP、UDP区别 ​

  • TCP(Transmission Control Protocol),是一种面向连接的、可靠的传输层协议,把上面应用层交下来的数据看成无结构的字节流来发送,需要20个字节

  • UDP(User Datagram Protocol),用户数据包协议,是一个简单的面向数据报的通信协议,只是在其上面加上首部后就交给了下面的网络层,只占用8个字节(64bit)

TCPUDP
是否连接面向连接的,需要建立连接,然后再发送数据面向无连接的,不需要建立连接,直接发送数据包
是否可靠可靠传输,使用流量控制和拥塞控制不可靠传输,不使用流量控制和拥塞控制
连接对象个数一对一通信支持一对一,一对多,多对一和多对多交互通信
传输方式面向字节流面向报文
首部开销首部最小 20 字节,最大 60 字节首部开销小,仅 8 字节
适用场景适用于要求可靠传输的应用,例如文件传输适用于实时应用(IP 电话、视频会议、直播等)

TCP的三次握手、四次挥手 ​

  • 三次握手

若客户端和服务端一起发送消息?

  • 四次挥手

TCP是否每次连接都需要3次握手?

  • TCP快速打开(TCP Fast Open,TFO)
  • 第一次握手:
    1. SYN在fast open带上cookie
    2. 服务端产生cookie,在ACK返回改cookie给客户端
    3. 客户端存储cookie 以后:
    4. 客户端带有cookie
    5. 服务端验证该cookie,有效,在返回ACK的同时,将数据直接返回给应用层,无效,3次握手
    6. 少一次ACK的RTT(round-trip time,往返时延)

为什么最后要等2个MSL(Maximum Segment Lifetime,最长报文寿命)

  • 确保接收方收到ACK;
  • 确保没有新的报文到发送方

HTTP(超文本传输协议) ​

概述 ​

HTTP(HyperText Transfer Protocol)是一种应用层协议,用于在 Web 浏览器和 Web 服务器之间传输超文本(如 HTML 页面)。HTTP 基于 TCP 协议,确保数据的可靠传输。

特点 ​

  1. 无状态:HTTP 协议本身是无状态的,服务器不会保存客户端的状态信息, 我们可以通过Cookie来保存状态。

  2. client-server模型:客户端发送请求,服务器返回响应。

  3. 基于 TCP:HTTP 使用 TCP 协议来确保数据的可靠传输。

状态码 ​

  • 1XX: 100 continue 101 http ->websocket 请求服务器切换更高的协议
  • 2XX: 200 ok 204 只有响应头无body 206: partial content HTTP1.1 断点续传、分块下载
  • 3XX:301 永久重定向 302 暂时重定向 304 缓存
  • 4XX:400 bad request 通用 403 禁止访问 404 无资源 405 method not allowed
  • 5XX: 500 服务器错误 501 不支持客户端请求 502 bad gateway 代理服务器异常 503 太多,无法响应

常见的传输格式内容 ​

  1. 传输定长、不定长数据
  • 定长:Content-length,指定HTTP报文长度
  • 不定长:Transfer-Encoding: chunked:表示分块传输,自动忽略Content-Length,建立长链接
  1. 处理大文件
  • Accept-Range: none,允许服务器只发送 HTTP 消息的一部分到客户端,服务器端会返回状态码为 206 Partial Content 的响应:
js
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
...
(binary content)
  1. 常见表单
  • application/x-www-form-urlencoded:数据会URL编码
  • multipart/form-data:常用,不需要编码,每个表单元素独立

HTTP 攻击 ​

SQL

  • 通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中
  • 处理:对用户的输入进行转义

XSS:(Cross-site scripting)

  • 存储型 XSS
    • 注入型脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器上传回并执行。
  • 反射型 XSS
    • 当用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站。Web 服务器将注入脚本,比如一个错误信息,搜索结果等 返回到用户的浏览器上。由于浏览器认为这个响应来自"可信任"的服务器,所以会执行这段脚本。
  • 基于 DOM 的 XSS
    • 通过修改原始的客户端代码,受害者浏览器的 DOM 环境改变,导致有效载荷的执行。也就是说,页面本身并没有变化,但由于 DOM 环境被恶意修改,有客户端代码被包含进了页面,并且意外执行。
  • 处理:对用户的输入进行转义

**CSRF:(Cross-site request forgery)跨站请求伪造:**攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

  • 一个典型的CSRF攻击有着如下的流程:
    • 受害者登录a.com,并保留了登录凭证(Cookie)。
    • 攻击者引诱受害者访问了b.com。
    • b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
    • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
    • a.com以受害者的名义执行了act=xx。
    • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
  • 处理:cookie samesite

HTTP 版本 ​

HTTP/1.0 ​

特点

  • 短连接:每个请求都需要建立一个新的 TCP 连接,请求完成后立即关闭连接。
  • 无状态:服务器不会保存客户端的状态信息。
  • 简单头部:只包含基本的头部字段,如 Content-Type、Content-Length 等。

缺点

  • 性能差:每次请求都需要建立和关闭 TCP 连接,导致性能低下。
  • 无持久连接:无法复用 TCP 连接,增加了延迟和开销。

HTTP/1.1 ​

特点

  • 持久连接:允许在同一个 TCP 连接上发送多个请求和响应,减少了连接建立和关闭的开销。
  • 管道化请求:允许客户端在同一个连接上发送多个请求,服务器按顺序响应。
  • 更多的头部字段:引入了更多的头部字段,如 Host、Cache-Control、ETag 等。

缺点

  • 队头阻塞:虽然支持管道化请求,但仍然存在队头阻塞问题,即一个请求的延迟会影响后续请求。
  • 头部冗余:每个请求和响应都需要发送完整的头部,导致头部冗余和带宽浪费。

HTTP/2 ​

特点

  • 多路复用:允许在同一个 TCP 连接上同时发送多个请求和响应,解决了队头阻塞问题。
  • 头部压缩:使用 HPACK 算法压缩请求和响应头,减少了带宽消耗。
  • 服务器推送:服务器可以主动推送资源给客户端,减少了客户端的请求次数。
  • 二进制分帧:将请求和响应分成更小的二进制帧,提高了传输效率。

缺点

  • TCP 队头阻塞:虽然解决了 HTTP 层的队头阻塞问题,但仍然存在 TCP 层的队头阻塞问题。
  • 复杂性增加:引入了更多的特性和机制,增加了协议的复杂性。

HTTP/3 ​

特点

  • 基于 UDP:使用 UDP 协议,减少了连接建立的延迟。
  • 快速重连:在网络切换时,能够快速恢复连接。
  • 内置加密:QUIC 协议内置了加密机制,提供更安全的通信。
  • 多路复用:在 QUIC 层实现了多路复用,解决了 TCP 层的队头阻塞问题。

缺点

  • 兼容性:由于基于 UDP,可能存在一些网络环境不支持 UDP 的情况。
  • 部署难度:需要服务器和客户端的支持,部署难度较大。

总结 ​

HTTP/1.0:基本的请求-响应模型,短连接,无状态,性能差。 HTTP/1.1:引入持久连接和管道化请求,提升了性能,但存在队头阻塞和头部冗余问题。 HTTP/2:多路复用、头部压缩和服务器推送,解决了 HTTP 层的队头阻塞问题,但仍然存在 TCP 层的队头阻塞问题。 HTTP/3:基于 QUIC 协议,解决了 TCP 层的队头阻塞问题,提供更快的连接建立和更安全的通信,但兼容性和部署难度较大。

DNS ​

DNS:将主机名转为具体IP的服务根域:就是一个“.”号,由Internet名字注册授权机构管理。全世界共有13台根域服务器。 顶级域:由Internet名字授权机构管理。共有3种类型的顶级域: 组织域:采用3个字符的代号,如edu、com、gov等。 地理域:采用2个字符的国家/地区代号,如cn、jp、hk等。 反向域:这是一个特殊域,名称为in-addr.arpa,用于将IP映射到域名。 二级域:注册到个人、组织或公司的名称。二级域下还可以创建子域。 主机名:就是FQDN最左边的部分。使用“hostname”命令可以显示当前主机名。

操作过程:递归查询,优先查找是否有DNS缓存