计算机网络(五)传输层

传输层

从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,属于面向通信部分的最高层,同时也是用户功能中的最低层

传输层功能

  1. 传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别区别是,网络层提供的是主机之间的逻辑通信
  2. 传输层可以实现多路复用和多路分解的功能,使得多个应用程序可以共享同一个网络连接。它通过使用端口号来区分不同的应用程序,并将数据传输到相应的应用程序中
  3. 传输层负责将上层应用层传输的数据分段,并在目标主机上将这些数据段重新组装成完整的数据。这个过程称为分段和重组
  4. 传输层可以对传输过程中可能出现的错误进行检测和纠正,以确保数据的完整性和准确性。它通过使用校验和等技术来检测传输过程中的错误,并采取相应的措施进行纠正

传输层的端口

端口的作用

端口能让应用层的各种应用进程将其数据通过端口向下交付给传输层

传输层的SAP(Service Access Point)是端口,网络层的SAP是IP地址,数据链路层的SAP是MAC地址

在协议栈层间的抽象的协议端口是软件端口,它与路由器或交换机上的硬件端口是完全不同的概念

硬件端口是不同硬件设备进行交互的接口,软件端口则是应用层的各种协议进程与传输实体进行层间交互的一种地址,传输层使用的是软件端口

端口号

端口号是一种用于标识计算机网络中应用程序或服务的数字标识

端口号范围从0到65535,其中0到1023是被保留的系统端口号,用于一些常见的服务,而1024到65535是动态或私有端口号,用于分配给应用程序或服务

套接字

套接字(Socket)是计算机网络中用于实现网络通信的一种机制,它是传输层和应用层之间的接口。套接字允许应用程序通过网络发送和接收数据,并提供了一种通用的编程接口,使得应用程序可以独立于底层网络协议来实现网络通信

所谓套接字,实际上是一个通信端点

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

无连接服务

无连接服务是指在通信双方之间发送数据时,不需要事先建立连接的通信方式。每个数据包都是独立发送的,发送者不需要等待接收者的响应,也不需要维护连接状态

面向连接服务

面向连接服务是指在通信双方之间发送数据之前,需要先建立连接并维护连接状态。在连接建立之后,通信双方可以进行可靠的、面向流的数据传输,并且可以保证数据的顺序和完整性

UDP

概述

  1. 无连接性:UDP是一种无连接的协议,通信双方之间不需要建立连接就可以直接发送数据。每个UDP数据包都是独立的,发送者不需要等待接收者的确认或响应
  2. 不可靠性:UDP不保证数据的可靠传输,数据包可能会丢失、重复、延迟或乱序到达。UDP不提供重传机制、流量控制或拥塞控制,因此不能保证数据的完整性和顺序性
  3. 简单性:UDP协议相比于TCP协议更加简单,因为它不需要建立连接、维护连接状态或进行流量控制。UDP的头部信息也相对较小,只包含源端口号、目标端口号、长度和校验和等字段
  4. 高效性:由于不需要进行连接的建立和维护,以及不需要进行重传和流量控制,UDP协议的传输效率相对较高。它适用于一些对传输延迟要求较高的实时应用,如音视频通信、在线游戏等

UDP的首部格式

 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|     源端口号      |   目的端口号    |
+--------+--------+--------+--------+
|       长度        |     校验和      |
+--------+--------+--------+--------+
|                                     |
|              数据(可选)             |
|                                     |
+--------+--------+--------+--------+

  1. 源端口号(16比特):指示数据报的发送者端口号

  2. 目的端口号(16比特):指示数据报的接收者端口号

  3. 长度(16比特):指示UDP数据报(包括首部和数据)的总长度,以字节为单位。长度字段的最小值为8字节(UDP首部的长度),最大值为65535字节

  4. 校验和(16比特):用于对UDP数据报进行校验的校验和字段。校验和的计算方式涉及UDP首部和数据报的内容

  5. 数据(可选):包含实际的应用数据。数据字段的长度可以为0,表示UDP数据报不携带任何应用数据

UDP校验

UDP校验和是一种简单的差错检测机制,用于检测UDP数据报在传输过程中是否发生了错误或损坏。UDP校验和的计算方法基于数据报的所有内容,包括UDP首部和数据字段

过程

  1. 将UDP首部和数据字段划分为若干个16比特的字(如果数据字段的长度不是16比特的整数倍,则在末尾补零)

  2. 将这些16比特的字两两相加,得到一个16比特的中间结果

  3. 将所有的16比特的中间结果相加,直到得到一个32比特的累加和

  4. 取累加和的反码作为校验和

在接收端,接收到UDP数据报后会重新计算校验和,并与接收到的校验和进行比较,以确定数据报是否损坏或错误。如果校验和匹配,则认为数据报未损坏;如果校验和不匹配,则认为数据报可能已损坏,并丢弃该数据报

TCP

TCP报文段

在这里插入图片描述

  1. 源端口号(16比特):发送端口号,表示数据发送方的端口号

  2. 目的端口号(16比特):接收端口号,表示数据接收方的端口号

  3. 序列号(32比特):用于标识数据流中的每个字节的序号,用于实现数据的顺序传输和可靠传输

  4. 确认号(32比特):用于确认接收到的数据字节的序号,表示期望接收的下一个数据字节的序号

  5. 数据偏移(4比特):指示TCP首部的长度,以32比特字为单位,用于指示TCP报文段的首部长度

  6. 保留(6比特):保留字段,暂时没有使用,用于未来扩展

  7. 控制位(6比特):包含了多个控制标志位,用于控制TCP的各种行为,如SYN、ACK、FIN、RST等

  8. 窗口大小(16比特):用于流量控制,表示发送方期望接收方发送的数据量

  9. 校验和(16比特):用于对TCP首部和数据进行校验的校验和字段

  10. 紧急指针(16比特):用于指示紧急数据的位置

  11. 选项(可选):用于指定一些额外的控制选项,如最大报文段长度、时间戳等

  12. 数据(可选):包含了应用层的数据,是TCP传输的实际数据内容

TCP连接管理

TCP连接

TCP是面向连接的协议,因此每个TCP连接有三个阶段:连接建立、数据传送、连接释放

TCP把连接作为最基本的抽象,每条TCP连接有两个端点,TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口,TCP连接的端口称为套接字(socket),端口拼接IP地址构成套接字

在这里插入图片描述

TCP连接的建立采用客户/服务器方式。主动发起连接建立的应用进程称为客户机(Client),而被动等待连接建立的应用进程称为服务器(Server)

过程

  1. 客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序号seq = x(连接请求报文不携带数据,但要消耗一个序号)
  2. 服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发会确认,并位该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值位x + 1,并且服务器随机产生起始序号seq = y (确认报文不携带数据,但也要消耗一个序号) 确认报文段同意不包含应用层数据
  3. 当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK标志位置1,序号字段为 x + 1,确认号字段 ack = y + 1,该报文段可以携带数据,若不携带数据则不消耗序号
TCP连接的释放

在这里插入图片描述

TCP连接的释放是指在通信双方完成数据传输后,关闭TCP连接的过程。TCP连接的释放过程通常分为四个步骤,即TCP的四次挥手(Four-way Handshake)

  1. 客户端发送FIN报文段:当客户端完成数据传输后,它会向服务端发送一个FIN(结束)报文段,表示客户端不再发送数据,并且请求关闭连接
  2. 服务端发送ACK报文段:服务端接收到客户端的FIN报文段后,会向客户端发送一个ACK(确认)报文段,确认收到了客户端的FIN报文段,但是表示服务端仍然可以发送数据
  3. 服务端发送FIN报文段:当服务端也完成数据传输后,它会向客户端发送一个FIN报文段,表示服务端不再发送数据,并且请求关闭连接
  4. 客户端发送ACK报文段:客户端接收到服务端的FIN报文段后,会向服务端发送一个ACK报文段,确认收到了服务端的FIN报文段,表示双方都准备好关闭连接
服务器:
1. 创建服务器套接字 server_socket
2. 将服务器套接字 server_socket 绑定到指定的 IP 地址和端口
3. 开始监听传入的连接请求(listen)
4. 当有连接请求到达时:
     1. 接受连接请求并创建一个新的套接字 client_socket
     2. 从客户端接收数据(recv)
     3. 处理接收到的数据
     4. 向客户端发送响应数据(send)
     5. 关闭 client_socket
5. 关闭服务器套接字 server_socket
客户端:
1. 创建客户端套接字 client_socket
2. 连接到指定的服务器 IP 地址和端口(connect)
3. 向服务器发送数据(send)
4. 接收服务器的响应数据(recv)
5. 处理接收到的数据
6. 关闭客户端套接字 client_socket
TCP可靠传输

