应用层协议原理——因特网提供的运输服务

        我们已经考虑了计算机网络能够一般性地提供的运输服务。现在我们要更为具体地考察由因特网提供的运输服务类型。因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UDP和TCP。当软件开发者为因特网创建一个新的应用时,首先要做出的决定是,选择UDP还是选择TCP。每个协议为调用它们的应用程序提供了不同的服务集合。下图显示了某些所选的应用程序的服务要求。

1.TCP 服务

        TCP服务模型包括面向连接服务和可靠数据传输服务。当某个应用程序调用TCP作为其运输协议时,该应用程序就能获得来自TCP的这两种服务。

  1. 面向连接的服务:在应用层数据报文开始流动之前,TCP让客户和服务器互相交换运输层控制信息。这个所谓的握手过程提示客户和服务器,使它们为大量分组的到来做好准备。在握手阶段后,一个TCP连接(TCP connection)就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发。当应用程序结束报文发送时,必须拆除该连接。
  2. 可靠的数据传送服务:通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据。当应用程序的一端将字节流传进套接字时,它能够依靠TCP将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余。

        TCP协议还具有拥塞控制机制,这种服务不一定能为通信进程带来直接好处,但能为因特网带来整体好处。当发送方和接收方之间的网络出现拥塞时,TCP的拥塞控制机制会抑制发送进程(客户或服务器)。如我们将在第3章中所见,TCP拥塞控制也试图限制每个TCP连接,使它们达到公平共享网络带宽的目的。

TCP 安全

        无论TCP还是UDP都没有提供任何加密机制,这就是说发送进程传进其套接宇的数据,与经网络传送到目的进程的数据相同。因此,举例来说如果某发送进程以明文方式(即没有加密)发送了一个口令进入它的套接字,该明文口令将经过发送方与接收方之间的所有链路传送,这就可能在任何中间链路被嗅探和发现。因为隐私和其他安全问题对许多应用而言已经成为至关重要的问题,所以因特网界已经研制了TCP的加强版本,称为安全套接字层(SecureSockelsLayer,SSL)。用SSL加强后的TCP不仅能够做传统的TCP所能做的一切,而且提供了关键的进程到进程的安全性服务,包括加密、数据完整性和端点鉴别。我们强调SSL不是与TCP和UDP在相同层次上的第三种因特网运输协议,而是一种对TCP的加强,这种强化是在应用层上实现的。特别是,如果一个应用程序要使用SSL的服务,它需要在该应用程序的客户端和服务器端包括SSL代码(利用现有的、高度优化的库和类)。SSL有它自己的套接字API,这类似于传统的TCP套接字API。当一个应用使用SSL时,发送进程向SSL套接字传递明文数据;在发送主机中的SSL则加密该数据并将加密的数据传递给TCP套接字。加密的数据经因特网传送到接收进程中的TCP套接字。该接收套接字将加密数据传递给SSL,由其进行解密。最后,SSL通过它的SSL套接宇将明文数据传递给接收进程。我们将在第8章中更为详细地讨论SSL

2. UDP 服务

        UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供一种不可靠数据传送服务,也就是说,当进程将一个报文发送进UDP套接字时,UDP协议并不保证该报文将到达接收进程。不仅如此,到达接收进程的报文也可能是乱序到达的。

        UDP没有包括拥塞控制机制,所以UDP的发送端可以用它选定的任何速率向其下层(网络层)注入数据。(然而,值得注意的是实际端到端吞吐量可能小于这种速率,这可能是因为中间链路的带宽受限或因为拥塞而造成的。)

