Web services 传输层服务和应用层服务

Web services 传输层服务和应用层服务,web-services,http,tcp,Web Services,Http,Tcp,我现在正在使用web服务。我们有两种类型的服务,一种通过HTTP,另一种通过TCP。根据我的理解,当试图理解这两者之间的区别时,TCP上的服务在传输层工作,即它们通过两端传输数据。因此,在这种情况下,TCP上的服务将直接在两端之间传输数据。但我不太清楚HTTP上的服务。我知道我们有一个客户机-服务器模型,REST、SOAP和HTTP是传输数据的协议,但我无法正确地将HTTP上的服务概念联系起来 有谁能帮我做个类比来解释这两者之间的区别吗?当使用TCP/IP及其上的分层协议时,我会对7层模型持保留

我现在正在使用web服务。我们有两种类型的服务,一种通过HTTP,另一种通过TCP。根据我的理解,当试图理解这两者之间的区别时,TCP上的服务在传输层工作,即它们通过两端传输数据。因此,在这种情况下,TCP上的服务将直接在两端之间传输数据。但我不太清楚HTTP上的服务。我知道我们有一个客户机-服务器模型,REST、SOAP和HTTP是传输数据的协议,但我无法正确地将HTTP上的服务概念联系起来


有谁能帮我做个类比来解释这两者之间的区别吗?

当使用TCP/IP及其上的分层协议时,我会对7层模型持保留态度。层的真实数量将有所不同,并且与经典的OSI模型不匹配

例如,HTTP构建在TELNET协议之上,TELNET协议是在TCP之上分层的。这是否使TELNET成为表示层协议?不,它是一个应用层协议,恰好有另一个应用层协议构建在它之上


然后我们通过HTTP运行SOAP。或者,如果我们愿意,我们可以通过TCP/IP运行SOAP。那么肥皂是哪一层呢?那是第八层还是第九层

正如约翰·桑德斯(John Saunders)试图暗示的那样,我同意更重要的是理解这些协议提供的抽象,而不是它们在某些OSI模型中可能被称为的特定层。虽然通用模型有帮助并适用,但它没有提供实际协议的具体细节

话虽如此,使用TCP的所谓传输层服务与使用HTTP的应用层服务之间的区别,IMHO归结为TCP和HTTP本身之间的比较

我想说的是,我希望对这些协议稍有熟悉的人都知道,HTTP是比TCP更高级别的抽象,事实上它依赖于TCP/IP本身。因此,HTTP显然继承了TCP/IP的某些特性,如可靠性

现在对比一下-

TCP服务

设计自己的应用程序级协议-设计自己的应用程序级协议。。例如,客户端将如何请求操作来添加员工?客户将如何要求找到给定的员工?等您如何指出客户机和服务器之间可以交换数据的格式?您将如何区分元数据(如请求信息)和数据

效率-数据传输效率高且紧凑。因为您定义了自己的应用层协议,所以它可以是任何内容,从二进制到字符串,再到XML,再到您梦想中的任何内容

例如,HTTP是建立在TCP之上的,用外行术语来说,主要使用键值对样式的请求头。。vs SOAP,其中大部分信息作为消息信封和消息体传递,这就是为什么SOAP可以通过HTTP以及其他协议(如消息队列)传递的原因

性能-考虑到使用非常紧凑的应用层协议的可能性,它也可以相对快速。对于真正的高吞吐量、高性能、对延迟敏感的intranet应用程序,这可能是一个决定性因素

开发工作—随着灵活性的提高,当您试图定义和实现自己的应用层协议时,您肯定会编写更多的代码

HTTP服务

应用程序协议的大部分是为您定义的——您可以在定义良好的HTTP协议上设计应用程序。通常,HTTP Get意味着查询资源。请求url中的查询筛选器可用于搜索。HTTP POST、PUT和DELETE同样具有特定的、定义良好的语义

错误/故障处理-使用HTTP协议中定义的标准指示偶数错误。。比如状态代码200成功vs 400失败请求

效率-可能非常冗长。协议定义了必须如何定义请求的几乎每个方面。。并且通常基于文本

开发和工具支持-HTTP可以更容易地使用现有的、种类繁多的工具来发送、接收和调试请求Fiddler或Charles Proxy是著名的HTTP调试工具

互联网/防火墙友好-HTTP通常用于端口80,但理论上也可以用于其他端口。这使得它不仅适用于企业内部网应用程序,在企业内部网应用程序中,您可以更好地控制您打开的防火墙和端口。。但也可以通过互联网访问这些服务,因为80端口通常在世界上几乎每台机器上都是开放的