TCP(传输控制协议)提供了可靠的数据传输机制,确保数据能够按照正确的顺序、完整地传输到目标主机。TCP的可靠传输主要T通过以下几种机制来实现

  1. 序列号和确认机制:TCP在传输数据时会给每个数据字节分配一个序列号(Sequence Number),用于标识数据流中每个字节的位置。接收端会向发送端发送确认(ACK)报文段,确认收到的最后一个字节的序列号,从而实现对数据的可靠传输
  2. 超时重传机制:TCP在发送数据时会设置一个定时器,等待接收到对应的确认报文段。如果在定时器超时之前没有收到确认报文段,发送端会认为数据丢失或损坏,然后重新发送数据。通过超时重传机制,TCP能够保证数据的可靠传输
  3. 滑动窗口机制:TCP使用滑动窗口机制来进行流量控制和拥塞控制。接收端可以通过发送窗口(Receive Window)来告知发送端自己的可接受数据量,发送端根据接收窗口的大小来调整发送速率。通过滑动窗口机制,TCP能够避免发送方发送过多的数据导致接收方无法及时处理,从而实现流量控制和拥塞控制
    坏,然后重新发送数据。通过超时重传机制,TCP能够保证数据的可靠传输
  4. 滑动窗口机制:TCP使用滑动窗口机制来进行流量控制和拥塞控制。接收端可以通过发送窗口(Receive Window)来告知发送端自己的可接受数据量,发送端根据接收窗口的大小来调整发送速率。通过滑动窗口机制,TCP能够避免发送方发送过多的数据导致接收方无法及时处理,从而实现流量控制和拥塞控制
  5. 重复消除机制:TCP在接收到重复的数据时会进行重复消除,避免重复数据对应用程序造成影响。TCP通过使用序列号和确认号来检测重复的数据,然后丢弃重复的数据,从而确保应用程序只接收到一份正确的数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python进阶编程 --- 2.MySQL、pymysql、PySpark

文章目录 第一章:SQL基础入门1.1 数据库数据库如何存储数据 1.2 数据库和SQL的关系1.3 MySQL版本1.4 命令提示符内使用MySQL1.5 SQL概述1.5.1 SQL语言分类1.5.2 SQL语言特性 1.6 DDL库管理表管理 1.7 DML - 数据操作1.8 DQL - 查询和计算数据1.8.1 基础数据查询1.8.…

【opencv】示例-videowriter_basic.cpp从默认摄像头视频采集和录制

这段代码的功能是使用OpenCV从默认摄像头捕获视频流,并将这些视频流实时写入到一个名为live.avi文件中。视频流以MJPG编码格式被写入,帧率设置为25帧每秒。程序还会通过一个窗口实时显示摄像头捕获的画面,窗口标题为"Live"。用户可…

6.GodotCanvasItem、Node2D及自定义节点

CanvasItem节点 CanvasItem节点,CanvasItem -> Node,所以CanvasItem继承了Node的所有功能Canvas是画布的意思,所以CanvasItem代表了就是可以被绘制的节点,可以设置可视化界面和材质的颜色所有的2D节点和GUI节点都继承于CanvasI…

科技云报道:AI大模型疯长,存储扛住了吗?

科技云报道原创。 AI大模型正在倒逼数字基础设施产业加速升级。 过去一年半,AI大模型标志性的应用相继出现,从ChatGPT到Sora一次次刷新人们的认知。震撼的背后,是大模型参数指数级的增长。 这种数据暴涨的压力,快速传导到了大模…

Vue 指令

Vue根据不同的指令&#xff0c;针对标签实现不同的功能 指令&#xff1a;带有v-前缀的特殊的标签属性 <!-- Vue指令--> <div v-html"str"></div><!-- 普通标签属性 --> <div class"box"></div> 目录 v-html v-sho…

Linux的学习之路:11、地址空间

摘要 本章主要是说一下地址空间&#xff0c;我也只是按照我的理解进行解释&#xff0c;可能说不清楚&#xff0c;欢迎指正 目录 摘要 一、空间布局图 二、代码测试一下 三、进程地址空间 四、测试代码 一、空间布局图 如下方图片可以看出地址空间有几种&#xff0c;这里…

论文笔记:Time Travel in LLMs: Tracing Data Contamination in Large Language Models

iclr 2024 spotlight reviewer评分 688 1 intro 论文认为许多下游任务&#xff08;例如&#xff0c;总结、自然语言推理、文本分类&#xff09;上观察到的LLMs印象深刻的表现可能因数据污染而被夸大 所谓数据污染&#xff0c;即这些下游任务的测试数据出现在LLMs的预训练数据…

java的深入探究JVM之内存结构