3.因特网运输协议所不提供的服务

        我们已经从4个方面组织了运输协议服务:可靠数据传输、吞吐量、定时和安全性。TCP和UDP提供了这些服务中的哪些呢?我们已经注意到TCP提供了可靠的端到端数据传送。并且我们也知道TCP在应用层可以很容易地用SSL来加强以提供安全服务。但在我们对TCP和UDP的简要描述中,明显地缺少了对吞吐量或定时保证的讨论,即这些服务目前的因特网运输协议并没有提供。这是否意味着诸如因特网电话这样的时间敏感应用不能运行在今天的因特网上呢?答案显然是否定的,因为在因特网上运行时间敏感应用已经有多年了。这些应用经常工作得相当好,因为它们已经被设计成尽最大可能对付这种保证的缺乏。无论如何,在时延过大或端到端吞吐量受限时,好的设计也是有限制的。总之,今天的因特网通常能够为时间敏感应用提供满意的服务,但它不能提供任何定时或带宽保证。

        上图指出了一些流行的因特网应用所使用的运输协议。可以看到,电子邮件、远程终端访问、Web、文件传输都使用了TCP。这些应用选择TCP的最主要原因是TCP提供了可靠数据传输服务,确保所有数据最终到达目的地。因为因特网电话应用(如Skype)通常能够容忍某些丢失但要求达到一定的最小速率才能有效工作,所以因特网电话应用的开发者通常愿意将该应用运行在UDP上,从而设法避开TCP的拥塞控制机制和分组开销但因为许多防火墙被配置成阻挡(大多数类型的)UDP流量,所以因特网电话应用通常设计成如果UDP通信失败就使用TCP作为备份。

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

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

相关文章

我是售前工程师转大模型了,不装了我摊牌了

有无售前工程师的朋友,心里的苦谁懂呀,售前工程师是项目开发人员与业务销售人员的桥梁,在业务销售人员眼中,他们是技术人员,在项目实施中的开发人员眼中,他们是专注技术的销售人员,在用户眼中&a…

本人瞎说--分形与混沌--中医为什么是准的

文章目录 序分形与混沌中医的来源我为什么更爱中医现代医学仍然落后与无知,很多病根本就治不好病由心生 序 本人不是中医专业,也不是医生,也不会看病,我的观点都是来自于网上学习及思考。不喜欢的随便,但是还请您多想…

【运算放大器学习】

运算放大器学习 运放的选型一般主要需要观察以下几个参数,下面一起来理解一下几个核心参数的意义;今天说 输入失调电压 、失调电压温漂 、 偏置电流 、 失调电流几个参数; 放大器的几个主要参数 输入失调电压失调电压温漂偏置电流失调电流…

GPU 张量核心(Tensor Core)技术解读

一文理解 GPU 张量核心(Tensor Core) 引言 最新一代Nvidia GPU搭载Tensor Core技术,本指南深度解读其卓越性能,为您带来极致体验。 Nvidia最新GPU微架构中的核心技术——Tensor Core,自Volta起每代均获突破&#xf…

C语言求10进制转2进制(除2取余法)

1.思路:除2取余法,也就是说用除以2取余来将10进制数转换为二进制 2.两种代码实现,这里用了两,一个递归一个非递归。 递归是一种编程技术,其中一个函数直接或间接地调用自己。递归通常用于解决那些可以被分解为更小的、…

理解李彦宏的“不要卷模型,要卷应用”

引言 在2024年世界人工智能大会上,百度创始人李彦宏的发言引发了广泛讨论。他呼吁业内人士“不要卷模型,要卷应用”,强调AI技术的价值在于实际应用,而非单纯的技术竞赛。李彦宏的观点引导我们反思当前AI发展的方向,探…

python(64) 主动释放内存

​主动释放内存的方式 在 Python 中使用 gc.collect() 方法清除内存 使用 del 语句清除 Python 中的​​​​​​ ​内存 gc.collect(generation2) 方法用于清除或释放 Python 中未引用的内存。未引用的内存是无法访问且无法使用的内存。可选参数 generation 是一个整数&am…

Check if a fine-tuned OpenAI model was successfully deleted

题意:检查微调后的OpenAI模型是否已成功删除 问题背景: I am doing some work with the OpenAI API with Python. Im working with fine-tuning and I am working on deleting an existing model and starting over again. I want to be able to check …

常用的工具

