分享免费的编程资源和教程

网站首页 > 技术教程 正文

计算机网络核心知识

goqiw 2025-05-25 12:35:15 技术教程 2 ℃ 0 评论

一、Get 和 Post 的区别

  1. 安全性差异:Get 方法在传输过程中,数据会被放置在请求的 URL 中,因此存在信息泄露风险,属于不安全的传输方式;而 Post 方法传输的数据被封装在请求体中,所有操作对用户不可见,相对更为安全 。
  2. 数据量限制:受 URL 长度的约束,Get 传送的数据量通常较小;Post 方法一般没有明确的数据量限制,能够传输较大规模的数据。
  3. 字符集支持:Get 方法限制 Form 表单的数据集值必须为 ASCII 字符;Post 方法则支持整个 ISO10646 字符集,在字符处理上更为灵活。
  4. 执行效率与默认设置:Get 方法的执行效率相对较高,并且是 Form 提交的默认方法 。
  5. 数据包产生情况:通常 GET 会产生一个 TCP 数据包,但 POST 产生数据包的数量并非固定为两个,客户端可根据实际情况灵活决定。

二、Http 请求的完整过程

  1. 域名解析:浏览器首先根据域名解析对应的 IP 地址,在解析过程中会先查询本地的 DNS 缓存,若缓存中没有结果,再进行进一步的域名解析操作。
  2. 建立连接:浏览器与 WEB 服务器之间建立一个 TCP 连接,为后续的数据传输奠定基础。
  3. 发送请求:浏览器向 WEB 服务器发送 HTTP 请求(GET/POST),一个完整的 HTTP 请求报文由请求行、请求头部、空行和请求数据 4 个部分组成。
  4. 服务端响应:服务器收到请求后,返回 HTTP 响应报文,该报文由状态行、响应头部、空行和响应数据 4 个部分构成。
  5. 浏览器解析渲染:浏览器接收并解析响应数据,完成页面的渲染展示。

三、计算机网络的五层模型

  1. 应用层:为操作系统或网络应用程序提供访问网络服务的接口,通过应用进程间的交互实现特定的网络应用功能。该层定义了应用进程间通信和交互的规则,常见协议包括 HTTP、FTP、SMTP、RPC 等 。
  2. 传输层:负责在两个主机中的进程之间的通信,提供通用数据服务,典型协议有 TCP 和 UDP。
  3. 网络层:主要功能是对数据包进行路由选择和存储转发,常见协议包括 IP、ICMP(ping 命令基于此协议) 。
  4. 数据链路层:在两个相邻节点之间进行数据传送时,数据链路层将网络层传递下来的 IP 数据报组装成帧,并在相邻链路上实现帧的传送,每一帧包含数据和必要的控制信息。
  5. 物理层:物理层传输的数据单位是比特(bit),主要考虑如何用特定电压代表 1 或 0,以及接收方如何准确识别发送方所发送的比特信息。

四、TCP 和 UDP 的区别

  1. 连接特性:TCP 是面向连接的协议,在发送数据前需要先建立连接;UDP 则是无连接的,无需预先建立连接即可发送数据。
  2. 可靠性:TCP 提供可靠的服务,通过确认、窗口、重传、拥塞控制等机制,确保传送的数据无差错、不丢失、不重复且按序到达;UDP 仅尽最大努力交付,不保证数据的可靠传输。
  3. 数据传输形式:TCP 面向字节流,将数据视为一连串无结构的字节流;UDP 是面向报文的,并且没有拥塞控制机制,在网络出现拥塞时,源主机的发送速率不会降低,这对于 IP 电话、实时视频会议等实时应用非常有用。
  4. 通信模式:每一条 TCP 连接只能是点到点的;UDP 则支持一对一、一对多、多对一和多对多等多种交互通信模式。
  5. 首部开销:TCP 首部开销为 20 字节,相对较大;UDP 的首部开销较小,仅为 8 个字节。
  6. 信道特性:TCP 的逻辑通信信道是全双工的可靠信道;UDP 则是不可靠信道。

五、TCP 和 UDP 的优缺点

(一)TCP

  1. 优点:可靠性高且稳定性强。TCP 在数据传递前,通过三次握手建立连接;数据传递过程中,利用确认、窗口、重传、拥塞控制等机制保障数据准确传输;数据传输完成后,通过断开连接释放系统资源 。
  2. 缺点:传输速度慢、效率低,占用系统资源较高,并且容易遭受攻击。建立连接的三次握手过程会消耗时间,传输过程中的各种机制也会增加时间开销。同时,每台设备都需要维护所有传输连接,会占用大量的 CPU、内存等硬件资源。此外,其确认机制和握手机制容易被攻击者利用,引发 DOS、DDOS、CC 等攻击。

