计算机网络 —— 运输层(运输层概述)
计算机网络 —— 运输层(运输层概述)
- 运输层
- 运输层端口号
- 复用分用
- 复用(Multiplexing)
- 分用(Demultiplexing)
- 常用端口号
- 页面响应流程
我们今天进入到运输层的学习:
运输层
我们之前学习的物理层,数据链路层,网络层,都只是解决了计算机之间怎么交互数据?:
但是,我们一般进行交互是计算机里面一个个的进程进行交互的:
运输层(Transport Layer)是计算机网络中的一个重要层次,位于OSI模型的第四层或TCP/IP模型的第二层。这一层的主要职责是负责端到端的通信(进程与进程之间的通信),即确保数据能够从源主机的应用层无差错地传输到目的主机的应用层。运输层为上层应用提供了一个屏蔽底层网络技术细节的接口,使得高层应用可以不必关心底层网络的复杂性。
运输层有两个主要的协议,分别是传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP):
- 传输控制协议(TCP):TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过建立连接、数据传输和连接终止三个阶段来确保数据的可靠传输。TCP提供了错误检测、流量控制、拥塞控制等机制,以保证数据的顺序、无丢失和无重复传输,适合于对可靠性要求较高的应用,如Web浏览、电子邮件等。
- 用户数据报协议(UDP):UDP是一种无连接的、不可靠的、基于数据报的传输层协议。与TCP不同,UDP不建立连接,也不保证数据的可靠传输,数据包可能丢失、重复或乱序到达。但正因为省去了建立连接和维护连接状态的过程,UDP具有较低的传输延迟,适用于实时性要求高但能容忍一定数据丢失的应用,如在线视频、语音通话、游戏等。
总的来说,运输层在计算机网络中起到了承上启下的关键作用,它通过TCP和UDP两种不同的服务模式,满足了不同应用场景的需求,既保证了数据传输的可靠性,也支持了对低延迟的需求。
运输层端口号
现在有一个问题,我计算机上面的应用程序那么多,我发送信息如何让对方识别是我这个应用程序发的呢?
所以我们有了端口号的概念:
运输层端口号是一个16位的数字,用于标识网络中进程间的通信。它允许不同的应用层协议和进程在同一台主机上运行,并且能够独立接收和发送数据,而不会发生混淆。端口号的取值范围是0到65535,根据用途可分为以下几类:
- 熟知端口号(Well-Known Ports):范围从0到1023,这些端口被预留给标准的、众所周知的服务,如HTTP(80)、HTTPS(443)、FTP(21)等。它们由互联网数字分配机构(IANA)管理并分配给特定的服务。
- 登记端口号(Registered Ports):范围从1024到49151,用于已向IANA注册但不是广泛认可的服务。这些端口通常用于公司内部或者非标准化的服务。
- 短暂端口号(Ephemeral Ports):范围从49152到65535,这些端口用于客户端程序临时选择的,未被IANA正式分配的端口。当客户端需要发起对外连接时,操作系统会从这个范围内分配一个未被使用的端口作为源端口。
比如我规定QQ发消息用1203端口,腾讯看视频用9076端口,这样每个进程都有相对应的端口,就不会混了(还记得Tomcat的端口是8080吗?)
端口号在TCP和UDP中都存在,它们与IP地址结合形成套接字(Socket),这是网络编程中的一个基本概念,用于唯一标识网络中的应用程序进程。通过端口号,运输层能够实现复用(Multiplexing)和分用(Demultiplexing),即多个不同应用层协议或进程可以共享同一IP地址的网络连接,同时确保每个数据包都能正确地送达目标进程。
复用分用
复用(Multiplexing)和分用(Demultiplexing)是计算机网络中,特别是在运输层中非常重要的两个概念,它们描述了如何在单一的网络连接上高效地处理多个不同应用或服务的数据传输需求。
复用(Multiplexing)
复用是指在一个共享的通信资源(如一条网络连接)上,同时传输多路信号或数据流的技术。在运输层中,这意味着多个应用层的进程可以通过同一个IP地址和端口号组合(实际上是不同的源端口号)共享网络连接,发送数据到不同的目的地,而不会相互干扰。
例如,当你正在浏览网页(使用HTTP或HTTPS协议,通常通过端口80或443)的同时,还在使用即时通讯软件(可能使用自定义端口),尽管两者的通信都是通过同一个网络出口进行的,但运输层能够区分出哪些数据包属于网页浏览,哪些属于即时通讯,然后将它们“复用”在同一物理链路上发送出去。
分用(Demultiplexing)
分用则是复用的逆过程,它发生在数据接收端。当多个应用的数据经过复用后通过网络到达接收方时,运输层需要根据数据包中的信息(主要是目标端口号)将这些数据正确地分发到相应的应用层进程。
继续上面的例子,当你的计算机接收到包含网页数据和即时通讯消息的数据包时,运输层会检查每个数据包的目标端口号,然后将网页数据分发给浏览器进程,将即时通讯消息分发给对应的聊天软件进程。这样,尽管所有数据都共享了相同的入口,但每个应用都能准确无误地获得自己的数据,这就是分用。
举个例子:
想象一家大型的快递配送中心,这个配送中心就像是计算机的运输层。
复用(Multiplexing):
假设配送中心每天要处理来自不同电商平台的大量包裹,这些包裹最终都要通过同一辆货车运送到各个居民区。为了高效利用货车的空间,配送中心会对这些包裹进行分类和标记,但不立即分配到特定的小区或门牌号,而是先全部装车。在这个过程中,虽然来自不同电商平台的包裹混在一起,但每个包裹上都有明确的标识(比如条形码或二维码),代表了它的来源和目的地信息。这就像在网络传输中,不同应用的数据包通过同一个网络出口发送,但每个数据包都包含了目标端口号这样的标识信息。
分用(Demultiplexing):
当货车到达居民区后,配送员开始根据包裹上的标识信息进行分拣。他们将来自不同电商平台的包裹分别送往不同的小区,再进一步按照门牌号精确投递。这样,尽管所有的包裹最初是混合装载的,但通过分拣过程,每个包裹都能准确无误地到达收件人的手中。在计算机网络中,这就好比运输层在接收端根据数据包中的目标端口号,将数据正确地分发给对应的应用程序,如浏览器、邮件客户端等。
通过这个例子,我们可以看到,复用允许在有限的资源(如货车/网络带宽)上高效地合并和传输多样化的数据(包裹/数据包),而分用则确保这些数据在目的地能够被正确识别并送达至各自的目的地(收件人/应用程序),整个过程既高效又有序。
简而言之,复用让多个数据流能够在单个通信通道中共存和传输,而分用则确保这些数据流在接收端能够被正确地区分开来,送达至各自的应用程序,从而实现了网络资源的有效利用和数据的有序传输。
常用端口号
常用端口号是指在网络通信中被广泛认知和采用的端口号,它们与特定的服务或协议关联。以下是一些常见的端口号及其对应的服务:
- HTTP (Hypertext Transfer Protocol): 端口号 80,用于网页浏览,尽管现在普遍使用HTTPS。
- HTTPS (HTTP Secure): 端口号 443,提供加密的网页浏览服务。
- FTP (File Transfer Protocol): 控制连接端口号 21,用于文件传输服务。
- SSH (Secure Shell): 端口号 22,用于安全的远程登录和文件传输。
- SMTP (Simple Mail Transfer Protocol): 端口号 25,用于发送电子邮件。
- POP3 (Post Office Protocol version 3): 端口号 110,用于接收电子邮件。
- IMAP (Internet Message Access Protocol): 端口号 143(非SSL)或 993(SSL),用于邮件访问和管理。
- DNS (Domain Name System): 端口号 53,用于域名解析服务。
- SQL Server: 默认端口号 1433,用于微软SQL Server数据库服务。
- MySQL: 默认端口号 3306,用于MySQL数据库服务。
- MongoDB: 默认端口号 27017,用于MongoDB数据库服务。
- Telnet: 端口号 23,一种古老的远程终端访问协议。
- LDAP (Lightweight Directory Access Protocol): 端口号 389,用于访问目录服务。
- HTTPS Alt (Alternative HTTPS Port): 端口号 8443,作为HTTPS的替代端口。
- HTTP Alt (Alternative HTTP Port): 端口号 8080,常被用作HTTP服务的替代端口,特别是测试环境或避免权限问题时。
页面响应流程
当您在浏览器中输入一个网页网址(URL)并按下回车键后,一系列复杂的操作在幕后迅速展开,直至您看到页面内容。在整个过程中,运输层扮演着确保端到端可靠或无连接数据传输的关键角色。
- 用户输入网址: 用户在浏览器地址栏输入想要访问的网址,并按下回车键。
- DNS查询(通过UDP): 浏览器首先需要将您输入的域名转换为服务器的IP地址。它通过运输层的UDP协议向本地DNS解析器发送查询请求,使用UDP端口53。这是因为DNS查询通常较小,对速度要求较高,UDP的无连接特性能够提供更快的查询响应,尽管牺牲了TCP提供的可靠性保证。如果DNS响应超时或失败,浏览器可能会尝试使用TCP重新进行DNS查询,以增加成功率。
- 解析与IP地址获取: 本地DNS服务器处理请求,如果缓存中已有记录则直接返回,否则向上级DNS服务器查询,直至获得域名对应的IP地址。
- 建立TCP连接: 获取到IP地址后,浏览器通过运输层的TCP协议与Web服务器建立连接,涉及三次握手过程,以确保数据传输的可靠性。此时,会指定目标端口(通常是HTTP的80或HTTPS的443)以及一个随机的源端口号。
- 发送HTTP/HTTPS请求与接收响应: 建立连接后,浏览器通过TCP发送HTTP或HTTPS请求到服务器,并等待服务器响应。TCP负责数据包的顺序、错误检测及重传,确保请求和响应的完整性。
- 数据传输与页面渲染: 接收到服务器的响应数据后,TCP在接收端对数据包进行排序和错误处理,保证数据的正确性。浏览器利用这些数据渲染出网页内容。
- 连接关闭: 数据传输完毕,TCP通过四次挥手过程关闭连接,释放资源。
在整个过程中,运输层的核心功能体现在TCP和UDP协议的使用上,特别是TCP确保了数据的可靠、有序传输,以及在端到端连接上的错误处理,这对于网页浏览这类需要高可靠性的应用至关重要。
相关文章:

