网络协议HTTP、TCP/UDP

 概述

如何让数据具有自我描述性?

使数据携带自身的信息

为什么网络有层级的划分?

目的是通过通过模块化和分工协作,解决复杂的系统设计、管理和操作问题

交换机、路由器要不要阅读一个信息的头部?要不要阅读数据部分? 

要阅读头部,要知道数据从哪来,到哪去,但不用阅读数据部分

网卡:网卡可以完成帧的封装和解封装,工作在数据链路层。
中继器:中继器以比特方式将网络信号进行再生和重定时,使其能够传输更长的距离。
放大器
集线器:
集线器实际上就是一个多端口的中继器。
网桥/桥接器:连接两个局域网的一种存储转发设备,可以将一个大的LAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN。
交换机:交换机有一张交换表,可以记录MAC帧和对应端口。(相当于网桥+集线器) 路由器:路由选择、存储转发、连接外部网络

万维网

万维网(World Wide Web,简称 WWW)的诞生和发展依赖于以下三个核心要素,它们共同构成了现代互联网信息交互的基础:

1. URL(统一资源定位符)

作用:为网络中的资源(如网页、图片、API)提供唯一标识和访问地址

https://www.example.com:443/path/to/resource?query=value#fragment
 ↑      ↑              ↑   ↑               ↑          ↑
协议    主机名         端口  路径            查询参数    片段 

以下是URL各组成部分的表格化总结:

