计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)

news2024/9/19 20:42:41

运输层协议概述

进程之间的通信 

        运输层向它上面的应用层提供通信服务。 

        当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时,都要使用协议栈中的运输层;而网络核心部分中的路由器在转发分组时只用到下三层的功能。

Q1:我们知道,IP 协议能够把源主机A发送出的分组,按照首部中的目的地址,送交到目的主机B,那么,为什么还需要运输层呢?


A1:真正进行通信的实体是在主机中的哪个构件是主机中的应用进程,是一台主机中的应用进程和另一台主机中的应用进程在交换数据(即通信)。

        因此严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。 

        在计算机网络中实际进行通信的真正实体,是位于通信两端主机中的进程;也就是说,端到端的通信是应用进程之间的通信
 

进程之间的通信图例说明 

        主机A的应用进程 AP1和主机B的应用进程AP2通信,而与此同时,应用进程AP3也和对方的应用进程AP4通信。这表明运输层有一个很重要的功能——复用(multiplexing)和分用(demultiplexing)。

  • 复用:发送方不同应用进程都可以使用同一个运输层协议传输数据
  • 分用:接收方运输层在去掉报文首部可以将数据正确交付目的的应用进程

         运输层向应用层实体屏蔽了下面网络核心的细节(例如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。

网络层与运输层的通信区别 

         网络层为主机之间的通信提供服务;而运输层则在网络层的基础上,为应用进程之间的通信提供服务。

        运输层还要对收到的报文进行差错检测。——在网络层,IP 数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分。
 

运输层的两个协议 

  • 用户数据报协议UDP (User Datagram Protocol)
  • 传输控制协议 TCP (Transmission Control Protocol) 

        按照 OSI 的术语,两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元TPDU (Transport Protocol Data Unit)。但在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文段或UDP用户数据报

        传输控制协议TCP:为其上层提供的是面向连接的可靠的数据传输服务。

        使用TCP通信的双方,在传送数据之前必须首先建立TCP连接(逻辑连接,而非物理连接)。数据传输结束后必须要释放TCP连接。
        TCP为了实现可靠传输,就必须使用很多措施,例如TCP连接管理、确认机制、超时重传、流量控制以及拥塞控制等。
        TCP的实现复杂,TCP报文段的首部比较大,占用处理机资源比较多。


        用户数据报协议UDP:为其上层提供的是无连接的不可靠的数据传输服务。
        使用UDP通信的双方,在传送数据之前不需要建立连接
        UDP不需要实现可靠传输,因此不需要使用实现可靠传输的各种机制
        UDP的实现简单,UDP用户数据报的首部比较小。

运输层的端口 

         我们知道,运输层有分用和复用的功能,为了正确交付应用层所指明的应用进程,应当给每个应用进程赋予一个明确的标志。

运行在计算机上的进程是使用进程标识符(Process ldentification,PIlD)来标识的
        然而,因特网上的计算机并不是使用统一的操作系统,而不同操作系统(Windows、Linux、MacOS)又使用不同格式的进程标识符
        为了使运行不同操作系统的计算机的应用进程之间能够基于网络进行通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。

        应用进程的交互需要经过应用层和运输层的界面上一些“门”,而“门”设为通信的抽象终点。

        这些抽象终点的正式名称就是协议端口(protocol port),一般就简称为端口(port)。每一个端口用一个称为端口号(portnumber)的正整数来标志。主机的操作系统提供了接口机制,使得进程能够通过这种机制找到所要找的端口。

        请注意,这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的地点。不同的系统具体实现端口的方法可以是不同的(取决于系统使用的操作系统)。

               

        TCP/IP体系结构的运输层使用端口号来标识和区分应用层的不同应用进程。 

        TCP/IP的运输层用一个16位端口号来标志一个端口。但请注意,端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。

        在互联网不同计算机中相同的端口号是没有关联的

        16位的端口号可允许有65535个不同的端口号

服务器使用的端口号与客户端使用的端口号 

服务器使用的端口号 


客户端使用的端口号

 分用和复用的运行

UDP的复用分用

运输层端口号举例

1.用户pc在浏览器输入web服务器域名,向DNS客户进程发送请求报文 
 

2.DNS服务器收到报文后


3.PC收到DNS响应报文


4.用户PC中的HTTP客户进程向web服务器发送HTTP请求报文


5.Web服务器收到PC请求报文


6.PC接收到Web响应报文

数据协议报UDP 

UDP的特点 

(1)UDP是无连接的,即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
(2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表
(3)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,保留这些报文的边界

        这就是说,应用层交给UDP多长的报文,UDP 就照样发送,即一次发送一个报文

(4) UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。

        很多的实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP 正好适合这种要求。
(5)UDP支持一对一、一对多、多对一和多对多的交互通信。
(6)UDP的首部开销小,只有8个字节,比 TCP的20个字节的首部要短。

UDP的传输特点

        主机H的操作系统为这三个进程分别指派了端口。

        应用层和运输层之间的小方框代表端口。在端口小方框中间还画有队列,表示端口具有缓存的功能,可以把收到的数据暂时存储一下

        在两个运输层之间有一条虚线,表示在两个运输层之间可以进行通信,而不是一条连接。但这种通信是不可靠的通信,即所发送的报文在传输过程中有可能丢失,同时也不保证报文都能按照发送的先后顺序到达终点。

         图上画出了多对一的通信(a→x, b→x)。如果改成a→x,a→y,则是一对多的情况了。

UDP的复用分用 

         主机H1中的3个应用进程,把用户数据通过各自的端口传送到了运输层后,就共用一个网络层协议,把收到的UDP用户数据报组装成不同的IP数据报,发送到互联网。这就是UDP的复用功能。

        主机H2的网络层收到3个IP数据报后,提取出数据部分(即 UDP用户数据报),然后根据其首部中的目的端口号,分别传送到相应的端口,以便上层的应用进程到端口读取数据。这就是UDP的分用功能。

UDP的首部格式 

        用户数据报UDP有两个字段:数据字段首部字段

        首部字段只有8个字节,由4个字段组成,每个字段的长度都是2字节


各字段意义如下:

(1)源端口
       
 源端口号。在需要对方回信时选用。不需要时可用全0。
(2)目的端口
        
目的端口号。这在终点交付报文时必须使用
(3)长度
        UDP用户数据报的长度,其最小值是8(仅有首部)。
(4)检验和
        检测UDP用户数据报在传输中是否有错。有错就丢弃

 


        伪首部:UDP用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在UDP用户数据报之前增加12个字节的伪首部。

        所谓“伪首部”是因为这种伪首部并不是UDP用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP用户数据报前面,得到一个临时的UDP用户数据报。

        检验和就是按照这个临时的UDP用户数据报来计算的,伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。

接收方UDP报文的端口号不正确 

        如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议 ICMP 发送“端口不可达”差错报文给发送方。

     ICMP差错报文了解

UDP计算检验和 

 

二进制反码求和末尾进位会回卷

传输控制协议TCP 

 TCP的主要特点
  

        (1) TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立TCP 连接。在传送数据完毕后,必须释放已经建立的TCP连接
        (2)每一条TCP连接只能有两个端点(endpoint),每一条 TCP连接只能定点对点的(一对一)。
        (3)TCP提供可靠交付的服务,通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
        (4) TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

        在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去;

        在接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
        (5)面向字节流。TCP中的“流”(stream)指的是流入到进程或从进程中流出的字节序列

        “面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等)但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP并不知道所传送的字节流的含义。

        TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。

        但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。当然,接收方的应用程序必须有能力识别收到的字节流,把它还原成有意义的应用层数据。

        (例如,发送方应用程序交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。

TCP传输报文的特点 

TCP与UDP传输报文的比较

        TCP和 UDP 在发送报文时所采用的方式完全不同。TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度,来决定一个报文段应包含多少字节。(UDP发送报文长度应用进程给出的)。

        如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分为短一些的数据块再传送。如果应用进程一次只发来一个字节,TCP也可以等待积累足够多的字节后再构成报文段发送出去。

TCP的连接 

        TCP把连接作为最基本的抽象。TCP的许多特性都与TCP是面向连接的这个基本特性有关。 

        每一条TCP连接有两个端点,TCP连接的端点叫作套接字(socket)或插口。 

套接字socket的表示方式 

TCP连接的表示方式 

可靠传输的工作原理 

详情请看数据链路层的可靠运输

TCP报文段的首部格式 

        TCP虽然是面向字节流的,但 TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而 TCP的全部功能都体现在它首部中各字段的作用。 

首部部分字段

        (1)源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号。

        (2)序号:占4字节。序号范围是[0,2^{32}-1],共2^{32}(即4294 967296)个序号。序号增加到2^{32}-1]后,下一个序号就又回到0。

        在一个 TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。

        例如,一报文段的序号字段值是301,而携带的数据共有100字节。这就表明:本报文段的数据的第一个字节的序号是301,最后一个子节的序号是400。

        显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文段的序号字段值应为401。

        这个字段的名称也叫作“报文段序号”。


        (3)确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。

        例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。

        于是B在发送给A的确认报文段中把确认号置为701。请注意,现在的确认号不是501,也不是700,而是701。



        (4)数据偏移:占4位,它指出 TCP报文段的数据起始处距离 TCP报文段的起始处有多远。这个字段实际上是指出 TCP报文段的首部长度。

        因此数据偏移的最大值是60字节,这也是TCP首部的最大长度(即选项长度不能超过40字节)。


        (5)保留:占6位,保留为今后使用,但目前应置为0。

        (6)紧急 URG (URGent):当URG=1时,表明紧急指针字段有效——它告诉系统此报
文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序传送

        当URG置1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP 就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中紧急指针(Urgent Pointer)字段配合使用。

        例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行。

        因此用户从键盘发出中断命令(Control-C)。如果不使用紧急数据,那么这两个字符将存储在接收TCP的缓存末尾。只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。这样做就浪费了许多时间。

        (7)确认ACK:仅当 ACK =1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。


        (8)推送 PSH (PuSH):当两个应用进程进行交互式的通信时,有时在一端的应用进程
希望在键入一个命令后立即就能够收到对方的响应。

        在这种情况下,TCP 就可以使用推送(push)操作。这时,发送方TCP把PSH置为1,并立即创建一个报文段发送出去。

        接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。


        (9)复位RST (ReSeT):当RST =1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

        将RST置为1,还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。


        (10)同步SYN(SYNchronization):在连接建立时用来同步序号。

        当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK =1。

        因此,SYN置为1就表示这是一个连接请求或连接接受报文。


        (11)终止FIN (FINish):用来释放一个连接。

        当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

        (12)窗口:占2字节。窗口值是[0,2^{16}-1]之间的整数。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。

        窗口值告诉对方:从本报文确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的:

  • 例如,发送了一个报文段,其确认号是701,窗口字段是1000。
    • 这就是告诉对方:“从701号算起,我(即发送此报文段的一方)的接收缓存空间还可接收1000个字节数据(字节序号是701~1700),你在给我发送数据时,必须考虑到我的接收缓存容量。”

        总之,窗口值作为接收方让发送方设置其发送窗口的依据。


        (13)检验和:占2字节。检验和字段检验的范围包括首部和数据这两部分。
        和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部
,伪首部的格式与UDP用户数据报的伪首部一样。

        但应把伪首部第4个字段中的17改为6(TCP 的协议号是6),把第5字段中的UDP长度改为TCP长度。

        接收方收到此报文段后,仍要加上这个伪首部来计算检验和。若使用IPv6,则相应的伪首部也要改变。


        (14)紧急指针:占2字节,紧急指针仅在URG =1时才有意义,它指出本报文段中
的紧急数据的字节数(紧急数据结束后就是普通数据)。

        因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。


        (15)选项:长度可变,最长可达40字节。当没有使用“选项”时,TCP的首部长度
是20字节。选项功能有如下:


        (16)填充:最后的填充字段仅仅是为了使整个TCP首部长度是4字节的整数倍。

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

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

相关文章

【最短路径算法】

每日格言:想去的地方很遥远,我们也只能自己走 前言 最短路径算法是一类用于解决图中两点间寻找最短路径问题的算法。这里我们只具体介绍利用matlab中的函数实现,迪克斯特拉算法和弗洛伊德算法大家有兴趣可上网了解一下。这类算法在多个领域都…

安全稳定的镭速高端制造业文件传输摆渡系统

在现代制造业的高速发展中,高端制造领域尤为依赖高效的文件传输系统,这类系统不仅促进了企业内部的合作,还加强了与合作伙伴的紧密联系,成为推动创新和决策的关键因素。镭速文件传输系统正是为了满足这一需求而设计,其…

KamaCoder 102. 沉没孤岛

题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿…

如何做好小程序评论优化

用户在决定要不要用一个小程序时,往往会参考其他用户的评分和评论。因此小程序评论优化是提升用户互动和口碑传播的关键环节。以下是一些针对小程序评论优化的具体策略: 1. 优化评论区设计 确保用户能够轻松找到并访问评论区。可以在小程序的显眼位置设…

netassist TCP测试工具使用

写在前面 有时工作中我们编写一些tcp相关的程序,而netassist就是这样一款辅助我们进行TCP功能测试的工具,你可以从这里下载。 1:使用 我们需要一个server程序,可以参考这篇文章,启动server后,就可以使用…

集美大学携手和鲸与龙船,深化“航运+AI”学科建设,赋能航海人才培养

“闽国扬帆去,蟾蜍亏复圆。” ——唐贾岛 《忆江上吴处士》 人类探索海洋的脚步从未停止。昔日,闽地的先民眺望浩瀚大海,叹其无垠难测;如今,海洋科学与人工智能的交叉融合正引领着新一轮的探索浪潮,成为不…

智能学习系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的智能学习系统应运而生,各行各业相继进入信息管理时…

高性价比运动耳机有哪些?五大高性价比运动耳机分享

对于很多人来说,音乐都是日常生活中不可或缺的一部分,在路上随处可见戴着耳机的人打发无聊的时间。相对于传统的入耳式耳机来说,市面上涌现了一批开放式耳机,它们凭借其开放不塞耳的特性,能够适应多种场景,…

telegraf、influxdb、grafana安装配置

InfluxDB(时序数据库),常用的一种使用场景:监控数据统计。 grafana,用作监控页面的前端展示。 telegraf,数据采集器。 一、Influxdb安装及配置 下载:wget https://dl.influxdata.com/influx…

RFID无线测温系统,守护电厂安全运行的关键力量

一、RFID无线测温系统概述 RFID无线测温系统主要由传感器、数据传输装置和监控中心三部分组成。 传感器是系统的感知前端,通常采用RFID技术,能够实时感知温度变化。例如,在一些应用中,RFID传感器可以安装在电力设备的关键部位&a…

【Python快速入门和实践014】Python常用脚本-批量重命名指定文件夹下文件名字

一、功能讲解 这段代码是一个用于批量重命名文件的Python脚本。它的主要功能是在文件名前添加一定数量的前导零,使得所有文件名的长度保持一致。这对于管理大量文件,特别是当文件名需要按照特定顺序排列时非常有用。 导入必要的模块: os: 用于…

SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器

SiLM5932SHO系列是一款单通道隔离驱动器,提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V,输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压锁定 (UVLO) 保…

golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息

golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息 package mainimport ("fmt""regexp""github.com/StackExchange/wmi""github.com/shirou/gopsutil/v3/disk" )// 定义 WMI 类结构体 type Win32_LogicalDiskToPartition struct {Ant…

Alleviating Hallucination in Multi-Modal Large Language Models

OPERA: Alleviating Hallucination in Multi-Modal Large Language Models via Over-Trust Penalty and Retrospection-Allocation 文章汇总 当前的问题发现 如图,在模型生成幻觉内容时,最后一层的 Self-Attention 权重大概率会在幻觉部分之前呈现出明…

【el-table】横向滚动条加粗后,滚动到固定列下被遮挡,已解决

横向滚动条按要求加粗后,遇到的问题:列表的操作列是固定在最右侧的,当滚动条滑动到最右侧的时候,滚动条被遮挡了 我尝试了几种方法都不行,比如找到.el-table__fixed-right .el-table__fixed-footer-wrapper &#xff…

LoadRunner12添加集合点

集合点的含义和意义: 集合点用于保证真正的并发。当脚本运行到集合点函数时,将停止运行并等待其允许运行的条件(即集合点策 略),达到后才释放集合点开始运行。用来分析软件性能瓶颈。 一般将集合点放在开始事务代码之前。 通常来说集合点不需…

Vue2 axios

1.安装引入 axios npm i axios 2.配置代理 1.配置代理(方式一) module.exports {devServer: {proxy: http://localhost:5000} } 1.发送ajax请求 getStudent(){axios.get(http://localhost:8080/students).then(res>{console.log(请求成功了,res.data);},error>{co…

大咖公开课 | AI自动化应用开发,让创意与效率并驾齐驱!

在这个日新月异的时代,人工智能(AI)与自动化技术的融合正以前所未有的速度重塑着各行各业。你是否梦想过,在信息的海洋中自动筛选出精华,用创意点亮每一篇内容,同时让繁琐的工作流程变得轻松高效&#xff1…

丰收季遇科技之光:北斗卫星导航引领现代农业新篇章

在这个金风送爽、硕果累累的丰收时节,广袤的田野上洋溢着农民们欢声笑语,每一粒饱满的果实都是大自然与辛勤耕耘者的共同馈赠。而在这片希望的田野上,一项科技革命的浪潮正悄然改变着传统农业的面貌——北斗卫星导航系统,正以它精…

Win10电脑怎么开启远程桌面?

在工作中,远程连接是一种常见的操作需求,而在Windows系统中提供远程连接功能。然而,Windows自带远程控制功能需要电脑设置允许远程连接,才能进行远程控制。那么,Win10如何设置允许远程连接?Win10开启远程桌…