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

计算机网络:传输层——多路复用与解复用

文章目录

  • 前言
  • 一、Socket(套接字)
  • 二、多路复用/解复用
  • 三、多路解复用
    • (1)多路解复用原理
    • (2)无连接(UDP)多路解复用
    • (3)面向连接(TCP)的多路解复用
  • 总结


前言

发送方法,接收方多路复用原理、UDP和TCP多路解复用。。


一、Socket(套接字)

一些名词:
在这里插入图片描述

传输层和应用层之间提供服务是如何

  • 位置:层间界面的SAP ( TCP/IP: socket)
  • 形式:应用程序接口API ( TCP/IP : socket API)

传输层提供的服务——需要穿过层间的信息:

  • 层间接口必须要携带的信息
    • 要传输的报文(对于本层来说:SDU)
    • 谁传的:对方的应用进程的标示:IP+TCP(UDP)端口
    • 传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)端口号
  • 传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装
    • 源端口号,目标端口号,数据等
    • 将IP地址往下交IP实体,用于封装IP数据报:源IP,目标IP

传输层提供的服务——层间信息的代表:

  • 如果Socket APT每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理
  • 用个代号标示通信的双方或者单方:socket
  • 就像OS打开文件返回的句柄一样
    • 对句柄的操作,就是对文件的操作
  • TCP socket:
    • TCP服务,两个进程之间的通信需要之前要建立连接
      • 两个进程通信会持续一段时间,通信关系稳定
    • 可以用一个整数表示两个应用实体之间的通信关系,本地标示
    • 使穿过层间接口的信息量最小
    • TCP socket:源IP,源端口,目标IP,目标IP,目标端口
    • 总而言之:Tcp socket是本地端口和目标端口的一个标识,与端口号的概念不同,便于管理,使穿过层级的信息量减少,tcp socket利用四元组的形式来标识端口:源ip,源端口,目标ip,目标端口。
    • 本地应用层和传输层的约定只有他俩自己知道。

TCP之上的套接字(socket):

  • 对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标示
    • 4元组:(源IP,源port,目标IP,目标port)
    • 唯一的指定了一个会话(2个进程之间的会话关系)o应用使用这个标示,与远程的应用进程通信
    • 不必在每一个报文的发送都要指定这4元组
    • 就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名、文件名
    • 简单,便于管理

在这里插入图片描述

在这里插入图片描述

传输层提供服务——层间信息代表:

  • UDP socket:
    • UDP服务,两个进程之间的通信需要之前无需建立连接
      • 每个报文都是独立传输的
      • 前后报文可能给不同的分布式进程
    • 因此,只能用一个整数表示本应用实体的标示
      • 因为这个报文可能传给另外一个分布式进程
    • 穿过层间接口的信息大小最小
    • UDP socket:本IP,本端口
    • 但是传输报文时:必须要提供对方IP,port
      • 接收报文时:传输层需要上传对方的IP,port

UDP之上的套接字(socket):

  • 对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标示
    • 2元组:IP,port(源端指定〉
    • UDP套接字指定了应用所在的一个端节点(end point)
    • 在发送数据报时,采用创建好的本地套接字(标示ID),就不必在发送每个报文中指明自己所采用的ip和port
    • 但是在发送报文时,必须要指定对方的ip和udp port(另外一个段节点)

在这里插入图片描述

套接字(socket):

  • 进程向套接字发送报文或从套接字接收报文
  • 套接字<–>门户
    • 发送进程将报文推出门户,发送进程依赖于传输层设施在另外一侧的门将报文交付给接受进程
    • 接收进程从另外一端的门户收到报文(依赖于传输层设施)

在这里插入图片描述

二、多路复用/解复用

发送方主机多路复用

  • 从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用)

接收方主机多路解复用

  • 根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)

三、多路解复用