组成部分作用示例注意事项
协议(Scheme)指定访问资源使用的应用层协议https://ftp://后跟://,现代浏览器默认隐藏http://https://
主机名(Host)标识资源所在的服务器地址(域名或IP)www.example.com192.168.1.1可包含子域(如blog.example.com
端口(Port)指定服务器服务的网络端口:443(HTTPS)、:8080(自定义端口)默认端口可省略(HTTP=80,HTTPS=443)
路径(Path)标识服务器上资源的具体位置(类似文件路径)/articles/2023//index.html区分大小写(取决于服务器配置)
查询参数(Query)向服务器传递额外参数(以?开头,&分隔)?id=123&lang=zh常用于搜索(?q=keyword)、分页(?page=2
片段(Fragment)指向资源内的锚点(以#开头),仅客户端使用#section-2/#/home(SPA路由)不发送到服务器,用于页面内跳转或前端路由

2. HTTP(超文本传输协议)

HTTP 的中文全称是 超文本传输协议(HyperText Transfer Protocol)。

 超文本(HyperText)含义:超越普通文本的交互式文本,支持嵌入链接、图片、视频等多媒体资源。

  • GET:通过 URL 的查询字符串(?key=value)传递数据,可见且长度受限(约 2048 字符)。

  • POST:通过请求体(body)传输数据,不可见且支持大量数据(如文件上传)。

 发送

发送的HTTP请求一般称之为HTTP请求报文,分为请求行请求头/消息头空行请求体/请求正文四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开. 

 请求行(Request Line):第一行 

请求头(Request Headers):从第二行开始到空行前的所有内容均为请求头,用于传递附加信息

 响应

  

服务器发送的HTTP响应一般称之为HTTP响应报文,分为响应行响应头/消息头空行响应体四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.

状态码范围类别说明常见例子
1XX信息性状态码请求已被接收,继续处理101 Switching Protocols(协议切换)
2XX成功状态码请求已成功处理200 OK(成功)
3XX重定向状态码需进一步操作以完成请求301 Moved Permanently(永久重定向)
4XX客户端错误请求包含语法错误或无法完成404 Not Found(资源不存在)
5XX服务器错误服务器处理请求失败500 Internal Server Error(服务器内部错误)

 3. HTML(超文本标记语言)

  • 作用:定义网页的结构和内容,并支持超链接(Hyperlink)实现资源互联。

  • 关键点

    • 超文本特性:通过 <a> 标签链接其他资源,形成网状信息结构。

    • 跨平台兼容:纯文本格式,可在不同设备和浏览器中渲染。

    • 多媒体整合:支持嵌入图片、脚本(JavaScript)、样式(CSS)等。

  • 意义:解决了“如何呈现和关联资源”的问题,是万维网的“内容载体”。

三者的协作关系

1.浏览器输入URL → 2. DNS解析获取IP → 3. 建立TCP连接 → 4. 发送HTTP请求报文 → 5. 服务器返回响应 HTML

  DNS解析(Domain Name System Resolution)是将人类易读的域名(如 www.example.com)转换为机器可识别的IP地址(如 192.0.2.1)的过程。

不同的域名可以用同一个服务器?

 答案是肯定的! 多个域名可以指向同一台服务器,通过监视程序统一管理。

HTTPS

safe:安全的

HTTPHTTPS
安全性不安全安全(加密+身份验证)
默认端口80443
加密

SSL/TLS

对称加密(如 AES)传输数据 

非对称加密(如 RSA)交换密钥

速度更快稍慢(可忽略)

 HTTPS 通过 数字证书 验证服务器身份

对称加密(如 AES)与非对称加密(如 RSA)在 HTTPS 中的协作流程 

  1. 客户端 → 服务器:Hello,支持 HTTPS 吗?

  2. 服务器 → 客户端:这是我的证书(含公钥)

  3. 客户端 验证证书有效性(如是否过期、是否受信任)。

  4. 客户端 生成随机 AES 密钥,用服务器公钥加密后发送。

  5. 服务器 用私钥解密,获取 AES 密钥。

  6. 双方 使用 AES 密钥加密所有后续通信。

特性对称加密(AES)非对称加密(RSA)
速度快(适合大数据量)慢(仅用于小数据)
密钥管理同一密钥加密/解密公钥加密,私钥解密
用途加密实际数据安全交换对称密钥
算法举例AES, ChaCha20RSA, ECC(椭圆曲线)

 TCP

长连接 和 短连接的区别

类型定义典型应用场景
短连接每次通信后立即断开连接,下次通信需重新建立TCP连接。HTTP/1.0、简单的请求-响应模型(如早期Web)
长连接建立连接后保持连接不关闭,允许多次数据传输(通过心跳保活)。HTTP/1.1、数据库连接、实时通信(如WebSocket)

TCP头部结构 

(共20字节基础长度 + 可选选项)

字段名位数作用说明示例/备注
源端口(Source Port)16 bit发送方的端口号。如 80(HTTP服务端口)
目的端口(Destination Port)16 bit接收方的端口号。如 54321(客户端临时端口)
序列号(Sequence Number)32 bit当前数据段的第一个字节的序列号,用于数据排序和重组。初始值随机生成(ISN),后续累加数据长度。
确认号(Acknowledgment Number)32 bit期望收到的下一个字节的序列号(仅当ACK=1时有效)。如收到seq=1000,则回复ack=1001
数据偏移(Data Offset)4 bitTCP头部的长度(以4字节为单位),用于定位数据开始位置。最小值为5(20字节头部)。
保留(Reserved)6 bit保留字段,必须置0。未来扩展使用。
控制标志(Flags)6 bit控制连接状态的关键标志位:
URG Urgent1 bit紧急指针有效(高优先级数据)。如Telnet中断命令。
ACK Acknowledgment1 bit确认号有效(建立连接后通常为1)。三次握手中第二次开始ACK=1。
PSH Push1 bit接收方应立即将数据推送给应用层(避免缓冲区延迟)。如实时聊天消息。
RST1 bit重置连接(异常终止)。收到无效报文时强制断开。
SYN  :Synchronize1 bit同步序列号(用于建立连接)。三次握手中前两次SYN=1。
FIN1 bit终止连接(正常关闭)。四次挥手中FIN=1。
窗口大小(Window Size)16 bit接收方的可用缓冲区大小(流量控制),表示当前能接收的字节数。动态调整(滑动窗口机制)。
校验和(Checksum)16 bit校验头部和数据部分的完整性(包括伪头部)。防止传输错误。
紧急指针(Urgent Pointer)16 bit当URG=1时有效,指向紧急数据的末尾偏移量。需配合URG标志使用。
选项(Options)可变可选字段(长度由数据偏移决定),用于扩展功能:
MSS(Maximum Segment Size)可变协商最大报文段大小(通常1460字节,以太网MTU=1500)。三次握手时协商。
SACK(Selective ACK)可变选择性确认,支持部分重传。提高重传效率。
时间戳(Timestamp)可变计算RTT(往返时间)和防止序列号回绕。高带宽网络必备。
填充(Padding)可变确保TCP头部长度是4字节的整数倍。选项字段不足时补0。

 三次握手

  1. 第一次握手(SYN)

    • 客户端发送SYN,携带自己的初始序列号ISN(Sequence Number:857960100)。

    • 目的:告知服务端“我想建立连接,我的序列号是X=857960100”。

  2. 第二次握手(SYN-ACK)

    • 服务端返回SYN-ACK,携带自己的初始序列号ISN(Sequence Number:304853757),并确认客户端的ISN ( ACK=X+1),也就是ACK=857960100+1。

    • 目的:回应客户端“我收到你的SYN了,我的序列号是Y=304853757,下次请发X+1”。

  3. 第三次握手(ACK)

    • 客户端发送ACK,确认服务端的ISN(ACK=Y+1)也就是304853757+1。

    • 目的:告知服务端“我收到你的SYN-ACK了,下次请发Y+1”。

关键点:第三次握手是客户端对服务端序列号的显式确认,确保双方序列号同步,且服务端知道客户端是活跃的。

TCP三次握手流程详解

步骤发送方报文内容目的
第一次握手客户端SYN=1, seq=X告知服务端:“我想建立连接,我的初始序列号是X”。
第二次握手服务端SYN=1, ACK=1, seq=Y, ack=X+1回应客户端:“我收到你的SYN了,我的序列号是Y,下次请从X+1开始发数据”。
第三次握手客户端ACK=1, seq=X+1, ack=Y+1确认服务端:“我收到你的SYN-ACK了,下次请从Y+1开始发数据”

为什么TCP需要三次握手?两次握手为什么不行?

两次握手:类似“你约朋友吃饭,朋友说‘好’,但你不确认他是否听到你的约定”。

风险:朋友可能没听清,但你默认他已同意。

三次握手:你约朋友 → 朋友说“好” → 你回复“收到”。

双方明确约定已达成。

TCP两次握手的问题 vs 三次握手的解决方案

问题分类两次握手的缺陷三次握手的解决方案
历史连接干扰服务端收到旧SYN会直接建立连接,客户端因序列号不匹配拒绝,导致服务端资源浪费。客户端通过第三次ACK确认有效性,服务端仅对有效ACK分配资源。
初始序列号(ISN)同步服务端无法确认客户端是否收到自己的SYN-ACK(ISN可能丢失),后续数据传输不可靠。客户端的第三次ACK显式确认服务端的ISN(ACK=Y+1),确保双方序列号同步。
重复SYN导致的资源浪费服务端无法区分重复SYN(如网络重传),会为每个SYN创建连接,耗尽资源。服务端仅在收到客户端的ACK后分配资源,避免无效连接。

四次挥手 

 发送方设置 PSH=1,要求接收方的 TCP 协议栈立即将当前数据段(Segment)提交给应用层(如 HTTP、FTP 等),而不是暂存在缓冲区等待更多数据。

为什么 TCP 断开连接需要四次挥手,而不是三次? 

TCP 连接是全双工的TCP 连接允许数据双向独立传输(客户端→服务端,服务端→客户端)。因此,关闭连接需要双向独立关闭

  • 客户端主动发起终止(发送 FIN)。

  • 服务端也需要独立发起终止(发送另一个 FIN)。

类比:就像两个人打电话,必须双方都明确说“再见”才能挂断。

如果合并为三次
服务端将 ACK 和 FIN 合并发送(即第二次挥手直接发 FIN + ACK),但前提是服务端没有剩余数据要发送。这种情况在 HTTP 短连接中常见(表现为“三次挥手”),但不是 TCP 的标准行为

下面就是合并为三次的情况

 

完整过程

TIME_WAIT=2MSL: 什么是MSL?为什么客户端最后还要等待2MSL? 

什么是MSL?
MSL是指TCP传输中,TCP报文段在网络中存在的最大生存时间。(MSL的主要目的是定义一个时间限制,以确保TCP报文段在网络中不会无限期地存在。是TCP允许不同的实现可以设置不同的MSL值)
为什么客户端最后还要等待2MSL?
确保对方收到最终ACK:TIME_WAIT状态确保连接的另一方(服务器)有足够的时间接收到最后一个ACK。因为如果服务器没有收到这个ACK,并且第三次挥手超时, 服务端可能认为它发送的第三次挥手失败(迷失在网络中), 服务器它会重新发送FIN报文段(第三次挥手)。客户端在TIME_WAIT状态可以处理这种情况,确保连接的可靠终止。
端口和资源的正确释放:这个等待期还允许操作系统正确地清理和释放用于连接的资源,如端口号。在2MSL结束后,相同的端口号可以安全地被新的连接使用,不会受到旧连接残留数据的影响。

 TCP协议如何保证数据的可靠传输?

机制解决的问题实现方式
三次握手可靠连接建立SYN、ACK同步序列号
序列号与确认号数据顺序、丢包检测每个字节标记序列号,ACK确认接收范围
超时重传丢包恢复RTO超时未收到ACK则重传
滑动窗口流量控制动态调整发送窗口大小(RWND)
拥塞控制网络拥塞避免慢启动、拥塞避免、快重传、快恢复

 下面表格通过举例说明了超时重传、滑动窗口动态调整大小和快重传机制

步骤发送方(Client)接收方(Server)机制触发
1发送seq=1~1000未收到(丢包)超时重传(RTO触发)
2超时后重传seq=1~1000收到并回复ACK=1001, RWND=4096滑动窗口更新
3发送seq=1001~5000收到但缓冲区满,回复ACK=5001, RWND=2048流量控制(窗口调小)
4发送seq=5001~7048(2KB)收到seq=5001~7048,回复ACK=7049正常传输
5发送seq=8001~9000(丢包)收到seq=9001~10000,回复3次ACK=8001快重传 + 快恢复

发送方可能一次发送很多TCP报文, 目的方着急回复确认吗?  不着急,偶尔回复 

为什么发送数据时要携带源端口? 接收端需要知道从哪个端口回复

超时重传和快重传有什么区别?见上

UDP

UDP是一种保留消息边界的简单的面向数据报的传输层协议。

  1. 无连接:UDP是一种无连接协议。这意味着在数据包发送之前,发送方和接收方之间不需要建立连接。每个数据包之间独立发送,彼此之间没有依赖关系。
  2. 低开销:UDP协议头部较小,只有8字节,相比之下,TCP协议头部最少20字节。UDP的简单性使得它在传输数据时增加的开销更少。
  3. 不可靠传输:UDP不提供数据到达的保证。因为它不进行错误检查或者纠正,意味着网络上的数据包可能会丢失、重复或乱序到达,且发送方不会得到通知。
  4. 无拥塞控制:UDP不实现拥塞控制机制。它以相同的速度发送数据,不论网络条件如何。这可能导致在网络质量较差时数据包被丢弃。
  5. 快速传输:由于缺乏连接建立、确认响应、流量控制等机制,UDP可以更快速地传输数据(能不能到目的地是另外一件事)。

由于其特性,UDP通常用于那些对实时性要求高但对可靠性要求不高的应用,例如视频流、VoIP(语音通信)、在线游戏、早期的聊天软件等。

  

 补充:TCP协议核心术语对照表

英文缩写英文全称中文解释
TCPTransmission Control Protocol传输控制协议,提供可靠的、面向连接的字节流服务。
IPInternet Protocol网际协议,负责数据包的路由和寻址。
MTUMaximum Transmission Unit最大传输单元,单次数据传输的最大长度(如以太网MTU=1500字节)。
MSSMaximum Segment Size最大报文段长度,TCP数据段的最大负载(MSS = MTU - IP头 - TCP头)。
SYNSynchronize Sequence Numbers同步序列号,用于建立连接(三次握手的第一步)。
ACKAcknowledgment确认号,表示已成功接收数据(ACK=1时有效)。
FINFinish终止连接标志,用于正常关闭连接(四次挥手)。
RSTReset重置连接标志,强制终止异常连接。
URGUrgent紧急指针标志,表示数据需优先处理(如中断命令)。
PSHPush推送标志,要求接收方立即将数据提交给应用层。
ISNInitial Sequence Number初始序列号,TCP连接开始时随机生成的序列号。
RTTRound-Trip Time往返时间,数据从发送到确认接收的时间。
RTORetransmission Timeout重传超时时间,超时未收到ACK则触发重传。
RWNDReceive Window接收窗口,接收方当前可用的缓冲区大小(流量控制)。
CWNDCongestion Window拥塞窗口,发送方根据网络拥塞程度动态调整的发送窗口。
SACKSelective Acknowledgment选择性确认,允许接收方告知发送方哪些数据已收到(优化重传)。
MSSMaximum Segment Size最大报文段长度,TCP单次传输的数据段最大值。
NATNetwork Address Translation网络地址转换,将私有IP映射为公有IP(解决IPv4地址不足)。
LANLocal Area Network局域网,小范围内的私有网络(如家庭、办公室)。
WANWide Area Network广域网,跨越长距离的网络(如互联网)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值