HTTP,作为驻留在TCP协议之上的协议,是无状态的,而IP协议也是无状态的。 那么我们如何得出TCP是否无状态的结论呢?
HTTP,作为驻留在TCP协议之上的协议,是无状态的,而IP协议也是无状态的。 那么我们如何得出TCP是否无状态的结论呢?
我还想指出,虽然HTTP和HTTPS(实际上只是在SSL/TLS上的HTTP)基本上是无状态的(每个请求都是协议中有效的独立请求),但建立在其上的应用程序并不一定是无状态的。例如,一个网站可能要求您在发送消息之前访问登录页面。即使客户端发送消息的请求是有效的独立请求,但应用程序将不接受它,除非客户端先进行身份验证。这意味着应用程序在HTTP上实现了状态。
顺便说一下,HTTP的有状态性可能会有些令人困惑,因为一些应用程序(在明显不同的OSI层上)会将它们的状态泄漏到HTTP上。例如,如果用户尝试查看不存在的博客文章,则博客应用程序可能会发送带有404状态码的响应,即使处理博客文章搜索的文件本身被找到。
简化版:TCP是有状态的协议,需要记住通信另一方的状态和数据。与之相反,UDP是无状态的协议。
虽然Zneak指出你可以使用任何通信方式进行有状态的目的,但实际上正在询问的问题是协议本身是否有状态。
维基百科:
在计算机中,无状态协议是一种通信协议,将每个请求视为独立的交易,与任何先前的请求无关,因此通信由独立的请求和响应对组成。 无状态协议不需要服务器在多个请求的持续时间内保留有关每个通信伙伴的会话信息或状态。 相反,需要在服务器上保存内部状态的协议称为有状态协议。
TCP的“请求”(通信单位)是TCP数据包。
TCP是一个有状态的协议,因为通信双方必须记住彼此的状态和字节。 因此有TCP状态图。
与之相反,UDP是一个无状态的协议。 两端点都不保留任何状态概念。(尽管如往常一样,封装的信息可以用于有状态的目的。)