【计算机网络】——传输层

2023-09-19 20:29:56

//图片取自王道,仅做交流学习

一、传输层提供的服务

物理层、数据链路层、网络层是通信子网。

传输层:它属于面向通信部分的最高层,同时也是用户功能的最低层

为应用层提供通信服务使用网络层的服务

网络层提供主机之间的逻辑通信。

1、传输层的功能:


1.传输层提供进程和进程之间的逻辑通信(即端到端通信)。网络层提供的主机到主机之间的通信

2.复用和分用

复用:发送方不同的应用进程都可以使用同一个传输层协议传输数据;

分用:接收方的传输层在剥去报文的首部之后能正确的把这些数据交付到目的进程。


3.传输层对收到的报文进行差错检测


4.传输层的两种协议

面向连接的TCP 无连接的UDP

面向连接的传输控制协议TCP

尽管下面的网络是不可靠的(只提供最大努力的服务),但是这种逻辑信道就相当于一条全双工的可靠信道。

传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。可靠,面向连接,时延大,适用于大文件。



无连接的用户数据报协议UDP
传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
不可靠,无连接,时延小,适用于小文件。

逻辑信道不可靠

2、传输层的寻址与端口

端口

能让应用层各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文中的数据向上通过端口交付给应用层的进程。

它 是传输层的SAP,它在传输层的作用类似于IP地址在网络层,MAC地址在数据链路层的作用。只不过IP地址和MAC地址标识主机,而端口标识的是主机中的应用进程。

端口是传输层的SAP(服务访问点 Service Access Point)

端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的。

端口号长度为16bit  (2个字节),能表示65536个不同的端口号。

登记端口,比如Tomcat 8080, Mysql:3306,  redis 6379,RabbitMQ 5672

在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。

套接字socket= (主机IP地址,端口号)

3、无连接服务与面向连接服务

面向连接的服务就是在通信双方进行通信之前,必须先建立连接,整个连接的情况一直被实时监控和管理。通信结束之后,应该释放这个链接。

无服务链接是指两个实体之间的通信不需要先建立好连接,需要通信的时,直接将信号发送到"网络”中,让该信息的传递在网上尽力而为的往目的地传送。

TCP是面向连接的,向上提供了一条逻辑上全双工的可靠的信道,适合可靠性要求较高的场景,如FTP,HTTP,TELNET。TCP 提供确认、流量控制、计时器及连接管理等,开销较大

UDP是无连接的非可靠传输协议,简单,速度快,实时性好。适合小文件传输 TFTP,DNS,SNMP和实时传输协议RTP都是基于DNS。

二、UDP

1、UDP数据报

UDP只在IP数据报服务之上增加了很少功能:复用分用 差错检测功能

UDP的主要特点:

1.UDP是无连接的,减少开销和发送数据之前的时延。

2.UDP使用最大努力交付,即不保证可靠交付。

3.UDP是面向报文的,适合一次性传输少量数据的网络应用。

4、UDP无拥塞控制,适合很多实时应用。

5.UDP首部开销小,8B,TCP 20B。

6、UDP支持一对一,一对多,多对一,多对多的交互通信。

应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整报文。

UDP报文格式

UDP报文=UDP首部 + 用户数据。

UDP首部4个字段,共8个字节,每个字节的长度都是2B。

1)源端口。源端口号。在需要对方回信时选用,不需要时可用全 0。
2) 目的端口。目的端口号。这在终点交付报文时必须使用到。

3)长度。UDP 数据报的长度(包括首部和数据),其最小值是 8(仅有首部)。

4)校验和。检测 UDP 数据报在传输中是否有错。有错就丢弃。该字段是可选的,当源主机
不想计算校验和时,则直接令该字段为全 0。

伪首部只有在计算检验和时才出现,不向下传送也不向上递交
17:封装UDP报文的IP数据报首部协议字段是17。
UDP长度:UDP首部8B   +   数据部分长度(不包括伪首部)。

当传输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口上交给应用进程,如图。

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

2、UDP校验

//待详细补充

二、TCP

UDP的报文长度由发送应用进程决定,而TCP的报文长度由接收方给出的窗口值和当前网络拥塞成都决定的。

1、协议特点

1.TCP是面向连接(虚连接) 的传输层协议。打call

2.每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。

3.TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重

4.TCP提供全双工通信。

发送缓存 准备发送的数据&已发送但尚未收到确认的数据

接收缓存 按序到达但尚未被接受应用程序读取的数据&不按序到达的数据

5.TCP面向字节流  (流:流入到进程或从进程流出的字节序列。)

TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流

2、TCP报文段

TCP的数据单元称为 报文段,TCP报文段既可以运载数据,也可以建立连接、释放连接、应答。(根据控制字内容来决定)

TCP报文 = 首部  + 数据部分

整个TCP报文段作为IP数据报的数据部分封装在IP数据报中。

其首部前20B是固定的,TCP首部 最短为20B,后面有4N个字节是根据需要增加的选项,长度为4B的整数倍。

即:

TCP头 =固定20B + N*4B选项。

UDP头 =8B

TCP首部格式

1)源端口和目的端口,各站2B。端口是传输层与应用层的服务接口,传输层的复用和分用都需要通过端口来实现。

2)序号: 占4B,范围  0 ~(2^32 )-1  在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据第一个字节的序号。(TCP是面向字节流的)

3) 确认号: 4B  期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。

4) 数据偏移(首部长度): TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是4B。 由于数据偏移 占4bit,而4个bit位所能表示的最大数字是15,所以首部长度最大为 15*4B =60B

5)保留  6位。

6)6个控制位


紧急位URG: URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。


确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1


推送位PSH:PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。


复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。


同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文。


终止位FIN: FIN=1时,表明此报文段发送方数据已发完,要求释放连接。

7)窗口:占2B 范围0~2^16 -1,它指出现在允许对方发送的数据量,接收方数据缓存空间是有限的,因此窗口值作为接收方让发送方设置其发送窗口的一句。(大哥你慢点)

8)校验和。占2B。校验和字段检验的范围包括首部和数据两部分。在计算校验和时和UDP一样,要在TCP报文段前面加上12B的伪首部(只需要将UDP伪首部协议字段的17 改为 6,UDP长度字段改为TCP长度字段,其他和UDP一样)

9) 选项: 长度可变 TCP最初只规定一种选项, 即最大报文段长度(MSS)。MSS 是TCP报文段中的数据字段的最大长度(注意是数据字段)。

10)填充:   为了使得整个首部长度是4B的倍数

3、TCP连接管理

TCP连接的三个过程:

建立连接 ----- 数据传送 ----连接释放

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。

TCP的链接:三次握手

假设运行在一台主机(客户)上的一个进程想与另一台主机(服务器)上的一个进程建立一条连接,客户应用进程首先通知客户TCP,他想建立一个与服务器上某个进程之间的连接,客户中的TCP会用以下步骤与服务器中的TCP建立一条TCP连接:

ROUND 1:
客户端发送连接请求报文段,无应用层数据,客户端进入 SYN-SENT状态(同步已发送)

SYN=1,seq=x(随机)


ROUND 2:
服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。

TCP服务器进入SYN-RECVD 状态(同步收到)


SYN=1,ACK=1,seg=y(随机),ack=x+1

ROUND 3:
客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。

TCP客户端进程进入  ESTABLISHED状态(已建立)
SYN=0,ACK=1,seg=x+1,ack=y+1

SYN洪泛攻击发生在OI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。

        SYN cookie

TCP的链接释放:四次挥手

参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结束后,主机中的“资源”(缓存和变量)将被释放。

ROUND 1:
客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。

FIN=1,seq=u


ROUND 2:

服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了一一半关闭状态。

服务器进入CLOSS-WAIT 等待关闭状态

ACK=1,seq=v,ack=u+1


ROUND 3:
服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。(服务器进入LAST-ACK 最后确认状态)
FIN=1,ACK=1,seg=w,ack=u+1


ROUND 4:
客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命) 后,连接彻底关闭。

ACK=1,seq=u+1,ack=w+1

总结:
1)建立连接 3步

1、SYN =1 seq=x

2、SYN=1,ACK=1 , seq =y,  ack =x+1

3、ACK=1, seq=x+1,ack=y+1

3) 释放连接

1、FIN=1,seq=u

2、ACK=1,seq=v,ack=u+1

3、FIN=1, ACK=1,seq =w,ack =u+1

4、ACK=1,seq=u+1 ack =w+1

