【网络通信基础与实践番外一】多图预警之图解UDP和TCP前置知识

参考大佬的文章https://www.cnblogs.com/cxuanBlog/p/14059379.html

一、宏观架构中的传输层

在计算机中,任何一个可以交换信息的介质都可以称为端系统。计算机网络的运输层则负责把报文从一端运输到另一端,运输层实现了让两个互不相关的主机进行了逻辑通信的功能,看起来像是让两个主机相连一样。

 数据包的结构如上图所示,数据包经过每层后,该层协议都会在数据包附上包首部,而当数据包经过传输层之后,会为其附上TCP首部,首部包含着源端口号和目的端口号。在发送端运输层将从发送应用程序接收到的报文转化为运输层分组,分组也被称为报文段(segment)。运输层一般会将报文段进行分割,分成较小的块,为每一块加上运输层首部并将其向目的地发送。

在运输层发送的过程中,可以选择的运输层协议主要有TCP和UDP。

二、谈谈一些基础概念

1、TCP和UDP

2、套接字

(1)socket的概念

socket实际上与TCP/IP没有必然联系,socket的出现只是方便了TCP/IP的使用 。可以直接使用下面Socket API的这些方法

(2)socket API方法

create():创建一个socket

bind():socket的标识,一般用于绑定端口号

listen():准备接收连接

connect():准备充当发送者

accept():准备充当接收者

write():发送数据

read():接收数据

close():关闭连接

(3)套接字处理过程

1是指调用create方法创建通信链路中的端点,创建完成后会返回描述该套接字的套接字描述符

2是指调用bind方法应用程序通过套接字描述符将唯一的名称绑定在套接字上,服务器必须绑定一个名称才能在网络中访问

3是指调用listen方法表示客户端愿意等待连接的意愿

4是指客户端应用程序调用connect方法发起与服务器的连接请求

5是指服务器应用程序使用accept API接受客户端连接请求

6是指在流套接字之间建立连接后,客户端和服务器之间就可以发起read/write API调用了

7是指当服务器或者客户端要停止操作时,调用close API释放套接字获取的所有系统资源

但是注意socket API不属于通信模型,socket API允许应用程序与传输层和网络层进行交互

为了方便资源的使用,提高机器的性能、利用率和稳定性等原因,我们的计算机都有一层软件叫做操作系统,它用于帮助我们管理计算机可以使用的资源,当我们的计算机要使用一个资源的时候,可以向操作系统申请,再由操作系统为我们分配和管理资源。通常我们要访问一个内核设别或者文件时,程序可以调用系统函数,系统就会为我们打开设备或者文件,然后返回一个文件描述符fd(或者称为ID,是一个整数),我们要访问该设备或者文件,只能通过你该文件描述符。

同理当我们使用网络时,要使用到对应的操作系统的操作和网络设备,所以我们可以向操作系统申请,然后系统会为我们创建一个套接字socket,并返回这个socket的ID,以后我们的程序要使用网络资源,只要向这个socket的编号ID操作即可、而我们每个网络进程至少对应着一个socket,向socket中的ID写数据,相当于是向网络发送数据,向socket中读数据,相当于是接收数据。

(4)端口

端口号是16位的非负整数,范围是0~65535之间,分为三种,

第一种是周知/标准端口号,范围是0~1023;

第二种是注册端口号,范围是1024~49151;

私有端口号,范围是49152~65535;

当一个报文到达服务器时,通过端口号来区分不同的应用程序,但是仅仅依靠端口号来确定某一条报文是不够的。互联网上一般使用源IP地址、目标IP地址、源端口号、目标端口号来进行区分。若果其中的某一项不同,就认为是不同的报文段。

而确认端口号的方法有两种,

第一种是标准既定的端口号,例如SSH使用22标识,FTP采用21标识,HTTP采用80标识;

第二种是时序分配的端口号,凭借操作系统为每个应用程序分配互不冲突的端口号;

(5)多路复用和多路分解

多路复用就是指从多个socket接收数据,为每块数据封装上头部信息,生成报文段,交给网络层

多路分解就是指依据头部信息将收到的报文段交给对应的socket,即不同的进程

如上图所示,多路复用体现在从主机1和主机3的不同的socket接收数据,并为每块数据封装上头部信息生成报文段。

多路分解体现在将接收到的不同的报文段交给对应的socket,即不同的进程。 