(1)多路解复用原理

  • 解复用作用:TCP或者UDP实体采用哪些信息,将报文段的数据部分交给正确的socket,从而交给正确的进程
  • 主机收到IP数据报
    • 每个数据报有源IP地址和目标地址
    • 每个数据报承载一个传输层报文段
    • 每个报文段有一个源端口号和目标端口号(特定应用有著名的端口号)
  • 主机联合使用P地址和端口号将报文段发送给合适的套接字

在这里插入图片描述

(2)无连接(UDP)多路解复用

  • 服务器端和客户端都会创建套接字
  • 在接收端,UDP套接字用二元组标识(目标IP地址、目标端口号)
  • 当主机收到UDP报文段:
    • 检查报文段的目标端口号
    • 用该端口号将报文段定位给套接字
  • 如果两个不同源IP地址/源端口号的数据报,但是有相同的目标IP地址和端口号,则被定位到相同的套接字

在这里插入图片描述
例子:
在这里插入图片描述

(3)面向连接(TCP)的多路解复用

  • TCP套接字:(四元组本地标识)
    • 源IP地址
    • 源端口号
    • 目的IP地址
    • 目的端口号
  • 解复用:接收主机用这四个值来将数据报定位到合适的套接字
  • 服务器能够在一个TCP端口上同时支持多个TCP套接字:
    • 每个套接字由其四元组标识(有不同的源IP和源PORT)
    • Web服务器对每个连接客户端有不同的套接字
      • 非持久对每个请求有不同的套接字

例子:
主机上的多进程(多个应用)
在这里插入图片描述
主机一个进程上(同一个应用)的多线程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

无论是TCP还是UDP,Soket套接字就是本地的标识,都是为了每次传输的层间信息减少,所以在各自本地创建的一种类似于关系记录表的东西,发送方传输时,将源IP、源端口(和目标IP、目标端口)信息封装(复用)成socket(一个整数,如4499),这样应用层到传输层之间的传输用整数传输代表这些信息,传输层收到这个socket自己找本地的关系去查看获取这些信息(ip,端口),根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装;在接收方,传输层到应用层之间用传输层封装的socket传输,进行解复用,根据ip,端口信息将接收到的报文段发给正确的套接字(和对应的应用进程)。

相关文章:

  • ACM32F070 RTC 引脚做普通 GPIO 用法配置
  • Centos图形化界面封装OpenStack Centos镜像
  • Django 模型基础(五)
  • 奇迹mu 架设过程中可能会出现的问题及解决办法
  • Excel 数据处理记录
  • LeetCode 1038. 从二叉搜索树到更大和树:(反)中序遍历
  • C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)
  • 软件分享--智能照片识别分类软件
  • 【Java进阶】-- 设计模式
  • 572 - Oil Deposits (UVA)
  • Linux下设置redis临时密码和长期密码
  • python用YOLOv8对图片进行分类
  • springboot统一异常处理
  • Hana Studio打开BW失败
  • 基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。
  • AHK 中 = 和 == 等比较运算符的用法
  • JavaScript对象详解
  • Java多态
  • SpringBoot几种定时任务的实现方式
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 程序员该如何有效的找工作?
  • 观察者模式实现非直接耦合
  • 简单基于spring的redis配置(单机和集群模式)
  • 坑!为什么View.startAnimation不起作用?
  • 前嗅ForeSpider教程:创建模板
  • 《码出高效》学习笔记与书中错误记录
  • AI算硅基生命吗,为什么?
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #if #elif #endif
  • #include
  • #pragma multi_compile #pragma shader_feature
  • #pragma pack(1)
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pojstep1.1.2)2654(直叙式模拟)
  • (pytorch进阶之路)扩散概率模型
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm码农论坛 毕业设计 231126
  • (规划)24届春招和25届暑假实习路线准备规划
  • (九)c52学习之旅-定时器
  • (一)WLAN定义和基本架构转
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)创业的注意事项
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .netcore 获取appsettings
  • .NET框架
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .skip() 和 .only() 的使用
  • .考试倒计时43天!来提分啦!
  • @Documented注解的作用
  • @Query中countQuery的介绍
  • @reference注解_Dubbo配置参考手册之dubbo:reference