1
rensuperk 2018-02-07 11:50:54 +08:00
UDP 协议,可以了解下
|
2
scriptB0y OP |
3
zhengxiaowai 2018-02-07 11:57:58 +08:00 2
看看 tcp fast open
|
4
lhx2008 2018-02-07 12:01:24 +08:00 via Android 1
第三个包带数据好像是可以的,但是必须也要有 ack,就是三次握手和第四次数据合并在一起了而已
|
5
feather12315 2018-02-07 12:03:10 +08:00 via Android 1
这是一个数学问题,大于 3 次与 3 次效果一样,小于 3 次就不一样了
|
7
hjc4869 2018-02-07 12:10:39 +08:00 1
TFO,SYN 包可以设 PSH bit 并且带上 data (也可以不带 PSH 但是带 data ),直接一来一回就建立连接顺便还能发点数据。
|
8
Shura 2018-02-07 12:42:36 +08:00
https://zh.wikipedia.org/wiki/TCP%E5%BF%AB%E9%80%9F%E6%89%93%E5%BC%80
利用三次握手的 SYN 报文来传输应用数据,更加实用。 |
10
hxndg 2018-02-07 13:25:11 +08:00
我觉得这个没必要说的那么麻烦,打个比喻:
登山的时候,上面一个人拉着绳子,你在下面准备登山,你不知道他好没好,他不知道你好没好,你们必须得两个人各自扥一下绳子来告诉对方,这个是通知作用。 除非你知道对方好了,直接爬上去告诉他:我要爬上去了。 |
11
cloverii 2018-02-07 13:29:29 +08:00 via Android
所以你没解释两次为啥不行?
|
12
eeljiang 2018-02-07 13:36:54 +08:00 2
握手没学到,学到了 扥[dèn]
|
14
LGA1150 2018-02-07 13:47:37 +08:00 via Android
HTTP 响应可以放在 FIN 里面
|
15
GjriFeu 2018-02-07 14:06:36 +08:00
假设 A 端发起关闭连接请求, 四次挥手中第二次的作用是通知 A 端,我收到了你的关闭请求,我也准备关闭;这时 B 端写缓冲区如果有数据的话会将这些数据发送完成再发 FIN 给 A 端。 这么说是不是 B 端写缓冲区没有数据 所以将第二次和第三次挥手合并到一个报文中了
|
16
ai277014717 2018-02-07 14:22:29 +08:00
用 UDP 假装 TCP
|
17
scriptB0y OP @GjriFeu 我的理解是这样的,而且这是一个通常的做法——将 2,3 合并。
> It is also possible to terminate the connection by a 3-way handshake, when host A sends a FIN and host B replies with a FIN & ACK (merely combines 2 steps into one) and host A replies with an ACK.[12] This is perhaps the most common method. https://en.wikipedia.org/wiki/Transmission_Control_Protocol |
18
BXLR 2018-02-07 15:32:10 +08:00
总想搞个大新闻
|
19
0ZXYDDu796nVCFxq 2018-02-07 16:18:25 +08:00
如果两次握手就能建立连接,那 DDoS 的高兴死了
|
20
kaiser1992 2018-02-07 16:58:07 +08:00
双方互相确认的机制,保证连接建立。
|
22
goofool 2018-02-07 17:38:55 +08:00
不可以啊,协议规定的东西,不按照协议来就不是 TCP 了
|
24
pusidun 2018-02-08 09:07:09 +08:00
原来楼主就是那个写怎么学 python 的大神
我看你的博客,意思是想让第三次握手的 ACK 连着下一次的数据一起发送,对吧? 但是为什么要三次握手?现在假设 A 是客户端,B 是服务器。 第一次:A->B 这个过程,B 确定了 A 的发送没问题 第二次:B->A 这个过程,A 确定了 B 的接收没问题,同时确定了 A 自己第一个过程里面发送的 ACK,B 确实收到了,即自己的发送没问题。 第三次:A->B 这个过程,同样道理,B 确定了自己发送没问题,A 的接收也没问题。 经过这 3 次,A,B 双方互相确认了对方的发送和接收都没问题,所以保证了这是一个可靠传输。才开始传输数据 自己的看法,错了轻喷 |
25
scriptB0y OP @pusidun 额 不是大神…… 也是在学习
我觉得“保证了这是一个可靠传输”这个不太准确。因为 TCP 的可靠性是靠 ACK 确认保证的。所以即使不建立链接呢,只要每一次发送都有 ACK,没有 ACK 就重传也可以保证是可靠传输。 我博客可能没说明白…… 我最后的结论是第三次 ACK 带数据发送是没有问题的,甚至第一次发送的 SYN 也是可以带数据的。 |
26
joyful 2018-02-09 12:31:21 +08:00
三次握手初始化连接; ACK、交验和等保证可靠传输。各司其职。
|