多路复用与多路分解

news/2024/5/18 16:37:29 标签: 网络, udp, 网络协议

进程与套接字

一个进程有一个或多个套接字( socket),它相当于从网络向进程传递数据和从进程向网络传递数据的门户。在接收主机中的运输层实际上并没有直接将数据交付给进程,而是将数据交给了一个中间的套接字。在任一时刻,在接收主机上可能有不止一个套接字,所以每个套接字都有唯一的标识符。标识符的格式取决于它是UDP还是TCP套接字。

怎样将一个到达的运输层报文段定向到对应的套接字?

为了达到目的,每个运输层报文段中具有几个字段。在接收端,运输层检查这些字段,标识出接收套接字,进而将报文段定向到该套接字。将运输层报文段中的数据交付到正确的套接字的工作称为多路分解(demultiplexing)。在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用(multiplexing)

运输层多路复用要求

  1. 套接字有唯一标识符;
  2. 每个报文段有特殊字段来指示该报文段所要交付到的套接字。字段是源端口号字段和目的端口号字段。

无连接的多路复用和多路分解

假定在主机A中的一个进程具有UDP端口19157,它要发送一个应用程序数据块给位于主机B中的另一进程,该进程具有UDP端口46428。主机A中的运输层创建一个运输层报文段,其中包括应用程序数据、源端口号(19157)、目的端口号****(46428)和两个其他值(对当前的讨论并不重要)。然后,运输层将得到的报文段传递到网络层。网络层将该报文段封装到一个IP数据报中,并尽力而为地将报文段交付给接收主机。如果该报文段到达接收主机B,接收主机运输层就检查该报文段中的目的端口号46428并将该报文段交付给端口号46428所标识的套接字。值得注意的是,主机B可能运行多个进程,每个进程都具有其自己的 UDP套接字和相联系的端口号。当从网络到达 UDP报文段时,主机B通过检查该报文段中的目的端口号,将每个报文段定向分解到相应的套接字。

面向连接的多路复用与多路分解

TCP套接字和UDP套接字之间的一个细微差别是,TCP套接字是由一个四元组(源IP地址,源端口号,目的P地址,目的端口号)来标识的。这样,当一个TCP报文段从网络到达一台主机时,该主机使用全部4个值来将报文段定向(分解)到相应的套接字。与UDP不同的是,两个具有不同源IP地址或源端口号的到达TCP报文段将被定向到两个不同的套接字。
TCP客户端创建一个套接字并发送一个连接建立请求报文段,假设报文段中目的端口号为12000,运行的服务器进程收到具有端口12000的连接请求后,将正在监听端口号为12000的进程创建一个套接字
所有后续到达的报文段,如果它们的源端口号、源主机IP地址、目的端口号和目的IP地址都与建立连接报文段中4个值匹配,则被分解到这个套接字。随着TCP连接完成,客户和服务器便可相互发送数据了。


http://www.niftyadmin.cn/n/1204442.html

相关文章

传输层协议是如何判断分组是新的还是重传

几乎所有现有的数据传输协议中,包括TCP,是在数据分组中添加一新字段,让发送方对其数据分组号,即发送数据分组的**序号**(sequence number)放在该字段。于是,接收方只需要检查序号即可确定收到的分组是否一次重传。

大白话Vue源码系列目录

Angular 是 Google 亲儿子,React 是 Facebook 小正太,那咱为啥偏偏选择了 Vue 下手,一句话,Vue 是咱见过的最对脾气的 MVVM 框架。之前也使用过 knockout,angular,react 这些框架,但都没有让咱产…

流水线技术下的滑动窗口协议(GBN)和选择重传(SR)

流水线技术对可靠数据传输协议带来如下影响: 必须增加序号范围,因为每个输送中的分组(不计算重传的)必须有一个唯一的序号,而且也许有多个在输送中未确认的报文。协议的发送方和接收方两端也许必须缓存多个分组。发送方最低限度应当能缓冲那…

43.10. Google Authenticator - Android Apps on Google Play

#### ssh 二次认证 1) 安装依赖环境 yum install gcc wget pam-devel libpng-devel libtool 2) 安装二维码工具 yum install -y qrencode 3) 安装 google_authenticator (EPEL repo) yum install google-authenticator -y 4) setup <1> Using command line switch to th…

DNS为什么使用UDP

DNS是一个通常使用UDP的应用层协议的例子 当一台主机中的DNS应用程序想要进行一次查询时&#xff0c;它构造了一个 DNS查询报文并将其交给UDP。无须执行任何握手&#xff0c;主机端的UDP为此报文添加首部字段,然后将形成的报文段交给网络层。网络层将此UDP报文段封装进一个IP数…

63.3. aliases

查找别名文件地址 # postconf alias_maps alias_maps hash:/etc/aliases增加别名 # vim /etc/aliasesneo: netkillermsn.comnewaliases - rebuild the data base for the mail aliases file 原文出处&#xff1a;Netkiller 系列 手札 本文作者&#xff1a;陈景峯 转载请与作者…

译:Linux 文件系统介绍

原文地址&#xff1a;https://opensource.com/life/1...原翻译地址&#xff1a;http://www.tony-yin.top/2017/... 本文旨在对Linux文件系统概念进行深层次的讨论。本文既不准备对某个特定类型的文件系统&#xff08;比如ext4&#xff09;进行基础性的描述&#xff0c;也不打算…

TCP的一些有趣情况和快重传

文章目录一、一些有趣的情况二、超时间隔加倍三、快速重传四、是回退N步还是选择重传一、一些有趣的情况 上图描述了第一种情况&#xff0c;主机A向主机B发送一个报文段。假设该报文段的序号是92&#xff0c;而且包含8字节数据。在发出该报文段之后&#xff0c;主机A等待一个来…