关注前端 | 前端博客

tcp

2020年06月10日 管理员 22次浏览


计算机网络类

tcp的三次握手

如何握手

  • 第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。

  • 第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

  • 第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。

  • 服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方已建立起了链接

三次握手有什么作用?

  • 确认双方的接受能力、发送能力是否正常。

  • 指定自己的初始化序列号,为后面的可靠传送做准备。

  • 如果是 https 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成到。

为什么不是两次握手

第一次握手: clientserver 发送 SYNserver 只是确认 client发送能力没问题

第二次握手: client 收到 server 发送的 SYN`和ACK,可以确认server**的接收发送能力没问题,

但是 server 还不确定 client 的接收能力有无问题(server大哥心想,client老弟,你收到我的SYNACK,你倒是回我个ACK啊,让我知道你的接收能力也没有问题!)

三次握手才能确定彼此的接收能力没有问题,这就是为什么不是两次也不是四次握手的原因

各个状态含义

  • LISTEN - 侦听来自远方TCP端口的连接请求;
  • SYN-SENT -在发送连接请求后等待匹配的连接请求;
  • SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
  • ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
  • FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
  • FIN-WAIT-2 - 从远程TCP等待连接中断请求;
  • CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
  • CLOSING -等待远程TCP对连接中断的确认;
  • LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
  • TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
  • CLOSED - 没有任何连接状态;

「两年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞( 1 ) 打赏

感谢您让我添加个鸡腿!

支付宝
微信
1

感谢您让我添加个鸡腿!

支付宝
微信
标签:

上一篇:

下一篇:

共有 0 条评论 - tcp

博客简介

一个不知名的前端菜鸟,梦想能够飞上青天!
掘金 思否 npm github

精彩评论

服务热线:
 177****6038

 QQ在线交流

 旺旺在线