架构师之路(十六)计算机网络(传输层)

news2024/11/14 19:12:50

前置知识(了解):计算机基础。

作为架构师,我们所设计的系统很少为单机系统,因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。

既然网络层已经能把源主机上发出的数据传送给目的主机,那么为什么还需要加上一个传输层呢?这就需要我们理解主机用户应用层通信的主体,位于两台网络主机中真正的数据通信主体并不是这两台主机,而是两台主机中的各种网络应用进程。同一时间一台主机上可能有多个进程同时运行,这时候就需要为应用程序提供一个标识,那就是端口.而传输层就是为了提供这种端到端的服务而存在的.

端口分为知名端口和动态端口。有些网络服务会使用固定的端口,这类端口称为知名端口,端口号范围为0~1023。比如:FTP,HTTP,Telnet,SNMP服务均使用知名端口。

动态端口范围1024~65535,这些端口号一般不会固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。

运输层是只有主机才有的层次,传输层使用网络层的服务为应用层提供通信服务。传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)

目录

UDP协议

TCP协议

可靠传输

流量控制

拥塞控制

连接管理


UDP协议

UDP是一种面向无连接的传输层协议,传输可靠性没有保证。udp只在ip数据报服务之上增加了很少功能,即复用分用和差错检测功能

udp的主要特点

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

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

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

4.udp无拥塞控制,适合很多实时应用

5.udp首部开销小,8B,tcp20B

主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的网路径叨叨主机B。这样的情况下,先发送的数据包不一定先到达主机B。因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认,排序和流量控制等功能(也就是说UDP报文的到达确认,排序和流量控制是应用程序来确定的)。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。

TCP协议

TCP是一种面向连接的端到端协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。TCP需要依赖网络协议为主机提供可用的传输路径。TCP允许一个主机同事运行多个应用进程。每台主机可以拥有多个应用端口,每对端口号,源和目标IP地址的组合唯一地标识了一个会话。

可靠传输

ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。 ARQ包括停止等待ARQ协议和连续ARQ协议,拥有错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和 负面确认及重传(Negative Acknowledgment and Retransmission)等机制。

由于停止等待ARQ协议信道利用率太低,所以需要使用连续ARQ协议来进行改善。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。发送方采用流水线传输。流水线传输就是发送方可以连续发送多个分组,不必每发完一个分组就停下来等待对方确认。如下图所示:

连续ARQ协议通常是结合滑动窗口协议来使用的,发送方需要维持一个发送窗口,如下图所示:

图(a)是发送方维持的发送窗口,它的意义是:位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方的确认,这样就提高了信道利用率。 

连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。例如上面的图(b),当发送方收到第一个分组的确认,就把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,则现在可以发送窗口内的第6个分组。 

接收方一般都是采用累积确认的方式。也就是说接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认。如果收到了这个分组确认信息,则表示到这个分组为止的所有分组都已经正确接收到了。 

累积确认的优点是容易实现,即使确认丢失也不必重传。但缺点是,不能正确的向发送方反映出接收方已经正确收到的所以分组的信息。比如发送方发送了前5个分组,而中间的第3个分组丢失了,这时候接收方只能对前2个发出确认。而不知道后面3个分组的下落,因此只能把后面的3个分组都重传一次,这种机制叫Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。

滑动窗口协议:

规则:

(1)凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用。

(2)只有当发送方A收到了接收方的确认报文段时,发送方窗口才可以向前滑动几个序号。

(3)当发送方A发送的数据经过一段时间没有收到确认(由超时计时器控制),就要使用回退N步协议,回到最后接收到确认号的地方,重新发送这部分数据。

流量控制

一条TCP连接每一侧主机都为该连接设置了接收缓存。当该TCP连接收到了正确的、按序的字节后,他就将数据放入接收缓存。相关联的应用进程会从该缓存中读取数据。但不必是数据一到达就立即读取。事实上,接收方也许正忙于其他任务,甚至要过很长时间后才读取该数据。如果某个应用进程读取比较缓慢,但是发送方发送的太多、太快,发送的数据就会很容易地使该连接的接收缓存溢出。

TCP为它的应用程序提供了流量控制服务(flow-control service)以消除发送方使接收方缓存溢出的可能性。流量控制因此是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。

TCP通过让发送方维护一个称为接收窗口(receive window)的变量(TCP报文段首部的接收窗口字段)来提供流量控制。通俗的讲,接收窗口用于给发送方一个指示--该接收方还有多少可用的缓存空间。因为TCP是全双工通信,在连接两端的发送方都各自维护了一个接收窗口。

拥塞控制

拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:( 1 )慢开始、拥塞避免( 2 )快重传、快恢复。

"拥塞窗口":是为了避免发生拥塞而设置的窗口,最终发送的字节数是接收端为发送端设置的"发送窗口"和"拥塞窗口"的最小值.

