V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
different
V2EX  ›  Linux

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

  •  
  •   different · 2019-11-14 16:25:07 +08:00 · 1947 次点击
    这是一个创建于 1617 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    非常感谢。 MN92Js.png

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

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

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


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

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


    想问一下,以上我的理解是否正确?
    WordTian
        21
    WordTian  
       2019-11-26 18:14:36 +08:00
    是,socks 协议版本有很多种,sock4,sock5,好像还一个 sock4a 啥的,各种版本的实现还是有区别的。在握手阶段得协商好协议版本。不然后面没得玩。
    WordTian
        22
    WordTian  
       2019-11-26 18:19:01 +08:00
    @WordTian 另外同时还得确认认证的方式。要是对不上,后面也没得玩
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3295 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 12:28 · PVG 20:28 · LAX 05:28 · JFK 08:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.