Java 1.IDEA介绍 IDEA官网:https://www.jetbrains.com.cn/idea/ IDEA 2023.2.2下载地址:https://download.jetbrains.com/idea/ideaIU-2023.2.2.exe 对第三方软件的支持:https://www.jetbrains.com/legal/third-party-software/?product=iiu&version=2023.2.2 IDEA插件…

Redis进阶教程

Redis进阶教程 目录 Redis内存管理 内存分配内存回收策略 Redis集群 集群架构数据分片故障检测与恢复 Redis持久化策略 RDB与AOF对比混合持久化 Redis事务 事务的基本概念乐观锁机制 Redis脚本 Lua脚本简介常用Lua脚本示例 Redis安全配置 身份认证防火墙设置客户端安全 Redis…

在Spring Boot中实现多租户架构的数据隔离

在Spring Boot中实现多租户架构的数据隔离 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 引言 随着云计算和SaaS(软件即服务)模式的普及,多租户架构在企业应…

“四大水刊”水出新境界!仅一本剔除,飞升1区,IF3.8,1个月录用依然吊打!

本周投稿推荐 SCI • 能源科学类,1.5-2.0(来稿即录25天) • 计算机类,2.0-3.0(纯正刊29天录用) EI • 各领域沾边均可(2天录用) 知网 • 7天录用-检索(急录友好&a…

我可能要和低价官网建设说拜拜了。

最近和团队商议,要不要放弃低价官网建设业务,大部分人要求放弃,我有点不舍,毕竟从公司开始就是靠网站建设业务存活和起价的。 对于设计师来说,对于美与体验的追求是无止境的,你让他搞个高大上网站&#xf…

ActiViz实战:鼠标交互和vtkCommand的问题

文章目录 前言一、消失的vtkCallbackCommand二、自定义命令vtkCommand1、自定义一个左键双击事件的命令2、使用观察者/命令模式3、结果三、vtkObject类中的事件1、vtkCommand中所有的事件2、鼠标事件测试3、如何添加左键的双击事件四、总结前言 在C++的VTK中,我们常用vtkCall…

《C++20设计模式》命令模式思考

文章目录 一、前言二、分析 拆解1、经典命令模式2、撤销操作3、关于Invoker类 三、实现 一、前言 哎!只要是书上写的和经典设计模式不同,我就会很伤脑筋。😩 命令模式到底是干什么的? 答:命令的发送者和接收者完全解…

如何在Windows系统中关闭占用特定端口的进程

前言 在日常的系统管理或开发调试过程中,我们常常会遇到需要关闭占用特定端口的进程的情形,以释放端口供其他服务或应用使用。本文将详细介绍在Windows操作系统中如何识别并终止占用特定端口的进程,以确保系统资源的合理分配和应用的正常运行…

C#win和Linux系统下文件查找

在C#中,文件遍历和查找可以通过不同的方法实现,取决于你希望如何操作文件系统和文件。 文件遍历 文件遍历涉及访问文件夹并获取其内容的过程。在C#中,可以使用以下方法进行文件遍历: 1. 使用 Directory 类 using System; using System.IO;class Program {static void M…

28个常用的损失函数介绍以及Python代码实现总结

28个常用的损失函数介绍以及Python代码实现总结 最近在做多分类的研究,总是遇到这么多损失函数,应该挑选哪一个损失函数呢?这样的问题。于是心血来潮便想着对损失函数进行总结。 以下是一个预览总结: 损失函数名称问题类型L1范…

80+ ChatGPT 文献综述指令

进行文献综述通常似乎是一项艰巨的任务。它是学术和研究工作的重要组成部分,涉及对先前发表的与特定主题相关的研究进行全面和批判性分析。目标是深入了解该主题的知识状况,找出差距,并为进一步研究奠定基础。 传统上,文献综述是…

STL复习-序列式容器和容器适配器部分

STL复习 1. 常见的容器 如何介绍这些容器,分别从常见接口,迭代器类型,底层实现 序列式容器 string string严格来说不属于stl,它是属于C标准库 **底层实现:**string本质是char类型的顺序表,因为不同编译…