网站首页 > 技术教程 正文
一、Get 和 Post 的区别
- 安全性差异:Get 方法在传输过程中,数据会被放置在请求的 URL 中,因此存在信息泄露风险,属于不安全的传输方式;而 Post 方法传输的数据被封装在请求体中,所有操作对用户不可见,相对更为安全 。
- 数据量限制:受 URL 长度的约束,Get 传送的数据量通常较小;Post 方法一般没有明确的数据量限制,能够传输较大规模的数据。
- 字符集支持:Get 方法限制 Form 表单的数据集值必须为 ASCII 字符;Post 方法则支持整个 ISO10646 字符集,在字符处理上更为灵活。
- 执行效率与默认设置:Get 方法的执行效率相对较高,并且是 Form 提交的默认方法 。
- 数据包产生情况:通常 GET 会产生一个 TCP 数据包,但 POST 产生数据包的数量并非固定为两个,客户端可根据实际情况灵活决定。
二、Http 请求的完整过程
- 域名解析:浏览器首先根据域名解析对应的 IP 地址,在解析过程中会先查询本地的 DNS 缓存,若缓存中没有结果,再进行进一步的域名解析操作。
- 建立连接:浏览器与 WEB 服务器之间建立一个 TCP 连接,为后续的数据传输奠定基础。
- 发送请求:浏览器向 WEB 服务器发送 HTTP 请求(GET/POST),一个完整的 HTTP 请求报文由请求行、请求头部、空行和请求数据 4 个部分组成。
- 服务端响应:服务器收到请求后,返回 HTTP 响应报文,该报文由状态行、响应头部、空行和响应数据 4 个部分构成。
- 浏览器解析渲染:浏览器接收并解析响应数据,完成页面的渲染展示。
三、计算机网络的五层模型
- 应用层:为操作系统或网络应用程序提供访问网络服务的接口,通过应用进程间的交互实现特定的网络应用功能。该层定义了应用进程间通信和交互的规则,常见协议包括 HTTP、FTP、SMTP、RPC 等 。
- 传输层:负责在两个主机中的进程之间的通信,提供通用数据服务,典型协议有 TCP 和 UDP。
- 网络层:主要功能是对数据包进行路由选择和存储转发,常见协议包括 IP、ICMP(ping 命令基于此协议) 。
- 数据链路层:在两个相邻节点之间进行数据传送时,数据链路层将网络层传递下来的 IP 数据报组装成帧,并在相邻链路上实现帧的传送,每一帧包含数据和必要的控制信息。
- 物理层:物理层传输的数据单位是比特(bit),主要考虑如何用特定电压代表 1 或 0,以及接收方如何准确识别发送方所发送的比特信息。
四、TCP 和 UDP 的区别
- 连接特性:TCP 是面向连接的协议,在发送数据前需要先建立连接;UDP 则是无连接的,无需预先建立连接即可发送数据。
- 可靠性:TCP 提供可靠的服务,通过确认、窗口、重传、拥塞控制等机制,确保传送的数据无差错、不丢失、不重复且按序到达;UDP 仅尽最大努力交付,不保证数据的可靠传输。
- 数据传输形式:TCP 面向字节流,将数据视为一连串无结构的字节流;UDP 是面向报文的,并且没有拥塞控制机制,在网络出现拥塞时,源主机的发送速率不会降低,这对于 IP 电话、实时视频会议等实时应用非常有用。
- 通信模式:每一条 TCP 连接只能是点到点的;UDP 则支持一对一、一对多、多对一和多对多等多种交互通信模式。
- 首部开销:TCP 首部开销为 20 字节,相对较大;UDP 的首部开销较小,仅为 8 个字节。
- 信道特性:TCP 的逻辑通信信道是全双工的可靠信道;UDP 则是不可靠信道。
五、TCP 和 UDP 的优缺点
(一)TCP
- 优点:可靠性高且稳定性强。TCP 在数据传递前,通过三次握手建立连接;数据传递过程中,利用确认、窗口、重传、拥塞控制等机制保障数据准确传输;数据传输完成后,通过断开连接释放系统资源 。
- 缺点:传输速度慢、效率低,占用系统资源较高,并且容易遭受攻击。建立连接的三次握手过程会消耗时间,传输过程中的各种机制也会增加时间开销。同时,每台设备都需要维护所有传输连接,会占用大量的 CPU、内存等硬件资源。此外,其确认机制和握手机制容易被攻击者利用,引发 DOS、DDOS、CC 等攻击。
(二)UDP
- 优点:传输速度快,相对 TCP 安全性稍高。由于没有 TCP 的握手、确认、窗口、重传、拥塞控制等机制,UDP 是无状态的传输协议,数据传递效率高。缺少这些机制也使得 UDP 被攻击者利用的漏洞相对较少,但仍可能遭受如 UDP Flood 等攻击 。
- 缺点:数据传输不可靠、稳定性差。由于缺乏可靠机制保障,在网络质量不佳时,UDP 传输的数据容易出现丢包现象。
(三)应用场景
- 适用 TCP 的场景:当对网络通讯质量要求较高,需要确保数据准确无误地传递给对方时,适合使用 TCP 协议,例如 HTTP、HTTPS、FTP 等文件传输协议,POP、SMTP 等邮件传输协议。常见应用包括浏览器、FlashFXP、Outlook、Putty、QQ 文件传输等。
- 适用 UDP 的场景:当对网络通讯速度要求较高,而对通讯质量要求不高时,可选择 UDP 协议,如 QQ 语音、QQ 视频、TFTP 等应用。
六、TCP 三次握手
- 第一次握手:建立连接时,客户端向服务器发送 syn 包(syn=x),此时客户端进入 SYN_SENT 状态,等待服务器确认。其中,SYN 为同步序列编号(Synchronize Sequence Numbers)。
- 第二次握手:服务器收到客户端的 syn 包后,必须确认客户的 SYN(ack=x+1),同时服务器自身也发送一个 SYN 包(syn=y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态。
- 第三次握手:客户端收到服务器的 SYN+ACK 包后,向服务器发送确认包 ACK (ack=y+1),发送完成后,客户端和服务器进入 ESTABLISHED 状态,完成三次握手,TCP 连接成功建立。
(一)不能两次握手的原因
TCP 是双向通信协议,通信双方都具备发送信息和接收响应的能力。若仅进行两次握手,只有连接发起方的起始序列号能够得到确认,另一方选择的序列号则无法被确认,无法保证通信的可靠性和完整性。
七、TCP 四次挥手
- 第一次挥手:客户端进程发出连接释放报文,停止发送数据。释放数据报文首部设置 FIN=1,其序列号为 seq=u(u 等于前面已传送数据的最后一个字节的序号加 1),此时客户端进入 FIN-WAIT-1(终止等待 1)状态。根据 TCP 规定,即便 FIN 报文段不携带数据,也会消耗一个序号。
- 第二次挥手:服务器收到连接释放报文后,发出确认报文,设置 ACK=1,ack=u+1,并带上自身序列号 seq=v,此时服务端进入 CLOSE-WAIT(关闭等待)状态。服务器会通知高层应用进程,客户端到服务器方向的连接已释放,此时处于半关闭状态,即客户端不再发送数据,但服务器若有数据发送,客户端仍需接收,该状态会持续一段时间。
- 第三次挥手:客户端收到服务器的确认请求后,进入 FIN-WAIT-2(终止等待 2)状态,等待服务器发送连接释放报文(在此期间仍需接收服务器发送的剩余数据)。
- 第四次挥手:服务器发送完最后的数据后,向客户端发送连接释放报文,设置 FIN=1,ack=u+1,由于在半关闭状态下服务器可能又发送了一些数据,假定此时序列号为 seq=w,此时服务器进入 LAST-ACK(最后确认)状态,等待客户端的确认。
- 客户端确认:客户端收到服务器的连接释放报文后,必须发出确认,设置 ACK=1,ack=w+1,自身序列号为 seq=u+1,此时客户端进入 TIME-WAIT(时间等待)状态。需要注意的是,此时 TCP 连接尚未完全释放,必须经过 2*MSL(最长报文段寿命)的时间后,当客户端撤销相应的 TCB 后,才会进入 CLOSED 状态。
- 服务器关闭连接:服务器只要收到客户端发出的确认,会立即进入 CLOSED 状态,撤销 TCB 后,此次 TCP 连接正式结束。由此可见,服务器结束 TCP 连接的时间比客户端更早。
(一)连接三次握手与关闭四次挥手的原因
在连接建立时,当 Server 端收到 Client 端的 SYN 连接请求报文后,可直接发送 SYN+ACK 报文,其中 ACK 用于应答,SYN 用于同步,所以三次握手即可完成连接建立。而在关闭连接时,当 Server 端收到 FIN 报文时,可能并不会立即关闭 SOCKET,因此只能先回复一个 ACK 报文告知 Client 端已收到 FIN 报文,只有当 Server 端所有报文都发送完毕后,才能发送 FIN 报文,所以关闭连接需要通过四步握手来完成。
上述内容系统梳理了计算机网络常见知识点。若你觉得某些部分还需补充案例、调整表述,或有其他修改需求,欢迎随时告诉我。
猜你喜欢
- 2025-05-25 计算机网络基础:网络标准相关知识介绍
- 2025-05-25 “HTTP请求的整个过程”与它引出了整个计算机网络知识图谱(一)
- 2025-05-25 计算机大佬3小时让你学会"计算机基础及网络基础"计算机笔记知识
- 2025-05-25 不要总是活在自己的情绪里
- 2025-05-25 电脑基础知识篇:电脑硬件选购与组装(第005课)
- 2025-05-25 最常见的电脑故障及其解决办法,不求人自己就能修复
- 2025-05-25 电脑的基本操作知识
- 2025-05-25 计算机系统知识
- 2025-05-25 XMind-计算机网络知识
- 2025-05-25 国家网络安全宣传周 | 这些计算机病毒小知识你都知道吗?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)