计算机网络--传输层(1)

第五章 传输层


一、传输层基本功能

  1. 进程到进程的逻辑通信

    • 套接字(Socket)IP地址:端口号
      • IP地址:标识主机(网络层功能)
      • 端口号:16位整数(0-65535),标识进程
        • 熟知端口(0-1023):如 HTTP(80)、FTP(21)
        • 注册端口(1024-49151):由 IANA 分配(如 MySQL 3306)
        • 动态端口(49152-65535):临时分配
  2. 数据单元

    • 传输层:报文段(TCP)/ 用户数据报(UDP)
    • 对比其他层
      • 物理层:比特流
      • 链路层:帧
      • 网络层:IP 数据报

二、TCP与UDP协议对比

特性TCPUDP
连接管理三次握手、四次挥手无连接
可靠性保证交付(ACK确认、重传机制)不保证交付
有序性按序交付(序列号、确认号)可能乱序
流量控制滑动窗口机制无流量控制
拥塞控制慢启动、拥塞避免等算法无拥塞控制
首部长度20字节(最小)+ 选项8字节
传输效率较低(首部开销大,确认机制)较高(首部开销小,无确认)

三、TCP协议深度解析

  1. 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 |           |U|A|P|R|S|F|                               |
    | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
    |       |           |G|K|H|T|N|N|                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           Checksum            |         Urgent Pointer        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Options                    |    Padding    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                             Data                              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
    • 控制位详解
      • URG:紧急指针有效(用于紧急数据)
      • ACK:确认号有效(仅当 ACK=1 时,确认号字段有效)
      • PSH:接收方应尽快将数据交付给应用层
      • RST:重置连接(用于异常终止)
      • SYN:同步序号(连接建立时使用)
      • FIN:结束传输(连接释放时使用)
  2. 可靠性机制

    • 超时重传:若发送方未在超时时间内收到 ACK,重传数据
    • 流量控制:通过滑动窗口(Window 字段)告知对方接收能力
    • 拥塞控制
      • 慢启动:初始窗口小,指数增长
      • 拥塞避免:窗口线性增长,避免网络拥塞
      • 快速重传:连续收到 3 个重复 ACK 时,立即重传
  3. 三次握手

    客户端                 服务器|                   || SYN (seq=x)       ||------------------>||                   | SYN-ACK (seq=y, ack=x+1)|<------------------|| ACK (seq=x+1, ack=y+1) ||------------------>|
    
    • 状态转换
      • 客户端:CLOSEDSYN_SENTESTABLISHED
      • 服务器:CLOSEDLISTENSYN_RCVDESTABLISHED
  4. 四次挥手

    客户端                 服务器|                   || FIN (seq=u)       ||------------------>||                   | ACK (ack=u+1)|<------------------||                   | FIN (seq=v, ack=u+1)|<------------------|| ACK (ack=v+1)     ||------------------>|
    
    • 状态转换
      • 客户端:ESTABLISHEDFIN_WAIT_1FIN_WAIT_2TIME_WAITCLOSED
      • 服务器:ESTABLISHEDCLOSE_WAITLAST_ACKCLOSED
    • TIME_WAIT 状态:等待 2MSL(最大段寿命),确保所有报文段消失

四、UDP协议深度解析

  1. UDP报文结构

    0      7 8     15 16    23 24    31
    +--------+--------+--------+--------+
    | Source | Dest   | Length | Checksum |
    | Port   | Port   |        |          |
    +--------+--------+--------+--------+
    |                 data...
    
    • 校验和:可选字段,覆盖首部和伪首部(包含源/目的 IP 地址)
  2. 校验和计算

    • 发送方:将数据补全为偶数个字节,计算二进制反码和,存入校验和字段
    • 接收方:重新计算校验和,若与字段值不同则丢弃

五、常见协议与端口号
协议端口号说明
HTTP80超文本传输协议(明文)
HTTPS443安全 HTTP(TLS/SSL 加密)
FTP21(控制)文件传输协议(数据端口 20)
SSH22安全外壳协议(加密远程登录)
DNS53域名解析服务
DHCP67/68动态主机配置协议(服务器/客户端)
SMTP25简单邮件传输协议(发送邮件)
POP3110邮局协议版本 3(接收邮件)

