• 握手7


    我们可以看到,TCP 的三次握手完全是在内核中实现的,对上层应用来讲完全是透明的。上层应用只负责收发数据,并不知道底层发生了什么哦。

    这样三次握手完了,可以看到三次握手,也就是建立连接时,双方交换三个报文。为什么是三次,这主要是为了防止已失效的连接请求报文段又传送到服务器端

    而产生差错。

    在正常情况下,假设客户端向服务器端发送连接请求报文,服务器端应该返回确认报文以证实这条连接。此时可能会出现两种错误:一种是客户端的连接请求报文

    丢失,另一种是服务器端的确认应答报文丢失。这两种情况都可以通过重传计时器超时来处理,一旦客户端的计时器超时,客户端再发一次连接请求报文,待到服务器端

    确认,就建立了连接。数据传输完毕后,再次释放本次连接。

    不过,建立连接必须考虑到网络服务的不可靠性。如果出现了这样的异常:假设客户端向服务器发送的第一个连接请求报文,该报文并没有丢失,而是滞留在网络中

    的时间过长,以至延误到在连接释放后才传送到服务器。这已经是一个失效的连接请求报文,但服务器端却把这个失效的连接请求误认为是客户端发送的新的连接请求。

    于是服务器会向客户端发送一个确认连接请求报文,同意建立连接。但实际上客户端并没有建立连接的要求,因此就不会理服务器端的确认,也不会向服务器传输数据,而

    服务器以为连接建立,一直等待客户端的数据,从而浪费服务器的资源。针对这种异常情况,采用三次握手,客户端就不会对服务器端发出的确认连接再确认,而服务器端也

    收不到客户端的确认,就知道客户端没有连接的请求。这样就防止了已失效的连接请求报文传到服务器端而出现的错误。

    此外,一对端口之间,只存在一个TCP 连接。

  • 相关阅读:
    ASP.NET MVC 与 Web Forms
    去除两端margin的方法
    Media Queries之Respond.js
    ECMAScript5严格模式
    用rem设置文字大小
    BFC与hasLayout
    快速把项目部署到webLogic上
    判断一个坐标点是否在不规则多边形内部的算法
    Git 工作流的正确打开方式
    Java设计模式六大原则
  • 原文地址:https://www.cnblogs.com/guoyu1024/p/10597317.html
Copyright © 2020-2023  润新知