计网
本文最后更新于13 天前,其中的信息可能已经过时,如有错误请发送邮件到3368129372@qq.com

osi七层

  1. 应用层
    • 作用:主要提供各种服务和应用程序,如电子邮件、文件传输、远程登录、Web 浏览等。应用层服务可以使用不同的协议实现。
    • 协议:http、SMTP、FTP、TELNET
    • 举例:用户在QQ界面输入文字
  2. 表示层
    • 作用:负责数据格式转换、加密解密、压缩解压等服务。表示层使得应⽤程序可以使⽤不同的数据格式和编码,同时还提供了数据的安全性和完整性保护等服务
    • 举例:QQ 为了安全,给⽂字加密。
  3. 会话层
    • 作用:要负责建⽴、管理和终⽌会话,提供会话控制和同步等服务。会话层还负责处理多个应⽤程序之间的数据交换。
    • 举例:会话层是找到对⽅的实体,也就是对方的 QQ 进程。
  4. 传输层
    • 作用:负责数据传输的可靠性和流量控制等,同时还包括分段、组装、连接建⽴和断开等功能。
    • 协议:TCP 和 UDP
    • 举例:传输层要找到对⽅的端⼝,就是 QQ 传输信息⽤的是哪个端⼝。
  5. 网络层
    • 作用:负责数据在⽹络中的传输,包括路由选择、分组转发、数据报⽂的封装等。⽹络层还处理数据包的寻址和控制流量等。
    • 协议
    • 举例:⽹络层负责通过路由器要找到对⽅的⽹络地址。
  6. 链路层
    • 作用:负责把数据分成数据帧进⾏传输,并对错误进⾏检测和纠正。数据链路层还负责物理地址的分配、数据流量控制、错误校验等
    • 协议
    • 举例:通过物理地址找到对⽅主机。
  7. 物理层
    • 作用:主要负责通过物理媒介传输⽐特流,如电缆、光纤、⽆线电波等。物理层规定了物理连接的规范,包括电缆的类型、接⼝的规范等。
    • 协议
    • 举例:负责⼆进制⽐特流的传输。

三握四挥

    1. 客户端(SYN_SENT)-syn->服务端
    2. 客户端(SYN_SENT)<-syn-ack-服务端(SYN-RECEIVED)
    3. 客户端(ESTABLISHED)-ack->服务端(ESTABLISHED)
    1. 客户端(FIN-WAIT-1)-Fin->服务端(CLOSED-WAIT)
    2. 客户端(FIN-WAIT-2)<-ack-服务端(LAST-ACK)
    3. 客户端(FIN-WAIT-2)<-Fin-服务端(LAST-ACK)
    4. 客户端(TIME-WAIT)-ack->服务端(CLOSED)

SSL/TSL

可以看csdn

长连接

除了WebSocket之外,还有一些其他的长连接方式,这些方式通常用于实现实时、双向通信。以下是一些常见的长连接方式:

  • HTTP 长轮询(Long Polling): 长轮询是通过客户端发起一个持久的 HTTP 请求,服务器在有新数据时才会响应。这种方式模拟了长连接的效果,但相比WebSocket,长轮询的实现机制更为复杂,因为它需要在每个轮询周期内重新发起新的HTTP请求。

  • Server-Sent Events(SSE): SSE 是一种基于纯文本的单向通信协议,通过服务器向客户端发送事件流,实现了服务器到客户端的单向实时通信。SSE适用于一些场景,例如实时通知、即时分发消息等,但相对WebSocket而言,功能相对受限。

  • Comet: Comet 是一种将长轮询和HTTP流等技术结合起来的通用术语,用于描述一系列基于HTTP的长连接技术。Comet的实现方式包括长轮询、HTTP流、XHR流等,用于实现服务器到客户端的实时通信。

  • MQTT(Message Queuing Telemetry Transport): MQTT 是一种轻量级的、基于发布/订阅的消息传输协议,通常用于物联网设备之间的通信。MQTT支持长连接,并允许设备通过订阅主题接收实时消息。

  • XMPP(Extensible Messaging and Presence Protocol): XMPP 是一种开放的、XML协议,用于即时消息传递和在线状态感知。XMPP支持长连接,被广泛应用于即时通讯系统,例如Jabber等。

  • 每种长连接方式都有其适用的场景和特点。WebSocket通常是最为通用和灵活的选择,而其他方式则可能根据具体需求和环境进行选择。

请求头