六、重点题型解析

  1. TCP与UDP对比题

    • 答案:均为传输层协议,提供进程间通信,但 TCP 可靠、面向连接,UDP 不可靠、无连接
  2. 三次握手作用

    • 答案:同步双方初始序号(防止历史连接干扰),分配资源(缓存、变量)
  3. TCP滑动窗口机制

    • 答案:发送方根据接收方窗口大小调整发送速率,避免接收方缓冲区溢出
  4. UDP适用场景

    • 答案:视频通话(实时性优先)、DNS 查询(小数据量)、直播(允许丢包)

七、扩展知识

TCP状态转换图详解

TCP协议通过状态机管理连接的建立、维护和释放。状态转换图描述了TCP连接在不同阶段的状态变迁,涵盖了客户端服务器端的主动/被动操作。以下是核心内容:


一、状态分类与含义
状态描述
CLOSED初始状态,表示连接未建立或已完全关闭。
LISTEN服务器端监听端口,等待客户端连接请求(仅服务器端可见)。
SYN_SENT客户端发送SYN后等待确认(主动打开连接)。
SYN_RCVD服务器端收到SYN后发送SYN+ACK,等待客户端ACK(被动打开连接)。
ESTABLISHED连接已建立,数据可双向传输。
FIN_WAIT_1主动关闭方发送FIN后等待ACK(首次关闭请求)。
FIN_WAIT_2收到对端ACK后,等待对端FIN(仅主动关闭方可见)。
TIME_WAIT主动关闭方发送最终ACK后等待2MSL(防止旧报文干扰新连接)。
CLOSE_WAIT被动关闭方收到FIN后发送ACK,等待本地应用关闭连接。
LAST_ACK被动关闭方发送FIN后等待ACK(最终关闭请求)。
CLOSING双方同时发送FIN(罕见状态,需额外处理)。

二、状态转换路径

1. 常规连接建立(三次握手)

  • 客户端
    CLOSED → SYN_SENT → ESTABLISHED
  • 服务器端
    CLOSED → LISTEN → SYN_RCVD → ESTABLISHED

2. 常规连接关闭(四次挥手)

  • 主动关闭方(如客户端)
    ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
  • 被动关闭方(如服务器端)
    ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

3. 同时打开连接(双方主动发起)

  • 客户端A:CLOSED → SYN_SENT → SYN_RCVD → ESTABLISHED
  • 客户端B:CLOSED → SYN_SENT → SYN_RCVD → ESTABLISHED
  • 触发条件:双方同时发送SYN,交换ACK后直接进入ESTABLISHED

4. 同时关闭连接(双方主动关闭)

  • 双方均发送FIN后进入CLOSING状态,最终通过交换ACK进入TIME_WAITCLOSED

三、关键状态解析
  1. TIME_WAIT(2MSL等待)

    • 作用
      • 确保最后一个ACK被对端接收(若丢失,对端重传FIN,可再次发送ACK)。
      • 防止旧连接的延迟报文干扰新连接(通过2MSL超时清除残留报文)。
    • MSL值:通常为30秒(Linux)或2分钟(RFC建议),总等待时间为2×MSL
  2. CLOSE_WAIT(被动关闭等待)

    • 常见问题:若服务器端长期处于此状态,可能因未调用close()导致连接泄漏(需检查代码逻辑)。
  3. SYN_RCVD(半连接状态)

    • 风险:服务器端收到SYN但未完成握手时,可能遭受SYN洪水攻击(需通过SYN Cookie等机制防御)。

四、状态转换触发条件
操作/事件状态变化
客户端调用connect()CLOSED → SYN_SENT
服务器调用listen()CLOSED → LISTEN
收到SYN并回复SYN+ACKLISTEN → SYN_RCVD(服务器端)
收到ACK完成三次握手SYN_RCVD → ESTABLISHED(服务器端)
主动调用close()ESTABLISHED → FIN_WAIT_1(主动关闭方)
收到FIN并回复ACKESTABLISHED → CLOSE_WAIT(被动关闭方)
被动方调用close()CLOSE_WAIT → LAST_ACK
收到最终ACKLAST_ACK → CLOSED(被动关闭方)

五、特殊场景与处理
  1. FIN_WAIT_2持续

    • 原因:对端未发送FIN(如进程崩溃)。
    • 解决:系统超时机制强制关闭(默认超时时间可配置)。
  2. TIME_WAIT过多

    • 影响:占用端口资源,导致新连接无法绑定相同端口。
    • 优化
      • 调整内核参数(如net.ipv4.tcp_tw_reuse)。
      • 确保HTTP服务器主动关闭连接(将TIME_WAIT转移至客户端)。
  3. RST报文触发

    • 场景:收到无效报文(如端口未监听)时,直接发送RST强制关闭连接。

