当前位置: 首页 > news >正文

网络中常用协议

一, TCP协议

        TCP(Transmission Control Protocol,传输控制协议)是互联网核心协议之一,位于传输层,为应用层提供可靠的、面向连接的数据传输服务。

1. TCP的核心特点

特性说明
面向连接通信前需通过三次握手建立连接,结束后通过四次挥手释放连接。
可靠传输通过确认应答(ACK)、超时重传、序列号机制保证数据不丢失、不重复、按序到达。
流量控制通过滑动窗口机制动态调整发送速率,避免接收方缓冲区溢出。
拥塞控制根据网络状况(如丢包)动态调整发送窗口(慢启动、拥塞避免、快重传等算法)。
全双工通信同一连接中双方可同时发送和接收数据。
字节流服务数据被看作无结构的字节流,应用层需自行定义消息边界(如HTTP的\r\n)。

2. TCP报文结构

TCP头部通常为20字节(可选项扩展至60字节),关键字段如下:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         源端口(16位)        |       目的端口(16位)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       序列号(32位)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     确认号(32位)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 | 保留 | 控制标志(URG/ACK/PSH/RST/SYN/FIN)|  窗口大小  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        校验和(16位)        |        紧急指针(16位)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         可选项(可选)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 关键字段说明

    • 源/目的端口:标识应用层服务(如HTTP=80,SSH=22)。

    • 序列号(SEQ):数据字节流的编号,解决乱序问题。

    • 确认号(ACK):期望收到的下一个字节序号(表示之前数据已确认接收)。

    • 控制标志

      • SYN:发起连接。

      • ACK:确认应答。

      • FIN:关闭连接。

      • RST:强制重置连接。

    • 窗口大小:接收方可用的缓冲区空间(流量控制)。

3. TCP连接管理

(1) 三次握手(建立连接)

plaintext

客户端(Client)                            服务端(Server)
    |                                            |
    |------------------ SYN=1, SEQ=x ------------>|
    |                                            |
    |<--------- SYN=1, ACK=1, SEQ=y, ACK=x+1 ----|
    |                                            |
    |------------------ ACK=1, SEQ=x+1, ACK=y+1 ->|
    |                                            |
  • 步骤解析

    1. 第一次握手(SYN)

      • 客户端发送 SYN=1(请求建立连接)和随机初始序列号 seq=x

      • 作用:客户端告诉服务端“我想建立连接,我的初始序列号是 x”。

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

      • 服务端收到 SYN 后,回复 SYN=1(同意建立连接)和 ACK=1(确认收到客户端的 x),并发送自己的初始序列号 seq=y

      • 作用:服务端告诉客户端“我收到你的请求了,同意建立连接,我的初始序列号是 y”。

    3. 第三次握手(ACK)

      • 客户端收到 SYN+ACK 后,回复 ACK=1(确认收到服务端的 y),并发送 ack=y+1

      • 作用:客户端告诉服务端“我收到你的确认了,可以开始通信了”。

  • 为什么是三次?

  • 防止历史重复连接请求(旧SYN包)干扰
    如果只有两次握手,服务端收到 SYN 就直接建立连接,但网络可能有延迟的旧SYN包,导致服务端误认为客户端又发起了新连接,浪费资源。
    第三次握手让客户端确认服务端的响应,确保连接是当前有效的。

  • 同步双方的初始序列号(seq)
    双方需要交换初始 seq,用于后续数据排序和去重。三次握手确保双方都确认了对方的 seq

(2) 四次挥手(释放连接)

TCP 是全双工通信(双方可同时收发数据),关闭连接时需要分别关闭两个方向的数据流。

客户端(Client)                            服务端(Server)
    |                                            |
    |------------------ FIN=1, SEQ=u ------------>|
    |                                            |
    |<------------- ACK=1, ACK=u+1 --------------|
    |                                            |
    |<------------- FIN=1, SEQ=v, ACK=u+1 -------|
    |                                            |
    |------------------ ACK=1, ACK=v+1 ---------->|
    |                                            |

