可以把网络层和传输层想成一个“快递系统”:

  • 网络层(IP 层) = 邮政系统:只负责把“包裹”(IP 数据报)从 A 地搬到 B 地,不保证顺序、不保证不丢、不保证不重复。
  • 传输层(TCP/UDP 层) = 快递公司:在邮政系统之上提供“增值服务”——对 TCP 来说,就是可靠、按序、不重复、流量受控的端到端运输;对 UDP 来说,就是“无连接、尽力而为”的快送。

下面用一次典型的 TCP 通信 说明两者如何“接力配合”。


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

  1. 应用层调用 connect()
  2. TCP(传输层) 生成 SYN 段
  3. TCP 把 SYN 交给 IP(网络层),IP 加上源/目的 IP 地址,生成 IP 数据报,查路由表,发出去。
  4. 对端 IP 收到后上交 TCP;TCP 回 SYN-ACK,再交给 IP 发回。
  5. 发起端 IP 收到 SYN-ACK → TCP → 回 ACK → 交给 IP → 连接建立完成。

网络层只负责把“SYN、SYN-ACK、ACK”这些 IP 数据报送到正确主机;
传输层负责根据这些“控制段”完成逻辑上的三次握手。


2. 数据传输

  • 发送端

    1. TCP 把应用数据切片成合适大小的 TCP 段,编好序号、计算校验和、设置窗口。
    2. 每个 TCP 段被封装成 IP 数据报(加 IP 头),IP 根据路由逐跳转发。
    3. 网络层可能出现 乱序、丢包、重复,TCP 不理会,IP 也不保证。
  • 接收端

    1. IP 层收到数据报后,根据协议字段 6(TCP)上交 TCP。
    2. TCP 根据序号 重排去重确认滑动窗口流量控制
    3. 若发现丢包,TCP 启动 重传,重传时仍用 IP 再发一次。
    4. 数据完整且有序后,TCP 按序交付给应用层。

网络层只管“送到”;
传输层负责“整理好再交给应用”。


3. 连接拆除(四次挥手)

  • 传输层发送 FIN/ACK 控制段;
  • 这些控制段仍由 网络层封装成 IP 数据报发走;
  • 双方 FIN + ACK 都到达后,TCP 连接正式关闭。

4. 与 UDP 的配合(简要)

  • UDP 没有连接、确认、重传,只是把应用数据封装成 UDP 数据报 → 交给 IP → IP 尽力送到对端。
  • 网络层仍负责路由、转发;UDP 只提供端口复用轻量校验,不保证可靠性。

一张图总结

应用层数据│
┌───┴──────────┐
│  传输层(TCP)  │  分段、编号、确认、重传、流量控制
└───┬──────────┘│  TCP段
┌───┴──────────┐
│  网络层(IP)   │  路由、寻址、转发(不保证可靠性)
└───┬──────────┘│  IP数据报
┌───┴──────────┐
│   链路层      │  真正在物理媒介上发帧
└──────────────┘

一句话总结

网络层提供“主机到主机”的可达性;传输层在网络层之上提供“进程到进程”的端到端语义(可靠或不可靠)。二者一前一后,共同完成完整的网络通信。


逻辑上的三次握手?啥意思

“逻辑上的三次握手”强调的是:
三次握手是一套“状态机规则”,由传输层(TCP)负责完成;网络层(IP)只负责把三次握手过程中产生的 3 个报文(SYN、SYN-ACK、ACK)当作普通数据报从 A 主机搬到 B 主机,完全不感知“握手”这件事。

换句话说:

  1. 物理、网络层看到的
    只是 3 个普通的 IP 数据报,按路由转发即可,不知道它们有什么顺序、含义。

  2. 传输层(TCP)看到的
    它根据这 3 个报文里的控制位(SYN、ACK)以及序号、确认号,维护一张状态表:

    • 收到 SYN → 回 SYN-ACK → 收到 ACK → 状态变为 ESTABLISHED。
      这套规则就是“逻辑上的三次握手”——只在 TCP 的逻辑状态机里存在,IP 层根本不 care。

举个生活类比

  • IP 层像邮差:只负责把 3 封信(SYN、SYN-ACK、ACK)送到正确地址。
  • TCP 层像收信人:必须按顺序读完这三封信,并在心里完成“合同签订”——这就是逻辑上的三次握手。

普通客户端中的应用程序,计算机是如何知道,某一包数据是要给自己的

