zne*_*eak 40
您不能假设任何堆叠协议只是查看堆栈上的其他协议是有状态的或无状态的.有状态协议可以建立在无状态协议之上,无状态协议可以建立在有状态协议之上.分层网络模型的一个要点是,您正在寻找的关系类型(任何给定协议的状态,与其协同使用的协议的功能)不存在.
TCP协议是一种有状态协议,因为它是什么,不是因为它是通过IP使用的,还是因为HTTP建立在它之上.TCP以窗口大小的形式维护状态(端点告诉对方他们准备接收多少数据)和数据包顺序(端点在从另一个接收数据包时必须相互确认).这种状态(另一个人可以接收多少字节,以及他是否接收到最后一个数据包)允许TCP即使在固有的不可靠协议上也是可靠的.因此,TCP是一种有状态协议,因为它需要状态才有用.
我还想指出,虽然HTTP和HTTPS(实际上只是HTTP over SSL/TLS)基本上是无状态的(每个请求是根据协议的有效独立请求),但构建在HTTP和HTTPS之上的应用程序不是'必然是无国籍的.例如,网站可能会要求您在发送邮件之前访问登录页面.即使客户端发送消息的请求是有效的独立请求,应用程序也不会接受它,除非客户端之前已对其进行身份验证.这意味着应用程序通过 HTTP 实现状态.
另一方面,HTTP的状态有点令人困惑,因为几个应用程序(在明显不同的OSI层上)会将其状态泄露给HTTP.例如,如果用户尝试查看不存在的博客帖子,则博客应用程序可能会发回包含404状态代码的响应,即使找到了处理博客帖子搜索本身的文件也是如此.
Zneak是正确的,您可以将任何通信用于有状态目的,但问题是协议本身是否有状态.
维基百科:
在计算中,无状态协议是一种通信协议,它将每个请求视为与任何先前请求无关的独立事务,以便通信由独立的请求和响应对组成.无状态协议不要求服务器在多个请求期间保留关于每个通信伙伴的会话信息或状态.相反,需要在服务器上保持内部状态的协议被称为有状态协议.
要应用此定义,首先我们必须了解"请求"是什么.
这将使TCP成为一个有状态的协议,因为各方必须记住另一个状态,以及另一个拥有的字节.因此TCP 状态图.
| 归档时间: |
|
| 查看次数: |
20853 次 |
| 最近记录: |