为什么是四次挥手?

  • 第一次挥手(FIN)

    • 客户端发送 FIN=1(请求关闭连接)和 seq=u(当前数据流的最后一个字节序号)。

    • 作用:客户端告诉服务端“我这边数据发完了,准备关闭”。

  • 第二次挥手(ACK)

    • 服务端收到 FIN 后,回复 ACK=1(确认收到 FIN),并发送 ack=u+1

    • 作用:服务端告诉客户端“我收到你的关闭请求了,但我可能还有数据要发”。

  • TCP是全双工的,需要分别关闭两个方向

    • 客户端可以主动关闭发送方向(第一次挥手),但服务端可能仍有数据要发送(第二次挥手只是确认)。

    • 服务端处理完数据后,再关闭自己的发送方向(第三次挥手)。

    • 客户端最后确认(第四次挥手)。

  • 如果合并第二次和第三次挥手?
    如果服务端没有剩余数据要发送,可以合并 ACK 和 FIN(变成三次挥手),但一般情况下,TCP 实现会分开处理,确保数据完整传输。

    • 第三次挥手(FIN)

      • 服务端处理完剩余数据后,发送 FIN=1(请求关闭连接)和 seq=v

      • 作用:服务端告诉客户端“我这边也发完了,可以关闭了”。

    • 第四次挥手(ACK)

      • 客户端收到 FIN 后,回复 ACK=1(确认收到 FIN),并发送 ack=v+1

      • 作用:客户端告诉服务端“我收到你的关闭请求了,可以彻底关闭了”。

二, TCP-IP协议通信模型

1. 概述

        TCP/IP (Transfer Control Protocol/Internet Protocol)协议,我们也叫做网络通讯协议。包含了一系列构成互联网基础的网络协议,是Internet 的核心协议。

1. TCP/IP四层模型

层级功能核心协议典型设备
应用层提供用户接口,处理应用程序逻辑(如HTTP网页、FTP文件传输)。HTTP、FTP、DNS、SMTP、SSH应用服务器、PC
传输层提供端到端的数据传输服务(可靠TCP或高效UDP)。TCP、UDP防火墙、负载均衡器
网络层负责寻址、路由选择,实现跨网络通信(如IP寻址、路由器跳转)。IP、ICMP、ARP、BGP路由器、三层交换机
网络接口层管理物理介质访问(如以太网、Wi-Fi),负责数据帧的封装和传输。Ethernet、Wi-Fi、PPP、HDLC交换机、网卡、光纤

  • TCP/IP模型将OSI的应用层、表示层、会话层合并为应用层

  • 网络接口层对应OSI的数据链路层+物理层

2. 各层核心功能与协议

(1) 应用层(Application Layer)

  • 功能:直接面向用户,提供网络服务(如浏览器访问网页、邮件发送)。

  • 关键协议

    • HTTP/HTTPS:网页传输(80/443端口)。

    • FTP:文件传输(21控制端口+20数据端口)。

    • DNS:域名解析(53端口)。

    • SMTP/POP3:邮件发送与接收(25/110端口)。

    • SSH:加密远程登录(22端口)。

(2) 传输层(Transport Layer)

  • 功能:确保数据可靠或高效地传输到目标应用(通过端口号区分服务)。

  • 关键协议

    • TCP(Transmission Control Protocol)

      • 面向连接,可靠传输(确认、重传、排序)。

      • 适用场景:网页(HTTP)、文件传输(FTP)、邮件(SMTP)。

    • UDP(User Datagram Protocol)

      • 无连接,高效但不可靠(无确认、可能丢包)。

      • 适用场景:视频流(RTP)、DNS查询、在线游戏。

(3) 网络层(Internet Layer)

  • 功能:通过IP地址实现跨网络通信,选择最优路径(路由)。

  • 关键协议

    • IP(Internet Protocol)

      • 无连接、不可靠,仅负责寻址和分组转发(IPv4/IPv6)。

    • ICMP(Internet Control Message Protocol)

      • 传递网络状态信息(如ping命令使用ICMP Echo Request/Reply)。

    • ARP(Address Resolution Protocol)

      • 将IP地址解析为MAC地址(如局域网内通信)。

    • BGP/OSPF

      • 路由协议,决定数据包如何跨网络传输。

(4) 网络接口层(Network Interface Layer)

  • 功能:管理物理网络介质(电缆、光纤、无线电波),封装数据帧。

  • 关键协议与技术

    • Ethernet(以太网)

      • 使用MAC地址标识设备(如00:1A:2B:3C:4D:5E)。

    • Wi-Fi(IEEE 802.11)

      • 无线局域网通信(2.4GHz/5GHz频段)。

    • PPP(Point-to-Point Protocol)

      • 拨号上网或点对点直连(如家庭宽带PPPoE)。