(二)UDP

  1. 优点:传输速度快,相对 TCP 安全性稍高。由于没有 TCP 的握手、确认、窗口、重传、拥塞控制等机制,UDP 是无状态的传输协议,数据传递效率高。缺少这些机制也使得 UDP 被攻击者利用的漏洞相对较少,但仍可能遭受如 UDP Flood 等攻击 。
  2. 缺点:数据传输不可靠、稳定性差。由于缺乏可靠机制保障,在网络质量不佳时,UDP 传输的数据容易出现丢包现象。

(三)应用场景

  1. 适用 TCP 的场景:当对网络通讯质量要求较高,需要确保数据准确无误地传递给对方时,适合使用 TCP 协议,例如 HTTP、HTTPS、FTP 等文件传输协议,POP、SMTP 等邮件传输协议。常见应用包括浏览器、FlashFXP、Outlook、Putty、QQ 文件传输等。
  2. 适用 UDP 的场景:当对网络通讯速度要求较高,而对通讯质量要求不高时,可选择 UDP 协议,如 QQ 语音、QQ 视频、TFTP 等应用。

六、TCP 三次握手

  1. 第一次握手:建立连接时,客户端向服务器发送 syn 包(syn=x),此时客户端进入 SYN_SENT 状态,等待服务器确认。其中,SYN 为同步序列编号(Synchronize Sequence Numbers)。
  2. 第二次握手:服务器收到客户端的 syn 包后,必须确认客户的 SYN(ack=x+1),同时服务器自身也发送一个 SYN 包(syn=y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态。
  3. 第三次握手:客户端收到服务器的 SYN+ACK 包后,向服务器发送确认包 ACK (ack=y+1),发送完成后,客户端和服务器进入 ESTABLISHED 状态,完成三次握手,TCP 连接成功建立。

(一)不能两次握手的原因

TCP 是双向通信协议,通信双方都具备发送信息和接收响应的能力。若仅进行两次握手,只有连接发起方的起始序列号能够得到确认,另一方选择的序列号则无法被确认,无法保证通信的可靠性和完整性。

七、TCP 四次挥手

  1. 第一次挥手:客户端进程发出连接释放报文,停止发送数据。释放数据报文首部设置 FIN=1,其序列号为 seq=u(u 等于前面已传送数据的最后一个字节的序号加 1),此时客户端进入 FIN-WAIT-1(终止等待 1)状态。根据 TCP 规定,即便 FIN 报文段不携带数据,也会消耗一个序号。
  2. 第二次挥手:服务器收到连接释放报文后,发出确认报文,设置 ACK=1,ack=u+1,并带上自身序列号 seq=v,此时服务端进入 CLOSE-WAIT(关闭等待)状态。服务器会通知高层应用进程,客户端到服务器方向的连接已释放,此时处于半关闭状态,即客户端不再发送数据,但服务器若有数据发送,客户端仍需接收,该状态会持续一段时间。
  3. 第三次挥手:客户端收到服务器的确认请求后,进入 FIN-WAIT-2(终止等待 2)状态,等待服务器发送连接释放报文(在此期间仍需接收服务器发送的剩余数据)。
  4. 第四次挥手:服务器发送完最后的数据后,向客户端发送连接释放报文,设置 FIN=1,ack=u+1,由于在半关闭状态下服务器可能又发送了一些数据,假定此时序列号为 seq=w,此时服务器进入 LAST-ACK(最后确认)状态,等待客户端的确认。
  5. 客户端确认:客户端收到服务器的连接释放报文后,必须发出确认,设置 ACK=1,ack=w+1,自身序列号为 seq=u+1,此时客户端进入 TIME-WAIT(时间等待)状态。需要注意的是,此时 TCP 连接尚未完全释放,必须经过 2*MSL(最长报文段寿命)的时间后,当客户端撤销相应的 TCB 后,才会进入 CLOSED 状态。
  6. 服务器关闭连接:服务器只要收到客户端发出的确认,会立即进入 CLOSED 状态,撤销 TCB 后,此次 TCP 连接正式结束。由此可见,服务器结束 TCP 连接的时间比客户端更早。

(一)连接三次握手与关闭四次挥手的原因

在连接建立时,当 Server 端收到 Client 端的 SYN 连接请求报文后,可直接发送 SYN+ACK 报文,其中 ACK 用于应答,SYN 用于同步,所以三次握手即可完成连接建立。而在关闭连接时,当 Server 端收到 FIN 报文时,可能并不会立即关闭 SOCKET,因此只能先回复一个 ACK 报文告知 Client 端已收到 FIN 报文,只有当 Server 端所有报文都发送完毕后,才能发送 FIN 报文,所以关闭连接需要通过四步握手来完成。

上述内容系统梳理了计算机网络常见知识点。若你觉得某些部分还需补充案例、调整表述,或有其他修改需求,欢迎随时告诉我。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表