• 请不要在回答技术问题时复制粘贴 AI 生成的内容
FutherAll
V2EX  ›  程序员

有非 socket 实现的 tcp 协议吗

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

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

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