3. 数据封装与解封装流程

发送方(封装)

  1. 应用层:生成原始数据(如HTTP请求)。

  2. 传输层:添加TCP/UDP头部(包含源/目的端口号)。

  3. 网络层:添加IP头部(源/目的IP地址)。

  4. 网络接口层:添加帧头(MAC地址)和帧尾(FCS校验),转换为比特流通过物理介质传输。

接收方(解封装)

  1. 网络接口层:校验帧完整性,剥离MAC头部。

  2. 网络层:检查IP地址,决定是否接收或转发。

  3. 传输层:根据端口号交给对应应用程序(如80→HTTP服务)。

  4. 应用层:处理数据(如渲染网页)。

三, UDP协议

        UDP(User Datagram Protocol) : 用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可用于进行高效率的传输。

1. UDP的核心特点

特性说明
无连接通信前无需握手,直接发送数据,节省延迟。
不可靠传输不保证数据到达、不排序、不重传,可能丢包或重复。
头部开销小固定8字节头部(TCP至少20字节),传输效率高。
支持广播/多播可向多个目标发送数据(如视频流、在线会议)。
无拥塞控制发送速率由应用层控制,适合实时应用(如游戏、直播)。

2. UDP报文结构

UDP头部仅8字节,结构如下:

 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|   源端口(16位)  | 目的端口(16位)  |
+--------+--------+--------+--------+
|   数据报长度(16位) |   校验和(16位)  |
+--------+--------+--------+--------+
|             数据(可变长度)        |
+-----------------------------------+
  • 关键字段

    • 源端口/目的端口:标识发送方和接收方的应用(如DNS=53,QUIC=443)。

    • 数据报长度:包括头部和数据的总长度(最大65535字节)。

    • 校验和(可选):检测数据是否损坏(IPv6强制要求)。

:UDP的“不可靠”指协议本身不提供重传和排序,但应用层可自行实现可靠性(如QUIC协议)。

3. UDP工作流程

(1) 发送数据

  1. 应用层将数据交给UDP。

  2. UDP添加头部(源/目的端口、长度、校验和)。

  3. 直接发送给网络层(IP),不建立连接,无需等待确认。

(2) 接收数据

  1. 网络层(IP)将数据包传递给UDP。

  2. UDP检查目的端口,将数据交给对应应用。

  3. 无确认机制:接收方不发送ACK,发送方不知数据是否到达。

4. UDP的典型应用场景

(1) 实时多媒体传输

  • 视频/音频流:如Zoom、WebRTC(容忍少量丢包,延迟敏感)。

  • 在线游戏:如MOBA、FPS(低延迟优先于数据完整)。

(2) 简单查询/响应协议

  • DNS查询:域名解析(请求-响应模式,一次交互完成)。

  • DHCP:动态分配IP地址(基于UDP广播)。

(3) 广播/多播通信

  • 网络时间协议(NTP):同步时钟。

  • IoT设备发现:如SSDP(Simple Service Discovery Protocol)。

(4) 自定义可靠协议

  • QUIC(HTTP/3底层协议):在UDP上实现可靠传输,减少TCP握手延迟。

  • TFTP(简单文件传输):基于UDP的轻量级文件传输。

5. UDP的优缺点

优点

  • 低延迟:无需握手和确认,适合实时应用。

  • 低开销:头部小,适合高频小数据包(如传感器数据)。

  • 灵活性:应用层可自定义可靠性或拥塞控制(如QUIC)。

缺点

  • 不可靠:需应用层处理丢包、乱序(如视频会议用前向纠错FEC)。

  • 无流量控制:可能淹没接收方(需应用层限速)。

  • 易受攻击:UDP洪水攻击(DDoS常见手段)

四,TCP协议和UDP协议的区别

        TCP(传输控制协议)和UDP(用户数据报协议)是传输层的两大核心协议,它们在设计目标、特性和适用场景上存在显著差异。以下是两者的详细对比:

1. 核心特性对比

