V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FutherAll
V2EX  ›  程序员

有非 socket 实现的 tcp 协议吗

  •  1
     
  •   FutherAll · 2020-07-23 17:00:26 +08:00 · 3860 次点击
    这是一个创建于 1577 天前的主题,其中的信息可能已经有所发展或是发生改变。

    或者有不基于 socket 实现的 http server 吗?

    27 条回复    2020-07-28 11:01:42 +08:00
    choury
        1
    choury  
       2020-07-23 17:07:33 +08:00   ❤️ 1
    你是想用 dpdk 吗
    cheneydog
        2
    cheneydog  
       2020-07-23 17:10:10 +08:00   ❤️ 1
    嵌入式操作系统里有那种纯粹的 tcp 协议包,底层是自己处理芯片驱动,也可以随便改
    codehz
        3
    codehz  
       2020-07-23 17:18:32 +08:00   ❤️ 2
    socket 只是 unix 那边的东西,win 这边完全可以绕开 winsocks(1/2)实现 http 。。。比如那个著名的 http.sys https://docs.microsoft.com/en-us/windows/win32/http/http-server-sample-application
    xumng123
        4
    xumng123  
       2020-07-23 17:20:29 +08:00 via iPhone
    quic,参考一下
    kilen3a
        5
    kilen3a  
       2020-07-23 17:26:13 +08:00   ❤️ 1
    当然有,非 Unix 就没 socket 啊
    wellsc
        6
    wellsc  
       2020-07-23 17:33:56 +08:00
    dkpk
    sujin190
        7
    sujin190  
       2020-07-23 17:35:53 +08:00
    写个驱动直接操作网卡?但是又有个啥用呢,该解决的问题你还是得解决一遍啊
    est
        8
    est  
       2020-07-23 17:40:00 +08:00
    @xumng123 非 tcp,但是依然基于 udp socket 的。
    shansing
        9
    shansing  
       2020-07-23 17:40:53 +08:00
    又一个 XY problem ?
    nightwitch
        10
    nightwitch  
       2020-07-23 18:14:17 +08:00   ❤️ 1
    我只贴个图。。你这个由 socket 实现 TCP 让我有点蒙
    Mistwave
        11
    Mistwave  
       2020-07-23 18:37:29 +08:00 via iPhone
    @nightwitch 请问这是哪本书的图?
    ZehaiZhang
        12
    ZehaiZhang  
       2020-07-23 18:51:45 +08:00
    请教:socket 不是基于 TCP/IP 协议的么,lz 的意思是,(非) socket 实现 TCP 协议?
    Keyes
        13
    Keyes  
       2020-07-23 18:57:00 +08:00 via iPhone
    socket 就像字面意思一样是个套儿而已
    nightwitch
        14
    nightwitch  
       2020-07-23 19:03:55 +08:00   ❤️ 1
    @Mistwave The Linux Programming Interface 有中文版
    Leigg
        15
    Leigg  
       2020-07-23 19:34:41 +08:00 via Android   ❤️ 1
    socket 只是个名字,表示<hostname:port>,你们不要针对它好不咯,楼上一堆瞎扯,还非 unix 就没有 socket...
    Shazoo
        16
    Shazoo  
       2020-07-23 19:57:33 +08:00   ❤️ 1
    楼主应该看下 #10 楼的解释。

    给你明确下,Socket 并不是使用 tcp 协议唯一路径,但是确实是最最流行和通用的(考虑下 cross-platform )方案。你可以把 socket 的理解为一套使用 tcp 的库。毕竟谁也不太想考虑 tcp 包序,syn 握手啥的。

    你可以参考下嵌入式设备最长使用的 Lwip,使用 tcp 方案应该有好几种,记得可以使用 netconn 方案啥的。

    在高级 os 内,你可以直接操作驱动来构造 tcp 报文,然后 send/recv 。一些异性报文或者 exploit 就是这么做到的。可以参考下 winpcap,或者 winddk 直接造。( unix like 的,可以直接用 socket 的 raw 方案做报文,不需要直接 drv 层。windows 之前可以,后来出于安全,给禁掉了。忘记是 win2k 还是 xp 上禁掉的,当时死了一批猴子脚本工具)。

    他们说的 dpdk,我记得是修改驱动的中断方式,貌似和 socket 关系不大。那是做高频和游戏高并发用的。
    reus
        17
    reus  
       2020-07-23 19:57:43 +08:00   ❤️ 1
    你这里的 socket 指 Berkeley socket 吧? wikipedia 说得很清楚了: https://en.wikipedia.org/wiki/Berkeley_sockets
    这是一种 API,当然可以有其他的 API,windows 的 TCP 实现就不是用 posix socket 的。
    FutherAll
        18
    FutherAll  
    OP
       2020-07-23 21:23:45 +08:00
    我理解的是 socket 是一种 Interface,是 BSD 对 tcp 协议抽象出的一组接口,并且在 Unix-link 的操作系统上都实现了 socket,并提供给应用使用;我是想理论上来说应该是有非 socket 实现的 tcp 协议,没 Google 到所以来问问,顺便理清一下思路。
    多谢楼上各位的回答。
    misaka19000
        19
    misaka19000  
       2020-07-23 21:25:28 +08:00
    你甚至可以自己操作网卡发送 raw 数据包
    VDimos
        20
    VDimos  
       2020-07-23 21:34:59 +08:00 via Android
    完全可以,你只要愿意,最底层可以直接通过串口来写
    kilen3a
        21
    kilen3a  
       2020-07-23 21:48:46 +08:00
    @Leigg 你在搞笑?楼主说的明显是 socket API/berkeley socket 好吗
    Mistwave
        22
    Mistwave  
       2020-07-23 22:16:50 +08:00
    @nightwitch 非常感谢!
    yuyuko
        23
    yuyuko  
       2020-07-24 02:43:36 +08:00 via iPhone
    XTI ?
    realpg
        24
    realpg  
       2020-07-24 12:05:37 +08:00
    @FutherAll #18
    直接操作网卡,发 raw data packets
    sariya
        25
    sariya  
       2020-07-24 12:14:15 +08:00 via Android
    用 USB 协议,232 发都可以,只是一个载体
    sbilly
        26
    sbilly  
       2020-07-28 10:33:42 +08:00
    印象中 dpdk 并不包含协议栈,不知道新版本是不是已经包含了。你可以用 “用户态协议栈” 或者 “userland tcp ip stack” 搜一下。IwIP 、libuinet 、…… 之类开源的以外,还有比较多的商业产品。
    FutherAll
        27
    FutherAll  
    OP
       2020-07-28 11:01:42 +08:00
    @sbilly 搜到了,发现了新大陆。非常感谢!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2772 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 08:00 · PVG 16:00 · LAX 00:00 · JFK 03:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.