TCP(传输控制协议)头部包含了许多重要的信息,用于确保可靠的数据传输和连接管理。TCP头部的标准格式如下,包含多个字段:

  1. 源端口(Source Port):16 位

    • 发送方的端口号,用于标识发送数据的应用程序。
  2. 目标端口(Destination Port):16 位

    • 接收方的端口号,用于标识接收数据的应用程序。
  3. 序列号(Sequence Number):32 位

    • 数据段的序列号,表示该段在整个数据流中的位置。用于数据包重组和丢包重传。
  4. 确认号(Acknowledgment Number):32 位

    • 用于确认接收到的数据段。表示接收方期望收到的下一个字节的序号。
  5. 数据偏移(Data Offset):4 位

    • 指示TCP头部的长度,以32位(4字节)为单位。这个字段用于定位数据的起始位置。
  6. 保留字段(Reserved):3 位

    • 必须设置为0,供将来使用。
  7. 控制位(Flags):9 位

    • URG(紧急指针有效,Urgent Pointer field significant)
    • ACK(确认序号有效,Acknowledgment field significant)
    • PSH(推送功能,Push Function)
    • RST(复位连接,Reset the connection)
    • SYN(同步序号,用于建立连接,Synchronize sequence numbers)
    • FIN(终止连接,No more data from sender)
    • ECE(ECN-Echo,Explicit Congestion Notification echo)
    • CWR(Congestion Window Reduced)
    • NS(Nonce Sum)
  8. 窗口大小(Window Size):16 位

    • 表示发送方的接收窗口大小,用于流量控制。告知对方在未收到确认的情况下最多可以发送多少字节的数据。
  9. 校验和(Checksum):16 位

    • 用于校验TCP头部和数据,确保数据的完整性。发送方计算并填入,接收方验证。
  10. 紧急指针(Urgent Pointer):16 位

    • 指示紧急数据的结束位置,仅当URG标志位被设置时有效。
  11. 选项(Options):可变长度

    • 用于支持各种扩展功能,例如最大报文段大小(MSS)、时间戳、窗口扩大等。选项字段的长度可变,具体取决于所使用的选项。
  12. 填充(Padding):可变长度

    • 用于确保TCP头部长度是32位(4字节)的整数倍。填充字段的内容通常是0。

TCP头部结构示意图

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |          Source Port          |       Destination Port        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                        Sequence Number                        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Acknowledgment Number                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Data  |Rese-|     Flags      |            Window             |
 | Offset | rved|                 |            Size              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |           Checksum            |        Urgent Pointer         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Options (if any)                           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Padding (if any)                           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

小结

TCP头部包含了源端口、目标端口、序列号、确认号、数据偏移、保留字段、控制位、窗口大小、校验和、紧急指针、选项和填充等字段。这些字段共同作用,确保TCP连接的可靠性、顺序性和流量控制等功能。

不同http版本区别

HTTP/2和HTTP/1.1相比,引入了许多改进和新特性,以提高性能、效率和可靠性。HTTP/3在HTTP/2的基础上进一步改进,主要是通过使用不同的传输协议来解决一些HTTP/2中的瓶颈。以下是这些版本之间的主要区别和新增内容:

HTTP/2 相比 HTTP/1.1 的改进和新特性

  1. 二进制分帧层

    • HTTP/2使用二进制格式传输数据,而HTTP/1.1使用纯文本格式。这种二进制格式更高效,易于解析。
  2. 多路复用

    • 在HTTP/2中,单个TCP连接上可以并发多个流,每个流可以独立发送请求和接收响应。这样可以避免HTTP/1.1中的队头阻塞问题。
  3. 头部压缩

    • HTTP/2使用HPACK算法对HTTP头部进行压缩,减少了头部的大小,降低了带宽消耗。
  4. 服务器推送

    • 服务器可以在客户端请求之前主动推送资源,从而减少延迟。例如,服务器可以在发送HTML页面时,提前推送相关的CSS和JavaScript文件。
  5. 流优先级

    • 客户端可以为不同的流分配优先级,服务器可以根据这些优先级来优化资源分配。
  6. 更高的安全性

    • 虽然HTTP/2并不强制要求使用TLS,但大多数实现都默认使用TLS(HTTPS),提高了传输的安全性。

HTTP/3 相比 HTTP/2 的改进和新特性

  1. 基于QUIC协议

    • HTTP/3使用基于UDP的QUIC协议,而HTTP/2使用TCP。QUIC的设计目标是减少连接建立时间和提高传输可靠性。
  2. 更快的连接建立

    • QUIC结合了TLS握手和连接建立过程,使得连接建立时间大大缩短。通常情况下,QUIC可以在一个RTT(往返时间)内建立连接,而TCP通常需要两个RTT。
  3. 内置的拥塞控制和丢包恢复

    • QUIC内置了先进的拥塞控制和丢包恢复机制,能够更有效地处理网络波动,减少重传延迟。
  4. 无队头阻塞

    • QUIC通过将每个HTTP请求/响应对映射到独立的QUIC流,解决了TCP中的队头阻塞问题。即使一个流发生丢包,其他流也不会受到影响。
  5. 更好的移动性支持

    • QUIC支持连接迁移,当客户端的IP地址或网络发生变化时(例如从Wi-Fi切换到移动数据),连接可以继续保持,而无需重新建立。

总结

  • HTTP/2 vs HTTP/1.1

    • 引入二进制分帧、多路复用、头部压缩、服务器推送和流优先级等特性,显著提高了性能和效率。
  • HTTP/3 vs HTTP/2

    • 使用基于UDP的QUIC协议,提供更快的连接建立、更高效的拥塞控制和丢包恢复、无队头阻塞和更好的移动性支持。

这些改进使得HTTP/2和HTTP/3在现代网络环境中能够提供更快、更可靠的性能,适应更加复杂的应用需求。

感谢您的收看~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