4、TCP可靠传输


网络层提供尽最大努力交付,不可靠传输,想要保证可靠传输,还是得依靠传输层

使用TCP实现可靠传输

所谓可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。

TCP实现可靠传输机制的手段
1、校验 ,

和UDP一样,增加了伪首部

2、序号

TCP把数据视为一个无结构但有序的字节流,序号建立在传送的字节流上,而不是报文段。

TCP 连接传送的数据流中的每个字节都编上一个序号。序号字段的值是指本报文段所发送的数据的第一个字节的序号。如图 5.9 所示,假设A 和图5.9 A的发送缓存区中的数据划分成TCP段之间建立了一条 TCP 连接,A 的发送缓存区中共有 10B,序号从0开始标号,第一个报文包含第 0~2 个字节,则该 TCP 报文段的号是0,第二个报文段的序号是 3。

3、确认

TCP 首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。在图5.9 中如果接收方 B 已收到第一个报文段,此时 B 希望收到的下一个报文段的数据是从第3 个字节开始的,那么B 发送给A 的报文中的确认号字段应为 3。

发送方缓存区会继续存储那些已发送但未收到确认的报文段,以便在需要时重传。TCP 默认使用累积确认,即 TCP 只确认数据流中至第一个丢失字节为止的字节。例如,图5.9 中,接收方B收到了A发送的包含字节0~2及字节6~7的报文段。由于某种原因,B还未收到字节3~5的报文段,此时 B 仍在等待字节 3(和其后面的字节),因此B到A的下一个文段将确认号字段置为3。

4、重传

有两种事件会导致 TCP 对报文段进行重传:超时和冗余 ACK

1)超时
TCP 每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但未收到确认时,就要重传这一报文段。

由于 TCP 的下层是一个互联网环境, IP数据报所选择的路由变化很大,因而传输层的往时延的方差也很大。为了计算超时计时器的重传时间,TCP 采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差称为报文段的往返时间(Round-TriTime,RTT)TCP 保留了 RTT 的一个加权平均往返时间 RTT,它会随新测量 RTT 样本值的化而变化。显然,超时计时器设置的超时重传时间(Retransmission Time-Out,RTO)应略大RTTs,但也不能大太多,否则当报文段丢失时,TCP 不能很快重传,导致数据传输时延大。

2)冗余ACK (冗余确认)


每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。发送方已发送1,2,3,4,5报文段
接收方收到1,返回给1的确认 (确认号为2的第一个字节)

接收方收到3,仍返回给1的确认(确认号为2的第一个字节)

接收方收到4,仍返给1的确认 (确认号为2的第一个字节)

接收方收到5,仍返回给1的确认 (确认号为2的第一个字节)

发送方收到3个对于报文段1的冗余ACK 认为2报文段丢失,重传2号报文段 快速重传

5、TCP流量控制

TCP 提供流量控制服务来消除发送方(发送速率太快)使接收方缓区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)。.TCP 提供一种基于滑动窗口协议的流量控制机制。

接收窗口 rwnd 与拥塞窗口 cwnd

在通信过程中,接收方根据自已接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口 rwnd,即调整 TCP 报文段首部中的“窗口”字段值,来限制发送方向网络注入报文的速率。同时,发送方根据其对当前网络拥塞程度的估计而确定的窗口值,这称为拥塞窗口cwnd,其大小与网络的带宽和时延密切相关。

即:

发送窗口 =min[ rwnd, cwnd] (单位字节)

【例】:

后续补充

传输层和数据链路层的流量控制的区别是:

传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。

另外,数据链路层的滑动窗口协议的窗口大小不能动时动态变化,传输层的则可以动态变化。

6、TCP拥塞控制

//这个后面补充详解

概念:

与流量控制的区别:

方案:

1、慢开始和拥塞避免

2、快重传和快恢复

更多推荐

基于vue的黑马前端项目小兔鲜

目录项目学习初始化项目建立项目引入elementpluselementPlus主题设置配置axios路由引入静态资源自动导入scss变量Layout页组件结构快速搭建字体图标渲染一级导航渲染吸顶导航交互实现Pinia优化重复请求Home页分类实现banner轮播图新鲜好物实现人气推荐实现懒加载指令实现产品列表实现Goo