六、状态转换图示例
客户端路径(主动关闭):
CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED服务器路径(被动关闭):
CLOSED → LISTEN → SYN_RCVD → ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

七、调试与监控工具
  1. netstat命令
    netstat -ant | grep <端口号>  # 查看当前TCP连接状态
    
  2. ss命令(替代netstat):
    ss -tulnp  # 显示所有TCP/UDP监听端口及进程
    
  3. Wireshark抓包:分析握手/挥手过程中的报文序列和状态变化。

总结:理解TCP状态转换图是排查网络问题(如连接泄漏、端口占用)的关键。需结合代码逻辑(如close()调用位置)和系统参数调优,确保连接高效释放。

  • 关键状态ESTABLISHED(连接成功)、CLOSE_WAIT(被动关闭等待)

MTU与MSS

  • MTU(最大传输单元):链路层允许的最大数据帧长度(通常 1500 字节)
  • MSS(最大段长度):TCP 报文段数据部分的最大长度(MTU - IP首部 - TCP首部
    . TCP粘包问题
  • 原因:TCP 将多个小报文合并发送,导致应用层无法区分边界
  • 解决方案:添加消息长度字段、使用分隔符(如 HTTP 的 Content-Length

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指定 Python 3.12.6-slim 作为基础镜像

指定 Python 3.12.6-slim 作为基础镜像&#xff0c;意思就是&#xff1a; &#x1f449; 用官方的 Python 3.12.6&#xff08;精简版&#xff09;作为容器的起点&#xff0c;里面已经有 Python 3.12.6 预装好了&#xff0c;你不用自己装。 &#x1f539; 为什么用 -slim&…

【蓝桥杯】算法笔记1

1.暴力枚举 给定一个正整数n,请找出所有满足a + b = n的整数对(a, b),其中a和b都是正整数,且a ≤ b。 输入格式:一个正整数n (1 ≤ n ≤ 10⁶) 输出格式:所有符合条件的(a, b)对,每行一对,按a的升序排列。如果没有符合条件的对,输出"No solution"。 问题分…

专注自习室:番茄工作法实践

专注自习室&#xff1a;番茄工作法实践 我需要一个任务管理工具&#xff0c;但在网上找了很多都找不到合适的工具。市面上的大多数产品过于强调任务完成性&#xff0c;给我带来了很强的心理压力&#xff0c;这种压力最终反而降低了我的工作效率。于是我决定自己动手&#xff0…

VUE3项目VITE打包优化

VUE3项目VITE打包优化 代码加密依赖配置效果对比图 自动导入依赖配置 代码压缩依赖配置效果对比图 图片压缩依赖配置效果对比图 字体压缩总结与实践运用效果 代码加密 依赖 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…

文章记单词 | 第14篇(六级)

一&#xff0c;单词释义 affection&#xff1a;n. 喜爱&#xff0c;钟爱&#xff1b;爱慕之情&#xff1b;感情stream&#xff1a;n. 小河&#xff0c;溪流&#xff1b;一连串&#xff0c;源源不断&#xff1b;水流&#xff0c;气流&#xff1b;vi. 流&#xff0c;流动&#x…

欧几里得距离(Euclidean Distance)公式

欧几里得距离公式 欧几里得距离&#xff08;Euclidean Distance&#xff09;是计算两点之间直线距离的一种方法。它是最常见的距离度量方式之一&#xff0c;广泛应用于数学、物理、机器学习、计算机视觉等领域。 公式定义 1. 二维空间 在二维平面上&#xff0c;假设有两个点…

机器学习——LightGBM

LightGBM(light gradient boosting machine&#xff0c;轻量梯度提升机)是对XGBoost进行改进的模型版本&#xff0c;其三者之间的演变关系为&#xff1a;GBDT-》XGBoost-》LightGBM&#xff0c;依次对性能进行优化&#xff0c;尽管XGBoost已经很高效了&#xff0c;但是仍然有缺…

内网服务器无法通过公网地址访问映射到公网的内网服务

内网服务器无法通过公网地址访问映射到公网的内网服务 问题现象问题原因解决方法总结 前几天遇到一个网络问题&#xff0c;在这里做下记录&#xff0c;希望能帮助到有相同问题的朋友。 问题现象 网络拓扑如上所示&#xff0c;服务器1和服务器2在同一内网&#xff0c;网段均为1…

python每日十题(13)

一般把计算机完成一条指令所花费的时间称为一个指令周期。指令周期越短&#xff0c;指令执行就越快。本题答案为D选项。 顺序程序具有顺序性、封闭性和可再现性的特点&#xff0c;使得程序设计者能够控制程序执行的过程(包括执行顺序、执行时间&#xff09;&#xff0c;对程序执…

Python 装饰器(Decorators)

什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;本质上是一个 修改其他函数功能的函数。它的核心思想是&#xff1a;不修改原函数代码&#xff0c;动态添加新功能。比如&#xff1a; 记录函数执行时间 检查用户权限 缓存计算结果 自动重试失败操作 理解…

uWebSockets开发入门

一、常用C++ WebSocket开源库 一些常用的 C++ WebSocket 开源库,它们支持 WebSocket 协议的实现,适用于客户端或服务器端开发。 1. Boost.Beast (推荐) 特点:基于 Boost.Asio 的高性能库,支持 HTTP/WebSocket,属于 Boost 官方库的一部分,稳定且跨平台。 适用场景:需要高…

多智能体功能分化的核心优势是什么:提升效率,查漏补缺

多智能体功能分化的核心优势是什么:提升效率,查漏补缺 在于通过分工协作提升整体效率、灵活性和鲁棒性。 1. 提升效率与专业性 原理:单一智能体无需处理全流程,通过专业化分工减少冗余计算和决策延迟。 示例: 自动驾驶系统: 感知智能体:专门处理摄像头、激光雷达等传…

项目复盘:websocket不受跨域限制的原理

主要还是因为&#xff1a; 1、WebSocket 是独立于 HTTP 的应用层协议&#xff0c;通过 HTTP 建立连接后&#xff0c;完全脱离 HTTP 语义约束。这意味着 不受 HTTP 同源策略限制 不需要预检请求 不依赖 CORS 头机制 2、建立连接时的握手请求仍使用 HTTP 格式&#xff0c;但…

COMPASS:通过残差强化学习和技能合成实现跨具身移动策略

25年2月来自 Nvidia、UC Berkeley 和 UT Austin 的论文“COMPASS: Cross-embOdiment Mobility Policy via ResiduAl RL and Skill Synthesis”。 随着机器人越来越多地部署在不同的应用领域&#xff0c;可泛化的跨具身移动策略变得越来越重要。虽然经典的移动栈已被证明在特定…

无人机,雷达定点飞行时,位置发散,位置很飘,原因分析

参考&#xff1a; 无人车传感器 IMU与GPS数据融合进行定位机制_gps imu 组合定位原始数-CSDN博客 我的无人机使用雷达定位&#xff0c;位置模式很飘 雷达的更新频率也是10HZ&#xff0c; 而px飞控的频率是100HZ&#xff0c;没有对两者之间的频率差异做出处理 所以才导致无人…

学习threejs,使用Sprite精灵、SpriteMaterial精灵材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Sprite1.1.1 ☘️代码…

外星人入侵(python设计小游戏)

这个游戏简而言之就是操作一个飞机对前方的飞船进行射击&#xff0c;和一款很久之前的游戏很像&#xff0c;这里是超级低配版那个游戏&#xff0c;先来看看效果图&#xff1a; 由于设计的是全屏的&#xff0c;所以电脑不能截图。。。。 下面的就是你操控的飞船&#xff0c;上面…

什么是CMS?常用CMS有哪些?

一、内容管理系统&#xff08;Content Management System&#xff09;‌ ‌什么是CMS‌&#xff1a;位于 Web 前端&#xff08;服务器&#xff09;和后端办公系统之间的软件系统&#xff0c;用于内容创建、编辑、审批和发布。支持文本、图片、视频、数据库等各类数字内容的管理…

Go 语言规范学习(3)

文章目录 Properties of types and valuesRepresentation of valuesUnderlying types【底层类型】Core types【核心类型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…

在 Ubuntu 上安装 Docker 的完整指南

1. 卸载旧版本(如有) 在安装新版本前,建议先卸载旧版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安装依赖包 更新软件包索引并安装必要的依赖: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…