TCP三次握手

    传输控制协议(Transmission Control Protocol,TCP)是一种面向链接的、可靠的、基于字节流的运输层(Transport服务器

layer)通讯协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的。每一次TCP链接都须要三个阶段:链接建网络

立、数据传送和链接释放。“三次握手”就发生在链接创建阶段。ide

三次握手的过程:spa

捕获.PNG


1)主机A发送标志syn=1,随机产生seq =1234567的数据包到服务器,主机B由syn=1知道,A要求创建链接; 此时状态A为设计

SYN_SENT,B为LISTEN 2)主机B收到请求后要确认链接信息,向A发送ack =(主机A的seq+1),标志syn=1,ack=1,随机产生seq=7654321server

的包, 此时状态A为ESTABLISHED,B为SYN_RCVD  blog

3)主机A收到后检查ack 是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack =(主机B的seq+1),资源

标志ack=1,主机B收到后确认seq值与ack=1则链接创建成功。 此时A、B状态都变为ESTABLISHED  it


TCP链接创建过程当中为何须要“三次握手”?io

    目的是为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误。

    client发出的第一个链接请求报文段并无丢失,而是在某个网络结点长时间的滞留了,以至延误到链接释放之后的某个时间才到达server。

原本这是一个早已失效的报文段。但server收到此失效的链接请求报文段后,就误认为是client再次发出的一个新的链接请求。因而就向client

发出确认报文段,赞成创建链接。若不采用“三次握手”,那么只要server发出确认,新的链接就创建了。因为如今client并无发出创建链接

的请求,所以不会理睬server的确认,也不会向server发送数据。但server却觉得新的运输链接已经创建,并一直等待client发来数据。这样,

server的不少资源就白白浪费掉了。采用“三次握手”的办法能够防止上述现象发生。例如刚才那种状况,client不会向server的确认发出确认。

server因为收不到确认,就知道client并无要求创建链接。”

相关文章
相关标签/搜索