正确设置PyTorch训练时使用的GPU资源

背景:最近在使用HuggingFace的transformersapi来进行预训练大模型的微调,机器是8卡的GPU,当我调用trainer.train()之后,发现8个GPU都被使用了,因为这个机器上面还有其他人跑的模型,当我进行训练的时候,GPU的使用率就接近了100%,这样导致其他人的模型响应速度特别的慢,因为他们

微信小程序如何刷新当前页面

微信小程序是一种快速发展的移动应用程序开发平台,它提供了许多功能和特性,使开发者能够轻松创建功能丰富的小程序。在开发小程序时,有时我们需要刷新当前页面来更新数据或重新加载页面内容。本文将解释如何在微信小程序中刷新当前页面的代码。引言微信小程序的流行使得越来越多的开发者将其作为构建移动应用的首选平台。然而,与传统的网页开

快速了解Apipost

随着数字化转型的加速,API(应用程序接口)已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中,API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台,旨在解决这些问题,提高API开发效率和质量。Apipost提供API文档管理功能,让后端开发人员可以在开发完接口调试的

cookie信息无法获取问题研究

背景在oneapi这个前后端都有的开源项目中,我想接入chatnextweb到oneapi的后端。由于需要二开chatnextweb,添加登录注册功能,考虑到java后端的性能问题和内存占用,决定不重启写个服务,而是将登录注册接入到oneapi的登录注册api,没错,和oneapi的前端公用一套登录注册熬了个大夜后,终

GLTF编辑器:在线模型材质编辑工具

GLTF编辑器是一个功能强大、易于使用的在线3D模型编辑和查看工具,它支持多种格式的3D模型导入并将模型导出为GLB格式,除了可以对3D模型进行基本属性的修改之外,还支持对模型原点重置以及模型材质纹理修改。对于3D开发者和设计师来说,GLTF编辑器是一个非常有用的工具,可以帮助他们更方便地处理3D模型数据。1、首先介绍

VR全景技术在教育中的应用:VR教学的“因材施教”

随着科技的不断进步和发展,VR全景技术在教育领域的应用,给传统教育模式带来了新的变革和机遇,同时也促进了教育的创新和进步。VR教学模式可以打破传统教育的限制,通过模拟各种场景,让学生身临其境地学习多样化知识,感受不同国家的风土人情、拓展自身视野,这种具备沉浸感的学习体验可以很好的激发学生的学习兴趣和动力。VR教学可以构

vr飞机驾驶舱模拟流程3D仿真演示加大航飞安全法码

众所周知,航空航天飞行是一项耗资大、变量参数很多、非常复杂的系统工程,因此可利用虚拟仿真技术经济、安全及可重复性等特点,进行飞行任务或操作的模拟,以代替某些费时、费力、费钱的真实试验或者真实试验无法开展的场合,从而获得提高航空航天员工作效率或航空航天器系统可靠性等的设计对策。飞机飞行操作要求严、风险大且成本高,因此在真

windows RocketMQ与可视化监控平台安装

windowsRocketMQ与可视化监控平台安装安装日期2023.09.21最新版RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,搭建RocketMQ需要先配置JAVA环境变量,需要有JAVA_HOME。下载安装包进入官网选择需要的版本下载安装包(以下以5.1.3为例)。官网下载地址:官网下载编译

中秋节听夜曲,Android OpenGL 呈现周董专属的玉兔主题音乐播放器

概述前几天发现QQ音乐有个好玩的功能,为用户提供了多种播放器主题,其中原神的主题让我眼前一亮:当然,诸如换肤、主题类的功能已经屡见不鲜,但这类沉浸式播放器的听歌体验确实不错。见猎心喜,正好中秋马上就到,我也尝试整个中秋主题音乐播放器试试水。整体思路有2点:首先是技术方面,纯粹的ImageView图层堆砌来实现,渲染效率

05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别

在前面的一些章节中,我们已经讲如何准备打标签的素材、如何制作标签、如何训练以及得到我们最终需要的用于YOLO目标识别的模型。那么现在我们就要正式开始,利用我们训练得到的best.pt,这个模型文件来对图片视频进行识别。1、基本思路公安交管场景中,我们经常会遇到需要对摄像头拍到的视频中的目标进行识别,比如识别识别非机动车

热文推荐