一句话:
客户端进程并不会「监听端口」,但它仍然
① 临时占用了操作系统分配的端口
② 在 TCP/UDP 首部里写明了「四元组」
③ 操作系统根据四元组把返回包直接交给该进程


1. 四元组——“身份证”

每个网络连接在客户端发起时就确定了一个唯一标识:

(源IP, 源Port, 目的IP, 目的Port)
  • 浏览器访问 www.example.com:80 时,Windows 会给这个进程随机分配一个临时端口,例如 52341。
  • 于是四元组变成:
    (本机IP, 52341, 93.184.216.34, 80)
    

2. 操作系统如何“认识”返回包

  • 服务器回包的 IP 首部里:
    源 IP = 93.184.216.34,目的 IP = 本机
  • TCP/UDP 首部里:
    源端口 = 80,目的端口 = 52341
  • 操作系统维护一张“套接字表”
    四元组 → 进程句柄
    
    收到报文后,按表查找,直接把数据拷到对应进程的内核缓冲区。

3. 客户端不需要 listen,但仍“登记”

  • 发起 connect() 时,内核把这条四元组登记进表。
  • 关闭连接(或进程退出)后,表项被删除,端口回收。
  • 因此返回包总能精确找到进程,不会出现“谁都能收”的情况。

4. 类比生活

  • 浏览器 ≈ 张三
  • 操作系统 ≈ 小区门卫
  • 张三给快递站寄包裹,包裹上写
    发件人:张三,A栋523室  
    收件人:快递站
    
  • 快递站回寄时,包裹上写
    发件人:快递站  
    收件人:张三,A栋523室
    
  • 门卫一看门牌号,直接送到张三家门口,不会送错。

一句话总结

客户端进程不监听端口,但操作系统为它临时“注册”了四元组;所有返回包按四元组精准投递,因此绝不会搞错收件人。

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

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

相关文章

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 用户登录实现

大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解用户登录实现 视频在线地址: …

Redis主从复制数据同步实现原理详细介绍

文章目录一、主从复制的概念二、全量复制(完整重同步)三、增量复制(部分重同步)1. 增量复制的核心思想2. 增量复制的实现3. 复制偏移量(replicationoffset)4. 复制积压缓冲区(replicationbacklo…

docker 软件bug 误导他人 笔记

DockerDesktopInstaller.exe install --installation-dirX:\AI-AI\docker\pro\ 由于 Docker官方随便修改安装命令,这个在4.4一下是无法使用的,存在误导他人

Python 进阶(六): Word 基本操作

目录 1. 概述2. 写入 2.1 标题2.2 段落2.3 表格2.4 图片2.5 样式 3. 读取 1. 概述 Word 是一个十分常用的文字处理工具,通常我们都是手动来操作它,本节我们来看一下如何通过 Python 来操作。 Python 提供了 python-docx 库,该库就是为 Wo…

OpenLayers 入门指南【三】:API概要

目录一、官方文档二、核心类三、总结一、官方文档 首页右侧有四个栏目分别是 Docs(文档):也可以理解为使用指南,涵盖一下四个模块 Quick Start(快速入门):介绍如何快速引入并使用OpenLayers快速构建一个地图应用FAQ(问答):介绍一些常见问题的…

JAVA面试宝典 -《Kafka 高吞吐量架构实战:原理解析与性能优化全攻略》

🚀 Kafka 高吞吐量架构实战:原理解析与性能优化全攻略 随着大数据技术在日志收集、埋点监控、订单流处理等场景的普及,Kafka 已成为流处理架构中的核心组件。它之所以能在海量数据场景下保持高吞吐、低延迟,源于其在架构层面和底…

把sudo搞坏了怎么修复:报错sudo: /etc/sudo.conf is owned by uid 1000, should be 0

今天部署 NFS 的时候一不小心给/etc目录下所有的文件都所有者给改了,然后使用sudo的时候就出现了下面的问题: sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudoers i…

VUE前端项目开发1.0.1版本

项目包含用户权限管理、表单提交、数据上传下载、仪表盘可视化等功能,非常适合新手从零开始学习Vue3前端开发,下述包含所有开发源代码,敬请食用 废话少说先上图: 登陆界面: 仪表盘管理系统: 用户管理: 对于普通用户只有仪表盘和个人信息界…

低代码平台能否完全取代传统前端开发

低代码平台不能完全取代传统前端开发,主要原因包括灵活性有限、性能优化能力不足、复杂定制需求难以实现。 低代码平台尽管能快速开发出相对标准化的应用,但在处理复杂、个性化的业务需求时,明显表现出不足。尤其在需要精细化控制UI界面、高性…

Git 中如何比较不同版本之间的差异?常用命令有哪些?

回答重点1&#xff09; git diff <commit1> <commit2> &#xff1a;比较两个指定的提交之间的差异。2&#xff09; git diff <branch1> <branch2> &#xff1a;比较两个分支之间的差异。3&#xff09; git diff <path> &#xff1a;比较工作目录…

MySQL 8.0 OCP 1Z0-908 题目解析(32)

题目125 Choose three. Identify three functions of MySQL Enterprise Monitor. □ A) Analyze query performance. □ B) Start a logical backup. □ C) Determine the availability of monitored MySQL servers. □ D) Centrally manage users. □ E) Start a MySQL Enterp…