"慢启动阈值"(SSTHRESH):初始值是64k,即65535个字节,当发生一次数据丢失时,其值变为"拥塞窗口"大小的一半.

慢启动 拥塞避免:

主机刚开始发送报文段时先将拥塞窗口的大小设置为一个MSS(该连接上当前使用的最大数据段大小)。每收到一个报文段的确认后,将拥塞窗口增加最多一个MSS的大小。以此类推,用这样的方法逐步增大发送端拥塞窗口的大小,使分组注入到网络的速率更加合理,直到拥塞窗口的值达到慢启动阈值,这时候"拥塞避免"就发挥作用了.

该方案不再像慢启动一样以指数速度增长拥塞窗口的大小,而是到达慢启动阈值后,按线性规律增长,是网络比较不容易出现拥塞.

以上两个方案配合使用,可有效减少网络拥塞的影响,但不能完全避免拥塞情况,后来又提出了"快速重传"和"快速恢复"机制

快重传和快恢复:

快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。发送方只要一连收到三个重复确认,即认为对应"确认号"上的字段已丢失,TCP不等重传定时器失效,就重传已丢失的数据,此为快速重传,同时快速恢复发挥作用,把当前拥塞窗口大小设置为当前慢启动阈值大小的一半,以减轻网络负荷,然后再执行"拥塞避免"。不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

连接管理

建立连接:TCP通常使用IP作为网络层协议,这是TCP数据被封装在IP数据包内。TCP数据段由TCP Header(头部)和TCP Data(数据)组成。TCP最多可以有60个字节的头部,如果没有Options字段,正常的长度是20字节。

1)主机A(通常也叫客户端)发送一个标识了SYN数据段,标识期望与服务器A建立连接,此数据段的序列号(seq)为a;

2)服务器A回复标识了SYN+ACK的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认。

3)主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文段的确认。

TCP是一种可靠的,面向连接的全双工传输层协议。TCP连接的建立是一个三次握手的过程。

为什么是三次握手

tcp连接是全双工的,数据在两个方向上能同时传递。所以要确保双方,同时能发数据和收数据

第一次握手:证明了发送方能发数据 第二次握手:ack确保了接收方能收数据,syn确保了接收方能发数据 第三次握手:确保了发送方能收数据 实际上是四个维度的信息交换,不过中间两步合并为一次握手了。四次握手浪费,两次握手不能保证“双方同时具备收发功能”

关闭连接:为什么是四次挥手

因为tcp连接是全双工的,数据在两个方向上能同时传递。同时tcp支持半关闭(发送一方结束发送还能接收数据的功能)。因此每个方向都要单独关闭,且收到关系通知需要发送确认回复

为什么要支持半关闭

客户端需要通知服务端,它的数据已经传输完毕,同时仍要接收来自服务端的数据,使用半关闭的单连接效率要比使用两个tcp连接更好

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

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

相关文章

Linux服务器配置与管理(第一次实验)