(i)无连接的多路复用和多路分解

主要用于UDP协议,UDP套接字是一个二元组,这个二元组包含目的IP和目的端口,主机在收到UDP段后检查段中的目的端口号,将UDP段导向绑定在该端口号的socket。

(ii)面向连接的的多路复用和多路分解

TCP的socket用四元组来标识:源IP、源目端口号、目标IP、目标端口号

接收端利用所有的四个值将报文导向合适的socket,服务器可能支持多个TCP socket,每个socket用自己的四元组唯一标识

如上图所示,主机C向主机B发起了两个HTTP请求(具有着不同的源端口号),主机A向主机B发起了一个HTTP请求,主机A、B、C都有自己唯一的IP地址,当主机C发出这两个HTTP请求后,正因为这两个HTTP请求具有着不同的源端口号所以主机B能够分解这两个HTTP连接。而对于主机A和主机C来说,这两个主机有着不同的IP地址,所以对于主机B来说也能够进行分解。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解

【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解 题目传送门 题解 CSP-S1 补全程序,致敬全 A 的答案,和神奇的预言家。 写一下这篇的题解说不定能加 CSP 2024 的 RP 首先看到 k k k 这么大的一个常数,就想到了二分。然后写一个判…

Netty系列-4 Pipeline和Handler

背景 Netty将IO事件按照流向划分为两个部分:Inbound入站事件和Outbound出站事件。入站事件由外部触发,包括通道注册(register)、通道激活(active)、数据可读(read)、通道异常(exceptionCaught)等;出站事件由程序主动触发,如连接的…

人工智能不是人工“制”能

文/孟永辉 如果你去过今年在上海举办的世界人工智能大会,就会知道当下的人工智能行业在中国是多么火爆。 的确,作为第四次工业革命的重要组成部分,人工智能愈发引起越来越多的重视。 不仅仅是在中国,当今世界的很多工业强国都在将…

828华为云征文|云服务器Flexus X实例|MacOS系统-宝塔部署Nuxt项目

文章目录 1. Flexus云服务器X实例1.1 与Flexus应用服务器L实例相比具备以下优势1.2 服务器的详细配置 2.宝塔部署Nuxt项目2.1 登录实例2.1 宝塔面板 3. Nuxt 项目与部署3.1 Nuxt3.2创建Nuxt项目3.3 部署3.4 部署成功 4.结语 1. Flexus云服务器X实例 华为云的Flexus云服务是为中…

C++高精度计时方法总结(测试函数运行时间)

文章目录 一、clock()函数——毫妙级二、GetTickCount()函数(精度16ms左右)——毫妙级三、高精度时控函数QueryPerformanceCounter()——微妙级四、高精度计时chrono函数——纳妙级五、几种计时比较六、linux下的计时函数gettimeofday()-未测试参考文献 …

typedef的用法

typedef只有一种用法&#xff0c;那就是&#xff1a; 1,代替各种类型或某类&#xff08;结构体&#xff09;成员。 比如下列代码&#xff1a; #include <iostream> #include <string> int main() {typedef int i;i e3;int f3;std::string t_or_f(ef)?"tru…

OpenAI的O1模型达到AGI二级,类人推理能力被提示危险,细思极恐!

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 今天让我们一起来聊聊最近科技圈的大新闻—…

利士策分享,家庭内耗:隐形的风暴,无声的侵蚀

利士策分享&#xff0c;家庭内耗&#xff1a;隐形的风暴&#xff0c;无声的侵蚀 在温馨的灯光下&#xff0c;家本应是我们心灵的港湾&#xff0c;是疲惫时最坚实的依靠。 然而&#xff0c;当家庭内部出现裂痕&#xff0c;无形的内耗便如同冬日里的寒风&#xff0c;悄无声息地…

SpringBoot 3.4.0还没来之前,又又又更新啦!SpringBoot 3.3.4版本依赖升级,性能与稳定性再提升!

为什么要使用SpringBoot在现代开发中&#xff0c;高效与灵活性是每个开发团队追求的核心目标。然而&#xff0c;如何在不牺牲灵活性的前提下&#xff0c;快速构建复杂的应用程序&#xff0c;常常成为开发者的难题。SpringBoot的出现&#xff0c;正是为了解决这个矛盾。它以“约…