对比项TCPUDP
连接方式面向连接(需三次握手建立连接)无连接(直接发送数据)
可靠性可靠传输(确认、重传、排序)不可靠(可能丢包、乱序、重复)
数据顺序保证数据按序到达不保证顺序
流量控制通过滑动窗口动态调整发送速率无流量控制
拥塞控制拥塞避免、慢启动、快重传等算法无拥塞控制,发送速率由应用层决定
头部开销至少20字节(含选项可达60字节)固定8字节
传输效率低(延迟高、协议开销大)高(延迟低、开销小)
通信模式仅支持单播(一对一)支持单播、广播、多播(一对多)
适用场景网页(HTTP)、文件传输(FTP)、邮件(SMTP)视频流、在线游戏、DNS、IoT传感器数据

2. 关键机制差异

(1) 连接管理

  • TCP

    • 通信前需通过三次握手建立连接(SYN、SYN-ACK、ACK)。

    • 通信结束需通过四次挥手释放连接(FIN、ACK、FIN、ACK)。

    • 确保双方收发能力正常,避免资源浪费。

  • UDP

    • 直接发送数据,无需握手或连接维护。

    • 适合高频、短时交互(如DNS查询)。

(2) 可靠性保障

  • TCP

    • 确认应答(ACK):接收方每收到数据包会发送确认。

    • 超时重传:未收到ACK时重发数据。

    • 序列号(SEQ):标识数据顺序,解决乱序问题。

  • UDP

    • 无ACK、无重传、无序列号,完全依赖应用层处理可靠性。

(3) 流量与拥塞控制

  • TCP

    • 滑动窗口:根据接收方缓冲区大小动态调整发送窗口。

    • 拥塞控制:通过慢启动、拥塞避免等算法避免网络过载。

  • UDP

    • 无内置控制机制,可能因发送过快导致网络拥塞或接收方丢包。


3. 典型应用场景

TCP适用场景

  • 需要可靠传输

    • 网页浏览(HTTP/HTTPS)。

    • 文件传输(FTP、SFTP)。

    • 电子邮件(SMTP、IMAP)。

    • 数据库访问(MySQL、PostgreSQL)。

  • 长连接交互

    • SSH远程登录。

    • 金融交易(如银行系统)。

UDP适用场景

  • 实时性优先

    • 视频会议(Zoom、WebRTC)。

    • 在线游戏(王者荣耀、绝地求生)。

    • 语音通话(VoIP)。

  • 简单查询/响应

    • DNS域名解析。

    • DHCP动态IP分配。

4. 如何选择TCP或UDP?

  • 选择TCP

    • 数据必须完整到达(如文件下载)。

    • 需要自动处理乱序和重传(如网页加载)。

    • 通信双方需长期稳定连接(如数据库查询)。

  • 选择UDP

    • 低延迟比可靠性更重要(如实时游戏)。

    • 数据量小且交互简单(如DNS查询)。

    • 应用层已实现可靠性(如QUIC协议)。

相关文章:

  • 【机器学习】基础知识
  • Ubuntu Linux安装PyQt5并配置Qt Designer
  • 面试记录3
  • IoT平台实时监测机器人状态的实现方案
  • Ubuntu24.04 离线安装 MySQL8.0.41
  • 零基础如何学习自动化测试
  • RAGFlow部署时遇到的mysql unhealthy问题解决方案汇总
  • 108.在 Vue 3 中使用 OpenLayers 加载 XYZ 地图的示例
  • [微信小程序]对接sse接口
  • 安装 pgsql 将gis数据入库
  • SpringMVC 入门教程
  • Elasticsearch:人工智能时代的公共部门数据治理
  • vue 图片放大到全局
  • 【Linux加餐-connect的短线重连】
  • antd 的 usePropsValue 的使用场景和源码解析
  • Unity3D 性能剖析工具(Profiler Tools)的使用
  • vLLM命令行使用方法详解
  • 时序数据库 InfluxDB(一)
  • 批量将多个 OFD 文档转换为 PDF 格式
  • Java全栈面试宝典:内存模型与Spring设计模式深度解析
  • 一般做网站的在哪里找/网络seo推广培训
  • 我的世界充值网站怎么做/重大军事新闻最新消息
  • 网页设计购物网站/免费的seo教程
  • 网站建设要求 牛商网/线下推广方案
  • wordpress入侵过程/seo作弊
  • wordpress图片加水印/厦门seo排名公司