文档章节

Tcp 为什么要三次握手

wtog
 wtog
发布于 2014/08/28 21:57
字数 289
阅读 456
收藏 15

发现自己对tcp还是不牢靠

曾经认为,tcp 建连的过程是这样的,

客户端 发送syn 到服务端 (第一次握手)

服务端 发送syn(并携带ack) 到客户端(第二次握手)

客户端 发送数据 到服务端(完全丢了第三次握手,汗颜。。)
------

现补充::::

tcp 建连过程

客户端 发送syn 到服务端 (第一次握手)

服务端 发送syn(并携带ack) 到客户端(第二次握手)

客户端 又发送syn(并携带ack) 到服务端(第三次握手)

三次握手之后,客户端和服务端才能愉快的传送数据了。。。

重点,为啥非要三次握手才可以?

为了保证服务端能接受到客户端的信息并能做出正确的应答而进行前俩次(1,2)握手,

为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后俩次(2,3)握手。

具体生动形象的例子,请参考网上大神的例子:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html


© 著作权归作者所有

wtog
粉丝 10
博文 25
码字总数 16975
作品 0
朝阳
程序员
私信 提问
加载中

评论(8)

wtog
wtog 博主

引用来自“国栋”的评论

作为发起端的客户端在收到服务器的第二次握手时,它就很清楚服务端是可以响应它的。所以此时它就可以向服务器端发送数据了,比如发送一个url请求过去。只是现在服务端还不确定客户端能否收到它的信息,所以按协议,客户端还有义务回应服务器发来的第二次握手信息,所以第三次客户端在发送数据时还要同时设置握手信息。所以这个第三次请求里一半是url请求,一半是握手。一半是握手用于响应服务器的第二次握手,一半是请求,在握手的同时把请求也发了,一次请求做了两件事。所谓两次半指的就是这个意思,实际上它也是做了三次握手。
我懂你的意思了,但是举个例子,A问b吃饭吗?b说吃。(俩次) A再问b,吃青菜吗?(三次)这里是a直接把青菜给b好一些?还是等b确定说想吃青菜,然后a再把青菜给b好一些?我还是觉得后者好一些。。。
国栋
国栋
作为发起端的客户端在收到服务器的第二次握手时,它就很清楚服务端是可以响应它的。所以此时它就可以向服务器端发送数据了,比如发送一个url请求过去。只是现在服务端还不确定客户端能否收到它的信息,所以按协议,客户端还有义务回应服务器发来的第二次握手信息,所以第三次客户端在发送数据时还要同时设置握手信息。所以这个第三次请求里一半是url请求,一半是握手。一半是握手用于响应服务器的第二次握手,一半是请求,在握手的同时把请求也发了,一次请求做了两件事。所谓两次半指的就是这个意思,实际上它也是做了三次握手。
wtog
wtog 博主

引用来自“国栋”的评论

其实“两次半”握手也是可以的,第三次时你就可以发数据了,但同时也设置syn就行了,这就是所谓的半次握手了,握手与发数据一齐做了。其实你握三次又能怎样呢?随时还是会断,后续发送还是要不断ack才行
如果是俩次半的话,那在半次握手的时候服务器宕机了,客户机是不是还要将数据发送出去? 我觉得三次握手有效的确定了客户机,服务机都是正常状态,表示双方都能正常接受发送数据,只有确定双方都正常,才能有效的传送数据吧~~ 建议,仔细阅读一下原文大神的例子:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html
国栋
国栋
其实“两次半”握手也是可以的,第三次时你就可以发数据了,但同时也设置syn就行了,这就是所谓的半次握手了,握手与发数据一齐做了。其实你握三次又能怎样呢?随时还是会断,后续发送还是要不断ack才行
wtog
wtog 博主

引用来自“徐永强”的评论

为了迎接dos
ddos??
wtog
wtog 博主

引用来自“BossLin”的评论

徐永强
徐永强
为了迎接dos
********
********
简明理解三次握手和四次挥手

注:三次握手和四次挥手本身并不复杂,但却可以从很多角度理解这两个过程,本文仅取一个视点解读,如有其它看法欢迎留言交流。 三次握手与四次挥手分别对应TCP连接建立过程与断开过程,先上T...

hello-k
2018/02/28
52
0
TCP 三次握手 和 四次挥手

概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手。 三次握手 下图为三次握手的流程图 下面通过...

jijs
2018/06/02
0
0
TCP三次握手/四次挥手

TCP 三次握手 TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:...

长平狐
2013/01/06
94
0
通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手

TCP建立连接时,为什么要进行三次挥手?   每一次TCP连接都需要三个阶段:连接建立、数据传送和连接释放。三次握手就发生在连接建立阶段。 在谢希仁著《计算机网络》第四版中讲三次握手的目的...

奔跑的阿飞
2018/06/26
0
0
为什么 TCP 建立会话要三次握手?

TCP 位于传输层,提供可靠的字节流服务。 所谓可靠的传输服务是指,能够把数据准确可靠的传给对方,并且 TCP 协议能够确认数据最终是否达到对方。 为了准确无误的将数据送达目标,TCP 协议采...

无夜之星辰
08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka再平衡机制详解

所谓的再平衡,指的是在kafka consumer所订阅的topic发生变化时发生的一种分区重分配机制。一般有三种情况会触发再平衡: consumer group中的新增或删除某个consumer,导致其所消费的分区需要...

爱宝贝丶
21分钟前
17
0
element 验证 请输入大于0的整数

data() { var validatePass = (rule, value, callback) => { // if (value <= 0) { // callback(new Error('请输入大于0的整数')); // } else { // c......

沉迷代码我爱学习
32分钟前
4
0
报表工具花钱or开源?我对比了这6个工具

近一年都在处理报表问题,调研了不少报表工具,也开发了适合公司业务的报表应用。分享一些关于如何选择报表工具的个人观点,希望对你有参考作用。 对于大部分企业来说,能花时间和人力去开发...

帆软
32分钟前
3
0
自建redis笔记--Redis cluster搭建

Redis cluster搭建 2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂度大大降...

北极之北
32分钟前
3
0
分享一个在caffe中实现的yolo层

这是别人实现的,是我移植到cc的cpu实现,可以实现caffe中使用yolo3,但是我感觉实际效果不如darknet 好点 template <typename Dtype>inline Dtype sigmoid(Dtype x){return 1. / (1. ...

开飞色
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部