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

        我们已经考虑了计算机网络能够一般性地提供的运输服务。现在我们要更为具体地考察由因特网提供的运输服务类型。因特网(更一般的是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.两种代码实现,这里用了两,一个递归一个非递归。 递归是一种编程技术,其中一个函数直接或间接地调用自己。递归通常用于解决那些可以被分解为更小的、…

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 …

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

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

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

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

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

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

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

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

80+ ChatGPT 文献综述指令

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

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

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

3-一元函数微分学

看到高次求导0---->立即想到奇偶性

STM32智能无人机控制系统教程

目录 引言环境准备智能无人机控制系统基础代码实现:实现智能无人机控制系统 4.1 数据采集模块 4.2 数据处理与飞行控制 4.3 通信与导航系统实现 4.4 用户界面与数据可视化应用场景:无人机应用与优化问题解决方案与优化收尾与总结 1. 引言 智能无人机控…

复旦微JFMVU3P-2FFVC1517 FPGA+AI全国产化人工智能数据处理平台,适用于雷达与中频信号采集、视频图像采集

板载FPGA实时处理器:JFMVU3P-2FFVC1517支持1个FMC(HPC)扩展接口支持2路QSFP光纤接口支持x8 Gen3 PCIE主机接口,系统带宽>5GByte/s支持1个R45自适应千兆以太网口支持1个GPIO/RS422接口 基于复旦微16nm工艺JFM9VU3P FPG…

C语言 -- 深入理解指针(二)

C语言 -- 深入理解指针(二) 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组8. 字符指针变量9. 数组指针变量2.1数组指针变量是什么?2.2 数组指针变量怎么初始化 10. 二维…

SQLServer的系统数据库用别的服务器上的系统数据库替换后做跨服务器连接时出现凭证、非对称金钥或私密金钥的资料无效

出错作业背景: 公司的某个sqlserver服务器要做迁移,由于该sqlserver服务器上数据库很多,并且做了很多的job和维护计划,重新安装的sqlserver这些都是空的,于是就想到了把系统4个系统数据库进行替换,然后也把…

Android进入Recovery模式 显示无命令 / no command

问题: 进入 recovery 模式后就显示no command,倒地机器人 解决: 在此界面按住电源键不放,再按一下音量

Git 查看、新建、删除、切换分支

Git 是一个版本控制系统,软件开发者用它来跟踪应用程序的变化并进行项目协作。 分支的诞生便于开发人员在彼此独立的环境中进行开发工作。主分支(通常是 main 或 master)可以保持稳定,而新的功能或修复可以在单独的分支中进行开发…

MySQL之表的约束(上)

目录 空属性(NULL) 实例建表 插入操作 默认值(default) 建表 插入操作 NULL与default的结合 列描述 建表 zerofill 建表 插入操作 主键 建表 插入 主键的增加与去掉 去掉 增加 复合主键 插入的影响 真正约束字段的是数据类型,但是数据类型约束很单一&a…

2 ECMAScript

JavaScript 概述 JavaScript 编程语言允许你在 Web 页面上实现复杂的功能;如果你看到一个网页不仅仅显示静态的信息,而是显示依时间更新的内容,或者交互式地图,或者 2D/3D 动画图像,或者滚动的视频播放器,等等——你基本可以确定,这需要 JavaScript 的参与 JavaScript 编程语言…