前言 Java作为一种平台无关性的语言&#xff0c;其主要依靠于Java虚拟机——JVM&#xff0c;我们写好的代码会被编译成class文件&#xff0c;再由JVM进行加载、解析、执行&#xff0c;而JVM有统一的规范&#xff0c;所以我们不需要像C那样需要程序员自己关注平台&#xff0c;大…

实景三维技术在公共安全领域的应用

随着科技的不断发展&#xff0c;实景三维技术在公共安全领域的应用越来越广泛。实景三维技术是指通过采集现实世界的三维数据&#xff0c;构建出真实的三维场景&#xff0c;进而实现对现实世界的数字化模拟和重建。在公共安全领域&#xff0c;实景三维技术的应用不仅可以提高安…

《云原生安全攻防》-- 云原生攻防矩阵

在本节课程中&#xff0c;我们将开始学习如何从攻击者的角度思考&#xff0c;一起探讨常见的容器和K8s攻击手法&#xff0c;包含以下两个主要内容&#xff1a; 云原生环境的攻击路径: 了解云原生环境的整体攻击流程。 云原生攻防矩阵: 云原生环境攻击路径的全景视图&#xff0…

服务器负载均衡SLB/加密原理

多台服务器提供相同的服务 SLB(server load balancing) 多台服务器对应一个虚拟地址&#xff0c;该地址是防火墙虚拟出来的。 服务器负载均衡功能仅支持IPV4协议 多通道协议仅支持FTP协议

逆向IDA中Dword,数据提取

我们可以看见数据是这样的&#xff0c;第一个是1cc 但是我们shifte就是 这个因为他的数据太大了&#xff0c;导致高位跑后面去了 这个时候&#xff0c;我们右键——convert——dword 这样就可以提取到争取的数据了 比如第一个数据 0x1cc a0xcc b0x1 print(hex((b<<8…

M系Mac关闭SIP

文章目录 M系Mac关闭SIP一&#xff1a;查看SIP状态二&#xff1a;关闭SIP步骤 M系Mac关闭SIP 一&#xff1a;查看SIP状态 1、使用终端 打开终端 输入csrutil status&#xff0c;回车 你会看到以下信息中的一个&#xff0c;指示SIP状态 已打开 System Integrity Protection s…

C#引用外部组件的常用方法

我们在开发程序过程中&#xff0c;时常会使用到第三方组件&#xff0c;比如一些通信、UI组件等。常用的引用方法有下面几种。 01 NuGet引用 NuGet是.NET的一个包管理平台&#xff0c;很多开源组件会通过NuGet进行管理和发布。比如我们常用的S7NetPlus等。 从NuGet中引用组件…

吴恩达llama课程笔记:第四课提示词技术

羊驼Llama是当前最流行的开源大模型&#xff0c;其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型&#xff0c;Llama拥有7B、13B和70B&#xff08;700亿&#xff09;三种版本&#xff0c;满足不同场景和需求。 吴恩…

OpenCV表格图片寻找有效的x、y坐标并删除异常点

需求描述&#xff1a; 对表格图片&#xff0c;识别出表格里的横、纵坐标列表&#xff0c;并剔除异常点 解决方法&#xff1a; 通过opencv的getStructuringElement识别出横、竖线通过bitwise_and取得交点并去除表格线获取x和y的所有可能点&#xff0c;按照相邻点不超过阈值来筛…

6、JVM-JVM调优工具与实战

前置启动程序 事先启动一个web应用程序&#xff0c;用jps查看其进程id&#xff0c;接着用各种jdk自带命令优化应用 Jmap 此命令可以用来查看内存信息&#xff0c;实例个数以及占用内存大小 jmap -histo 14660 #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实…

Python程序设计 二维列表(二)

实验九 二维列表 1. 血压统计 血压的正常范围是 60mmHg<舒张压<90mmHg 90mmHg<收缩压<140mmHg 输入小张测量血压的日期&#xff0c;舒张压和收缩压&#xff0c;存放到列表xy中 将小张血压不正常次数百分比计算并显示出来 将小张血压不正常的日期&#xff0c;舒张…

OneFlow深度学习简介

介绍 OneFlow是一个基于深度学习的开源框架,主要面向机器学习工程师和研究人员。它提供了类似于其他深度学习框架(如TensorFlow和PyTorch)的API,同时具有高性能和高效的特点。OneFlow专注于在大规模数据集和分布式环境下的训练和推理,以及在生产环境中的部署和优化。其设计…

基于Java+SpringBoot+vue+node.js的图书购物商城系统详细设计和实现

基于JavaSpringBootvuenode.js的图书购物商城系统详细设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各…