码迷,mamicode.com
首页 > 其他好文 > 详细

白话TCP三次握手

时间:2017-07-29 17:17:25      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:tcp三次握手   tcp   syn   established   ack   

      众所周知,TCP是可靠传输,那么什么叫可靠呢?简单的讲就是二者通信,只有当彼此都知道自己以及对方收发消息都正常时候,然后再进行数据传输。 而三次握手的目的就是为了确认双方收发消息都没问题。

      

      首先需要了解的是:

      

      1.TCP规定SYN=1时不能携带数据,也就是SYN置1就表示这是一个连接请求或连接接受报文

      2.连接建立后所有发送的报文的ACK必须为1

      3.当FIN=1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接

      

      三次握手:

      

      step1:客户端发送链接请求报文SYN=1 ACK=0到服务端,进入SYN_SEND状态,等待服务端确认  

      step2:服务端收到请求,向客户端发送SYN=1 ACK=1,服务端进入SYN_RECV状态

      step3:客户端收到消息,向服务端发送确认包,客户端和服务器进入ESTABLISHED状态


      那么问题来了,为啥需要三次握手确认?两次为啥不行?

      其实这就好比这样的一个场景:

      周末,小明想约小红出去浪,于是小明发微信消息给小红

      技术分享

      显然,小明发出第一条消息问小红在不在,这时候小明无法确定自己信息是否真的发出去了?小红会不会收不到信息?亦或小红收到信息了但是她回的消息自己没收到?.........这时候其实还是两眼一抹黑

      小明收到小红回复的消息,这时候小明知道,自己收发信息都是没问题的,而且小红的收发也是没问题。但是对小红来说,她只知道自己的收信没问题,但是自己发的信息有没有发出去并不知道.....

      小红这时候收到小明的回复,证明自己上一条回复小明的消息发送成功,此时也说明自己跟小明的收发消息都正常。。。。可以进一步深聊


      至此,TCP三次握手完成,是不是很简单?





本文出自 “愤怒的小甲鱼” 博客,请务必保留此出处http://qjslovemsn.blog.51cto.com/10615974/1951956

白话TCP三次握手

标签:tcp三次握手   tcp   syn   established   ack   

原文地址:http://qjslovemsn.blog.51cto.com/10615974/1951956

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!