计算机网络 —— 运输层(运输层概述)
计算机网络 —— 运输层(运输层概述) 运输层运输层端口号复用分用复用(Multiplexing)分用(Demultiplexing) 常用端口号页面响应流程 我们今天进入到运输层的学习: 运输层 我们之前学习的物理层…...

BKP备份寄存器RTC实时时钟
BKP备份寄存器&RTC实时时钟 VDDA和VSSA是内部模拟部分的电路 VDD和VSS_1、2、3是内部数字电路的供电。系统以VDD开头的电源都是主电源。在正常使用STM32时,全部需要接到3.3v电源上。 VBAT备用电池供电引脚,如使用STM32内部的BKP和RTC,引…...

基于协同过滤算法的电影推荐
基于协同过滤算法的电影推荐 电影推荐系统使用了基于**协同过滤(Collaborative Filtering)的算法来生成推荐。具体来说,使用了基于用户的协同过滤(User-Based Collaborative Filtering)**算法,步骤如下&am…...

IEEE754、linear11、linear16浮点数应用原理
IEEE754、linear11、linear16浮点数应用原理 1 浮点数应用1.1 IEEE754 浮点数标准1.2 PMBUS浮点数格式 2 浮点数原理2.1 IEEE754 浮点数解析2.2 PMBUS浮点数解析 3 浮点数代码应用3.1 IEEE754 浮点数应用3.1.1 将浮点变量赋值,直接打印整型(32位…...

6、 垃圾回收 浏览器事件循环
垃圾回收 & 浏览器事件循环 垃圾回收引用计数算法标记清除(mark-sweep)算法标记整理(Mark-Compact)算法 内存管理浏览器事件循环宏任务微任务整体流程 垃圾回收 垃圾回收,又称为:GC(garbag…...

Java多线程面试重点-2
16.Synchronized关键字加在静态方法和实例方法的区别? 修饰静态方法,是对类进行加锁(Class对象),如果该类中有methodA和methodB都是被Synch修饰的静态方法,此时有两个线程T1、T2分别调用methodA()和methodB()&#x…...

LLaMA Factory多卡微调的实战教程(持续更新)
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
IOUtils的妙用
查看IOUtils的api文档,它的方法大部分都是重载的,方法的用法总结如下: 方法名使用说明buffer将传入的流进行包装,变成缓冲流。并可以通过参数指定缓冲大小closeQueitly关闭流contentEquals比较两个流中的内容的是否一致copy将输入…...

目标检测——室内服务机器人LifelongSLAM数据集
引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …...

Mysql学习笔记-进阶篇
一、存储引擎 1、MYSQL体系结构 连接层、服务层、引擎层、存储层; 2、存储引擎简介 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是库的,所以存储引擎也可被称为表类型。 1)在创…...

AI写真:ControlNet 之 InstantID
但是 IPAdapter-FaceId 目前只在 SD 1.5 模型上表现较好,SDXL 模型上的表现较差,不能用于实际生产。可是很多同学已经在使用SDXL了,而且SDXL确实整体上出图效果更好,怎么办? 这篇文章就来给大家介绍一个在SDXL中创作A…...

单元测试的思考与实践
1. 什么是单元测试 通常来说单元测试,是一种自动化测试,同时包含一下特性: 验证很小的一段代码(业务意义 或者 代码逻辑 上不可再分割的单元),能够更准确的定位到问题代码的位置 能够快速运行(…...
C# Socket通讯简单Demo
C# Socket通讯简单Demo Client端Listener端 Client端 static void Main(string[] args) {XSocketService XSocketService new XSocketService();XSocketService.Init();while (true){Console.Write("请输入消息:");var msg Console.ReadLine();XSocket…...

视频融合共享平台LntonCVS视频监控管理平台技术方案详细介绍
LntonCVS国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发,提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能,包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲…...

C#ListView的单元格支持添加基本及自定义任意控件
功能说明 使用ListView时,希望可以在单元格显示图片或其他控件,发现原生的ListView不支持,于是通过拓展,实现ListView可以显示任意控件的功能,效果如下: 实现方法 本来想着在单元格里面实现控件的自绘的…...

数据库选型实践:如何避开分库分表痛点 | OceanBase用户实践
随着企业业务的不断发展,数据量往往呈现出快速的增长趋势。使用MySQL的用户面对这种增长,普遍选择采用分库分表技术作为应对方案。然而,这一方案常在后期会遇到很多痛点。 分库分表的痛点 痛点 1:难以保证数据一致性。由于分库分…...

3个火火火的AI项目,开源了!
友友们,今天我要给你们安利三个超酷的开源项目,它们都和AI有关,而且每一个都能让你的日常生活变得更加有趣和便捷!(最近AI绘图又又超神了,分享以下美图养眼) 01 字节出品,文字转语音Seed-TTS 字节推出了一…...
算法 | 子集数排列树满m叉树二分搜索归并排序快速排序
子集树:O(2^n) 一个序列的所有子集为2^n,即可看成具有2^n个叶节点的满二叉树 int backtrack(int k) //k表示扩展结点在解空间树中所处的层次 {if(k>n) //n标识问题的规模output(x); //x是存放当前解的一维数组if(constraint(k)…...

SpringBoot配置第三方专业缓存技术jetcache方法缓存方案
jetcache方法缓存 我们可以给每个方法配置缓存方案 JetCache 是一个基于 Java 的缓存库,支持多种缓存方案和缓存策略,主要用于提升应用程序的性能和响应速度。它提供了多种缓存模式和特性,可以根据需求选择合适的缓存方案。 JetCache 的主…...

游戏开发丨基于PyGame的消消乐小游戏
文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容:基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...

timestamp时间戳转换工具
作为一名程序员,一款高效的 在线转换工具 (在线时间戳转换 计算器 字节单位转换 json格式化)必不可少!https://jsons.top 排查问题时非常痛的点: 经常在秒级、毫秒级、字符串格式的时间单位来回转换,于是决定手撸一个…...