多个服务的共存-HTTP的使用非常广泛,因此在给定的机器上需要多个应用程序/服务来使用它。。操作系统通常在操作系统中内置了特殊的支持,以在Windows上处理此http.sys,您不必担心一个应用程序/服务意外踩到另一个应用程序/服务 在这种情况下,仅使用同一端口将失败。在这种情况下,客户端和服务器之间的端口协商通常不是问题,因为HTTP应该位于端口80

保护通信通道-当涉及到保护通信时,同样有明确定义的方法来建立相同的通道。。i、 e.HTTPS。与基于TCP/IP的服务不同,您不必发明自己的方案来加密客户端和服务器之间的通信

托管服务——理论上,托管HTTP服务的方式比托管TCP服务的方式更多,这同样是因为HTTP web应用程序已经成为一种常见的场景,而IIS等web服务器已经满足了这一需求。您的HTTP服务可以利用IIS等web服务器已有的无数现成功能。。回收、身份验证、资源管理、请求过滤、缓存、动态压缩和日志记录等。。您可以免费获得托管在任何成熟web服务器产品上的HTTP服务

跨平台/技术栈的互操作性—使用HTTP,混合使用任何技术栈都会容易得多,因为协议的实现通常会在各种平台上得到支持。。从Linux/Unix到Windows。。或者从.Net到Java再到Ruby。。您将从这些支持HTTP的平台上现有的工具和技术中获益。。因此,如果您希望Windows上的服务器位于.Net中,而Unix上的客户端位于Java中,那么Http可能是事实上的选择

我可以继续。。这绝不是一份详尽的清单,我相信其他许多人还可以补充更多。。但希望这能给你一个好主意,让你知道你在找什么。。我们可以清楚地看到,这可能是一个非常深刻的话题。。根据您的回复和时间,我可能会在将来编辑此答案。。或者鼓励其他人在他们认为合适的时候更新它

旁注-值得注意的是,尽管HTTP在TCP/IP上添加了大量内容,使其成为应用程序协议的一个伟大且普遍的选择。。始终存在更多/更高级别抽象的空间。。因此,还有其他更新的服务协议,它们构建在HTTP之上。例如-。如果你好奇的话,看看奥达塔

当然,在当今服务业的世界中,如果不提及以下内容,讨论就不会完整


编辑:另一个有趣的侧重点——如果你在Windows平台上构建,并且使用.NETFramework,有一些框架,比如Windows通信基础A.K.A.WCF,它试图提供这样的抽象,你可以交换出你选择的通信协议客户端和服务器的选择必须匹配,从HTTP到TCP,从MSMQ到IPC等,只需更改配置,或通过创建多个端点通过多个通信协议承载相同的服务。有关WCF提供的各种开箱即用的选项的概述和比较,请参阅。

如您所问,我将尝试通过类比进行解释,同时不要过多重复前面的答案

假设我们可以通过电话呼叫TCP和SMS HTTP访问帮助台服务。从您的应用程序的角度来看,您应该获得与您选择的通信方法无关的相同信息。但这种通信方式存在差异,因为电话呼叫TCP是状态完整通道,而SMS HTTP是无状态的:

一旦建立了电话,信息交流将持续到挂断; SMS消息必须包含所有相关信息才能获得有用的响应。 要将状态引入SMS通道,需要在帮助台级别执行其他步骤,例如,将为您分配票证号码,您必须在每个相关SMS HTTP cookie/会话中发送票证号码-GSM网络不会自动处理此问题。此状态由帮助台以及您的服务和应用程序逻辑处理

这两种服务类型都有优点和缺点。两者都应该起作用——优先权取决于实际用例

如果延迟可以接受的话,用什么方式交换数据并没有太大区别,甚至可以用邮局交换邮件。实际上,这意味着您可以使用ping ICMP或DNS查询或电子邮件来交换数据——只要您的应用程序知道如何使用/解码此类通道

我认为提到,我认为他的观点是正确的


这个类比并非100%正确,我试图解释这个想法:区别在于协议本身或应用程序/框架如何保存状态。

否决票的情况如何?我的答案在哪些方面不准确或没有用处?事实上,TCP/IP和网络上使用的现代协议并没有遵循经典的OSI七层模型,因为它们在应用层是相互分层的。我不明白你的答案。。我的问题很简单。传输层的服务与http层的服务有何不同?我明白你的观点,TCP/IP不遵循OSI七层协议
er模型但TCP上的服务和HTTP上的服务有何不同?为什么您认为它们不同?