实验目的及具体要求 1.熟悉Ubuntu桌面环境和基本操作 2.熟悉命令语法格式 3.掌握Linux各类命令的使用方法 4.熟悉Linux操作环境 实验仪器、设备和材料 笔记本电脑 软件VMware Workstation 17 Player Ubuntu 64 位操作系统 实验内容、步骤及实验数据记录 (一…

【医学图像隐私保护】联邦学习:密码学 + 机器学习 + 分布式 实现隐私计算,破解医学界数据孤岛的长期难题

联邦学习:密码学 机器学习 分布式 提出背景:数据不出本地,又能合力干大事联邦学习的问题 分布式机器学习:解决大数据量处理的问题横向联邦学习:解决跨多个数据源学习的问题纵向联邦学习:解决数据分散在多…

自动化防DDoS脚本

简介 DDoS (分布式拒绝服务攻击)是一种恶意的网络攻击,旨在通过占用目标系统的资源,使其无法提供正常的服务。在DDoS攻击中,攻击者通常控制大量的被感染的计算机或其他网络设备,同时将它们协调起来向目标系…

第二百八十七回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

解决 [Vue warn]:Avoid mutating a prop directly 警告

错误信息 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “xxx” 错误原因 所有的 prop 都使得…

Vue开发之proxy代理的配置(附带uniapp代理配置)

vue 1.在vue.config.js中添加 devServer 属性中配置 proxy 属性 module.exports {productionSourceMap: false,publicPath: /,devServer: {port: 8085,proxy: {/api/admin: {target: http://10.58.104.70:6111,changeOrigin: true,pathRewrite: {/api/: /}},/api: {target: …

白酒:品控标准与产品质量的关系

品控标准是确保产品质量的关键要素,它涉及到产品的原料、生产工艺、包装、储存和运输等各个环节。在酿酒行业中,品控标准尤为重要,因为酒的品质与其原材料、生产环境、酿造工艺等密切相关。云仓酒庄的豪迈白酒在品控方面制定了严格的标准&…

中移(苏州)软件技术有限公司面试问题与解答(4)—— virtio所创建的设备1

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(0)—— 面试感悟与问题记录 本文参考以下文章: VirtIO实现原理——PCI基础 VirtIO实现原理——virtblk设备初始化 特此致谢! 本文对…

React复习记录

1、Outlet的作用 <Outlet /> 是一种在 React 路由器中使用的特殊组件&#xff0c;它用于渲染当前路由的子路由。在一些情况下&#xff0c;我们可能只想渲染子路由&#xff0c;而不需要使用上下文传递任何参数。这种情况下&#xff0c;可以直接使用 <Outlet /> 组件…

java servlet果蔬产业监管系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web果蔬产业监管系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

Maven(上):Maven介绍、安装配置及工程构建

1. Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 Maven就是一个软件&#xff0c;掌握安装、配置、以及基本功能 &#xff…

国密算法:定义、应用与重要性

国密算法是指由中国国家密码管理局发布的密码算法标准&#xff0c;旨在保障国家信息安全。目前&#xff0c;国家密码管理局已发布了一系列国产商用密码标准算法&#xff0c;包括SM1&#xff08;SCB2&#xff09;、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法&#xff08;ZUC)等…

MIT_线性代数笔记:线性代数常用计算公式

目录 1.矩阵的加法和数乘2.矩阵的乘法3.转置 Transposes 相关运算 1.矩阵的加法和数乘 2.矩阵的乘法 1)标准方法&#xff08;行乘以列&#xff09; 矩阵乘法的标准计算方法是通过矩阵 A 第 i 行的行向量和矩阵 B 第 j 列的列向量点积得到 cij。即我们常说的点积&#xff0c;也…

用Excel辅助做数独

做数独游戏的时候&#xff0c;画在纸上很容易弄花眼&#xff0c;所以我考虑用Excel辅助做一个。 界面如下&#xff1a; 按下初始化表格区域按钮&#xff0c;会在所有单元格中填充“123456789”。如下图&#xff1a; 当某个单元格删除得只剩一个数字时&#xff0c;会将同一行、…

安利一款抢票软件堪称“业界良心”,全网好评!

马上就到了春运了&#xff0c;有不少网友反映12306买票太难了。 有粉丝在后台留言问有没有抢票软件&#xff1f; 知名公司开发的抢票软件&#xff0c;需要助力、需要用钱买加速包&#xff0c;这对于需要白嫖的朋友来说无疑是“雪上加霜”&#xff01; 这里从解决实际问题的角度…

RocketMQ源码安装

RocketMQ源码安装 1.官方下载地址 http://rocketmq.apache.org/dowloading/releases/ 2.环境要求 1.Linux64位系统 2.JDK1.8(64位) 3.Maven 3.2.x以上 3.IntelliJ IDEA导入 导入后执行Maven命令install mvn install -Dmaven.test.skiptrue 4.调试RocketMQ源码 4.1启动…

5JS语句

表达式在JavaScript中是短语&#xff0c;那么语句&#xff08;statement&#xff09;就是JavaScript整句或命令。 表达式计算出一个值&#xff0c;但语句用来执行以使某件事发生。诸如赋值和函数调用这些有副作用的表达式&#xff0c;是可以作为单独的语句的&#xff0c;这种把…

gitlab设置/修改克隆clone地址端口

最近由于公司要停测试库云服务器? 什么?要停测试库服务器??? 是的! 你没听错。 真是醉了,多大的集团,为了省钱,也真是拼了, 作为开发人员,没有测试服务器,犹如断臂之人。 所以,在之前搭建环境的时候都没有写文档,今天算是弥补上,以后都可以作为参考了, …

vue3 根据点击位置,实现一个用户头像弹框定位

vue3 根据点击位置&#xff0c;实现一个用户头像弹框定位 需求背景 最近在做直播后台&#xff0c;涉及到对用户的一些操作&#xff0c;比如关注/取关/禁言/踢出直播间。多个地方都要用&#xff0c;需要封装一个弹框组件 效果图 实现过程分析 根据点击元素&#xff0c;获取元…

在游戏里开公司!基于ERNIE SDK的多智能体游戏应用

在虚拟世界有一座神奇的办公室&#xff0c;当你输入你的创业方向&#xff0c;办公室的智慧打工人们将团结合作&#xff0c;为你的项目勤劳奔走&#xff0c;并在过程中&#xff0c;把日报周报都写好&#xff0c;让你随时掌握项目进度和最终成果&#xff01;该项目基于ERNIE SDK开…