Spring Boot技术在高校心理辅导系统中的应用研究

3 系统分析 3.1可行性分析 在进行可行性分析时&#xff0c;我们通常根据软件工程里方法&#xff0c;通过四个方面来进行分析&#xff0c;分别是技术、经济、操作和法律可行性。因此&#xff0c;在基于对目标系统的基本调查和研究后&#xff0c;对提出的基本方案进行可行性分析。…

【C++初阶】探索STL之——vector

【C初阶】探索STL之——vector 1.什么是vector2.vector的使用2.1 vector的定义2.2 vector iterator(迭代器)的使用2.3 vector空间问题2.4 vector的增删查改2.5 vector迭代器失效的问题2.5.1 vector常见迭代器失效的操作 3 动态二位数组 1.什么是vector vector其实就是一个可以…

GNU链接器(LD):设置入口点(ENTRY命令)的用法及实例解析

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分&#xff1a; &#xff08;1&#xff09;编译器 &#xff08;2&#xff09;汇编器 &#xff08;3&#xff09;链接器 &#xff08;4&#xff09;lib库 在GNU工具链中&…

3.5.2 __ipipe_init()之完成中断处理程序设置

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 原创不易&#xff0c;需要大家多多鼓励&#xff01;您的关注、点赞、收藏就是我的创作动力&#xff01; 3.5.2 __ipipe_init()之完成中断处理程序设置 __ipipe_init()最核心的就是__ipipe_enable_pipeline()&am…

Mybatis自定义TypeHandler,直接存储枚举类对象

在这篇文章中&#xff0c;我们已经知道如何使用枚举类直接接受前端的数字类型参数&#xff0c;省去了麻烦的转换。如果数据库需要保存枚举类的code&#xff0c;一般做法也是代码中手动转换&#xff0c;那么能不能通过某种机制&#xff0c;省去转换&#xff0c;达到代码中直接保…

PowerMill 2025简体中文版百度云资源分享下载

如大家所了解的&#xff0c;PowerMill是一款专业的CAM&#xff08;计算机辅助制造&#xff09;软件。主要用于加工行业&#xff0c;可以帮助用户进行高效、精准的加工工艺设计和数控编程&#xff0c;以达到生产部件的高精度和高质量。 对于初次接触的小伙伴来说&#xff0c;目…

k均值vs高斯混合模型

K均值&#xff08;K-means&#xff09;和高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09;是常用的聚类算法。 K均值是非概率模型&#xff0c;根据&#xff08;欧氏&#xff09;距离判断&#xff0c;类比最小距离分类器&#xff08;分类&#xff09;。高斯混…

240922-chromadb的基本使用

A. 基本使用 ChromaDB 是一个专门为向量数据库和嵌入查询优化的数据库。它可以与嵌入模型结合使用&#xff0c;存储和查询高维向量数据&#xff0c;通常用于大规模语义搜索、推荐系统等领域。 以下是使用 ChromaDB 的步骤&#xff1a; 1. 安装 ChromaDB 你可以通过 pip 安装…

96. UE5 GAS RPG 实现闪电链技能(一)

闪电链有一个施法的过程&#xff0c;就是在按键按下的过程&#xff0c;会在按下的过程一直持续造成伤害&#xff0c;一直等到条件不满足&#xff08;技能键位抬起&#xff0c;蓝量不足&#xff0c;被眩晕&#xff09;时&#xff0c;将结束技能&#xff0c;并退出技能状态。 所以…

【WSL迁移】将WSL2迁移到D盘

首先查看WSL状态&#xff1a;wsl -l -v 以压缩包的形式导出到其他盘。 wsl --export Ubuntu D:\Ubuntu_WSL\ubuntu.tar 注销原有的linux系统 wsl --unregister Ubuntu 导入系统到D盘 wsl --import Ubuntu D:\Ubuntu_WSL D:\Ubuntu_WSL\Ubuntu.tar 恢复默认用户 Ubuntu co…

如何保护您的机器学习模型

在计算机技术领域&#xff0c;很少有领域像人工智能(AI)和机器学习(ML)一样受到如此多的关注。这门学科位于计算机科学和数据分析的交叉点&#xff0c;已成为移动应用程序、语音助手、欺诈交易检测、图像识别、自动驾驶甚至医疗诊断不可或缺的一部分。 背景介绍由于机器学习模型…