初学 socks5,想问一下 socket 的握手阶段是必须的吗?

2019-11-14 16:25:07 +08:00
 different

网上看到 socks5 协议分为三个阶段,握手阶段、建立连接和传输阶段;

那么想问一下,这个握手阶段(非 tcp 握手吧),是必须的吗?譬如我在网上看到很多个人编写的一些 client ,server 之间的聊天或者其他通讯并没有进行握手,直接 connect 或者 accept 之后就直接发送消息了。

非常感谢。

2147 次点击
所在节点    Linux
22 条回复
imlink
2019-11-14 16:38:57 +08:00
第一个问题:是。
connect 是在 socks5 的协议商讨之后。
ungrown
2019-11-14 16:44:20 +08:00
握一次,只要不断,就可以一直传输了
luckyrayyy
2019-11-14 16:46:58 +08:00
那是把底层隐藏了吧
Orenoid
2019-11-14 17:06:51 +08:00
网上那些 socket 聊天 demo 大多都是没有制定应用层协议的,表面上能够跑通而已
different
2019-11-14 17:21:19 +08:00
@imlink 如果是的话,为何我们所看到的很多程序(网上的 demo )都没有握手?

感觉应该不是被隐藏了,@luckyrayyy,我看到 accept 浏览器发过来的 socket 要求需要“显式”回复响应握手。这些握手都是在我 accept 之后操作的。

@Orenoid
也就是说,其实这个握手只是一个规范,但是实操当中,socket 什么都可以发,不一定遵循这个规范是吗?
different
2019-11-14 17:22:37 +08:00
@luckyrayyy 刚刚没有成功 @你,再 @一次
reus
2019-11-14 17:30:31 +08:00
socks5 是 socks5
socket 是 socket
1KN6sAqR0a57no6s
2019-11-14 17:32:09 +08:00
看了楼上的回复,我知道我为什么看不懂楼主的问题了
zhs227
2019-11-14 17:36:07 +08:00
楼主,你应该看的是 TCP socket 编程,而不是参考一份 socks5 的文档
different
2019-11-14 17:38:07 +08:00
@reus
@YuxiangLuo 啊哈哈,请原谅我,容我理理思路。
morethansean
2019-11-14 17:39:15 +08:00
@YuxiangLuo #8
……+1,拉到第七楼之前都一脸懵逼,星际韩宗的感觉……
windyboy
2019-11-14 17:57:14 +08:00
socket 是设备吧
whoami9894
2019-11-14 18:07:38 +08:00
socks5 应用层协议建立在 tcp 之上,先 tcp socket 握手建立连接,socks5 再通过这条连接发送握手包
zbinlin
2019-11-14 18:11:05 +08:00
socks5 跟 socket 不是同一个东西来的
liuminghao233
2019-11-14 18:22:18 +08:00
必须的
你说别的通讯没有握手什么的
人家都不是 socks5 协议
unixeno
2019-11-14 18:37:26 +08:00
socks5 是一个协议,和 http,ftp,之类的是一个等级的东西,属于应用层
socket 是一套 api,用于实现网络通信的,对应的是传输层
imlink
2019-11-14 20:20:59 +08:00
@different socket5 如 16 楼描述是一种应用层的协议。它里面的握手是区别于 tcp 的 3 次握手,是用来交互协议头和认证信息。
lynskylate
2019-11-14 20:43:04 +08:00
...socks5 是基于 tcp 的应用层协议,是一种作为代理的协议。
你说的握手如果指的是 tcp 握手,在你用 socket 编程的时候其实是隐藏的
different
2019-11-14 22:04:05 +08:00
@windyboy
@whoami9894
@zbinlin
@liuminghao233
@unixeno
@imlink
@lynskylate


谢谢,蜜汁尴尬,我错了,搞混啦。
different
2019-11-15 16:10:49 +08:00
@imlink
@lynskylate
@liuminghao233
@whoami9894

想问一下,目前我认知到的是,不知道是否正确:
socks5 其实就是一个协议,就是客户端跟服务端之间的认证方式(算是一种约定,这种约定的内容是通过 socket 传输),认证完毕之后,就跟 socks5 协议没有任何关系了(因为他只是在握手阶段一个约定),之后,客户端与服务端各自使用 socket 进行内容传输对吧,这些传输的内容是随便的(反正连接已经建立了,后面的内容格式与 socks5 没有任何关系)


想问一下,以上我的理解是否正确?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/619581

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX