HTTP协议之TCP之三次握手

TCP 创建连接中三次握手都做了那些事?

第一次:
客户端:在吗?
服务端:在。

第二次:
客户端:可用吗?
服务端:可用。你确定要用吗?

第三次:
客户端:是。我们开始吧。
服务端:好。


链接创建成功。开始通信。


——————————————————————————————————————


但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?
我们举一个现实生活中两个人进行语言沟通的例子来模拟三次握手。

第一次对话:

老婆让甲出去打酱油,半路碰到一个朋友乙,甲问了一句:哥们你吃饭了么?

结果乙带着耳机听歌呢,根本没听到,没反应。甲心里想:跟你说话也没个音,不跟你说了,沟通失败。说明乙接受不到甲传过来的信息的情况下沟通肯定是失败的。

如果乙听到了甲说的话,那么第一次对话成功,接下来进行第二次对话。

第二次对话:

乙听到了甲说的话,但是他是老外,中文不好,不知道甲说的啥意思也不知道怎样回答,于是随便回答了一句学过的中文 :我去厕所了。甲一听立刻笑喷了,“去厕所吃饭”?道不同不相为谋,离你远点吧,沟通失败。说明乙无法做出正确应答的情况下沟通失败。

如果乙听到了甲的话,做出了正确的应答,并且还进行了反问:我吃饭了,你呢?那么第二次握手成功。

通过前两次对话证明了乙能够听懂甲说的话,并且能做出正确的应答。接下来进行第三次对话。

第三次对话:

甲刚和乙打了个招呼,突然老婆喊他,“你个死鬼,打个酱油咋这么半天,看我回家咋收拾你”,甲是个妻管严,听完吓得二话不说就跑回家了,把乙自己晾那了。乙心想:这什么人啊,得,我也回家吧,沟通失败。说明甲无法做出应答的情况下沟通失败。

如果甲也做出了正确的应答:我也吃了。那么第三次对话成功,两人已经建立起了顺畅的沟通渠道,接下来开始持续的聊天。


————————————————————————————————————————

实际上就是为了两边的请求都能被识别,所以逻辑上最少三次。


————————————————————————————————————————

不过个人感觉为什么是三次而不是二次,不是因为为了证明甲能听懂乙并回应(第二次乙能正确的响应甲,说明俩人之间沟通已无障碍了),而是怕出现以下情况而浪费感情。

这个情景是这样的:
甲在路上跟乙打招呼,由于刮风,这句活被吹跑了(延迟)。
甲又跟乙打了个招呼,这次乙听到了并作出了回应。此时不管是三次握手还是两次握手两个人都能愉快的沟通。0.1秒后俩人四次挥手告别了。此时被风刮跑的那句话又传到了乙的耳朵里,乙认为甲又要跟他沟通,所以做出了响应的回应。问题出现了:假如采用2次握手乙就认定甲要跟他沟通,于是就不停的等,浪费感情。可如果是采用3次握手,乙等了一会后发现甲没有回应,他就认为甲走了,然后自己也就走了!




————————————————————————————————————————


所以三次握手是保证了:双工和容错。












引用:
http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html




-



猜你喜欢

转载自lixh1986.iteye.com/blog/2352304