V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
FutherAll
V2EX  ›  程序员

有非 socket 实现的 tcp 协议吗

  •  1
     
  •   FutherAll · Jul 23, 2020 · 4567 views
    This topic created in 2116 days ago, the information mentioned may be changed or developed.

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

    27 replies    2020-07-28 11:01:42 +08:00
    choury
        1
    choury  
       Jul 23, 2020   ❤️ 1
    你是想用 dpdk 吗
    cheneydog
        2
    cheneydog  
       Jul 23, 2020   ❤️ 1
    嵌入式操作系统里有那种纯粹的 tcp 协议包,底层是自己处理芯片驱动,也可以随便改
    codehz
        3
    codehz  
       Jul 23, 2020   ❤️ 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  
       Jul 23, 2020 via iPhone
    quic,参考一下
    kilen3a
        5
    kilen3a  
       Jul 23, 2020   ❤️ 1
    当然有,非 Unix 就没 socket 啊
    wellsc
        6
    wellsc  
       Jul 23, 2020
    dkpk
    sujin190
        7
    sujin190  
       Jul 23, 2020
    写个驱动直接操作网卡?但是又有个啥用呢,该解决的问题你还是得解决一遍啊
    est
        8
    est  
       Jul 23, 2020
    @xumng123 非 tcp,但是依然基于 udp socket 的。
    shansing
        9
    shansing  
       Jul 23, 2020
    又一个 XY problem ?
    nightwitch
        10
    nightwitch  
       Jul 23, 2020   ❤️ 1
    我只贴个图。。你这个由 socket 实现 TCP 让我有点蒙
    Mistwave
        11
    Mistwave  
       Jul 23, 2020 via iPhone
    @nightwitch 请问这是哪本书的图?
    ZehaiZhang
        12
    ZehaiZhang  
       Jul 23, 2020
    请教:socket 不是基于 TCP/IP 协议的么,lz 的意思是,(非) socket 实现 TCP 协议?
    Keyes
        13
    Keyes  
       Jul 23, 2020 via iPhone
    socket 就像字面意思一样是个套儿而已
    nightwitch
        14
    nightwitch  
       Jul 23, 2020   ❤️ 1
    @Mistwave The Linux Programming Interface 有中文版
    Leigg
        15
    Leigg  
       Jul 23, 2020 via Android   ❤️ 1
    socket 只是个名字,表示<hostname:port>,你们不要针对它好不咯,楼上一堆瞎扯,还非 unix 就没有 socket...
    Shazoo
        16
    Shazoo  
       Jul 23, 2020   ❤️ 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  
       Jul 23, 2020   ❤️ 1
    你这里的 socket 指 Berkeley socket 吧? wikipedia 说得很清楚了: https://en.wikipedia.org/wiki/Berkeley_sockets
    这是一种 API,当然可以有其他的 API,windows 的 TCP 实现就不是用 posix socket 的。
    FutherAll
        18
    FutherAll  
    OP
       Jul 23, 2020
    我理解的是 socket 是一种 Interface,是 BSD 对 tcp 协议抽象出的一组接口,并且在 Unix-link 的操作系统上都实现了 socket,并提供给应用使用;我是想理论上来说应该是有非 socket 实现的 tcp 协议,没 Google 到所以来问问,顺便理清一下思路。
    多谢楼上各位的回答。
    misaka19000
        19
    misaka19000  
       Jul 23, 2020
    你甚至可以自己操作网卡发送 raw 数据包
    VDimos
        20
    VDimos  
       Jul 23, 2020 via Android
    完全可以,你只要愿意,最底层可以直接通过串口来写
    kilen3a
        21
    kilen3a  
       Jul 23, 2020
    @Leigg 你在搞笑?楼主说的明显是 socket API/berkeley socket 好吗
    Mistwave
        22
    Mistwave  
       Jul 23, 2020
    @nightwitch 非常感谢!
    yuyuko
        23
    yuyuko  
       Jul 24, 2020 via iPhone
    XTI ?
    realpg
        24
    realpg  
    PRO
       Jul 24, 2020
    @FutherAll #18
    直接操作网卡,发 raw data packets
    sariya
        25
    sariya  
       Jul 24, 2020 via Android
    用 USB 协议,232 发都可以,只是一个载体
    sbilly
        26
    sbilly  
       Jul 28, 2020
    印象中 dpdk 并不包含协议栈,不知道新版本是不是已经包含了。你可以用 “用户态协议栈” 或者 “userland tcp ip stack” 搜一下。IwIP 、libuinet 、…… 之类开源的以外,还有比较多的商业产品。
    FutherAll
        27
    FutherAll  
    OP
       Jul 28, 2020
    @sbilly 搜到了,发现了新大陆。非常感谢!!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3015 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 14:46 · PVG 22:46 · LAX 07:46 · JFK 10:46
    ♥ Do have faith in what you're doing.