Spring处理器和Bean的生命周期

Spring处理器和Bean的生命周期Spring处理器是对Bean对象的的开发可以对BeanDifinition进行操作&#xff0c;例如动态添加、修改BeanDefinition、动态修改Bean。&#xff0c;也可以在Bean对象创建后对Bean对象进行代理增强。注意&#xff1a;对于处理器要又一个正确的认知&#…

Spring Framework源码解析——BeanFactory

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl1. BeanFactory 概述 BeanFactory 是 Spring IoC 容器的最基础接口&#xff0c;它定义了获取、配置和管理 Bean 的核心方法。它是 Spring 框架中容器体系的顶层接口之一&#…

C# 计算梯形面积和周长的程序(Program to calculate area and perimeter of Trapezium)

梯形是至少有一对边平行&#xff0c;其他两条边可以不平行的四边形。平行边称为梯形的底&#xff0c;其他两条边称为梯形的腿。平行边之间的垂直距离称为梯形的高。公式 &#xff1a; 梯形面积&#xff1a; 0.5 * (a b) * h梯形周长&#xff1a; a b c d例子&#xff1a; 输…

【计算机考研(408)- 数据结构】数组和特殊矩阵

数组和特殊矩阵 数组 数组的定义 数组是由n(n>1)个相同类型的数据元素构成的有限序列。每个数据元素称为一个数组元素&#xff0c;每个元素在n个线性关系中的序号称之为该元素的下标&#xff0c;下标的取值范围称为数组的维界。 数组是[[线性表]]的推广&#xff0c;一维数组…

Agent架构与工作原理:理解智能体的核心机制

Agent架构与工作原理&#xff1a;深入理解智能体的核心机制 AI Agent的核心组成部分 一个完整的AI Agent通常由以下几个核心模块组成&#xff1a; 1. 规划模块&#xff08;Planning Module&#xff09; 规划模块是Agent的"大脑"&#xff0c;负责制定行动策略。它接收…

解决vscode中vue格式化后缩进太小的问题,并去除分号 - 设置Vetur tabSize从2到4,设置prettier取消分号semi

效果图 左边原来的&#xff0c;右边是设置后的效果 实现步骤 安装插件 Vetur 安装插件 prettier Vscode > 文件 > 首选项 > 设置 搜索vetur > 找到比较下面的“Vetur > Format > Options: Tab Size” > 设置缩进为4 在附近找到“Vetur > Format: De…

计算机发展史:电子管时代的辉煌与局限

在计算机的发展历程中&#xff0c;电子管时代犹如一颗璀璨的流星&#xff0c;短暂却耀眼。它接过了机械计算装置的接力棒&#xff0c;以电子管为核心元件&#xff0c;开启了计算机的电子化征程&#xff0c;为后续的计算机发展奠定了坚实的基础。这段从 20 世纪 40 年代到 50 年…

div和span区别

区别1区别2App.vue代码 <template><div class"container"><h1>&#x1f3af; DIV 和 SPAN 标签的区别演示</h1><!-- 第一部分&#xff1a;基本区别演示 --><section class"demo-section"><h2>&#x1f4e6; 1. …

channel_up和lane_up

一、channel_up 1.当aurora通道完成初始化&#xff0c;channel准备发送或者接收数据的时候拉高 2.channel_up属于协议的链路层 3.当所有的通道的lane_up都成功拉高&#xff0c;并且完成通道绑定channel bonding,就拉高channel_up二、lane_up 1.lane初始化成功后拉高&#xff1b…