有非 socket 实现的 tcp 协议吗

2020-07-23 17:00:26 +08:00
 FutherAll

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

3900 次点击
所在节点    程序员
27 条回复
choury
2020-07-23 17:07:33 +08:00
你是想用 dpdk 吗
cheneydog
2020-07-23 17:10:10 +08:00
嵌入式操作系统里有那种纯粹的 tcp 协议包,底层是自己处理芯片驱动,也可以随便改
codehz
2020-07-23 17:18:32 +08:00
socket 只是 unix 那边的东西,win 这边完全可以绕开 winsocks(1/2)实现 http 。。。比如那个著名的 http.sys https://docs.microsoft.com/en-us/windows/win32/http/http-server-sample-application
xumng123
2020-07-23 17:20:29 +08:00
quic,参考一下
kilen3a
2020-07-23 17:26:13 +08:00
当然有,非 Unix 就没 socket 啊
wellsc
2020-07-23 17:33:56 +08:00
dkpk
sujin190
2020-07-23 17:35:53 +08:00
写个驱动直接操作网卡?但是又有个啥用呢,该解决的问题你还是得解决一遍啊
est
2020-07-23 17:40:00 +08:00
@xumng123 非 tcp,但是依然基于 udp socket 的。
shansing
2020-07-23 17:40:53 +08:00
又一个 XY problem ?
nightwitch
2020-07-23 18:14:17 +08:00
我只贴个图。。你这个由 socket 实现 TCP 让我有点蒙
Mistwave
2020-07-23 18:37:29 +08:00
@nightwitch 请问这是哪本书的图?
ZehaiZhang
2020-07-23 18:51:45 +08:00
请教:socket 不是基于 TCP/IP 协议的么,lz 的意思是,(非) socket 实现 TCP 协议?
Keyes
2020-07-23 18:57:00 +08:00
socket 就像字面意思一样是个套儿而已
nightwitch
2020-07-23 19:03:55 +08:00
@Mistwave The Linux Programming Interface 有中文版
Leigg
2020-07-23 19:34:41 +08:00
socket 只是个名字,表示<hostname:port>,你们不要针对它好不咯,楼上一堆瞎扯,还非 unix 就没有 socket...
Shazoo
2020-07-23 19:57:33 +08:00
楼主应该看下 #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
2020-07-23 19:57:43 +08:00
你这里的 socket 指 Berkeley socket 吧? wikipedia 说得很清楚了: https://en.wikipedia.org/wiki/Berkeley_sockets
这是一种 API,当然可以有其他的 API,windows 的 TCP 实现就不是用 posix socket 的。
FutherAll
2020-07-23 21:23:45 +08:00
我理解的是 socket 是一种 Interface,是 BSD 对 tcp 协议抽象出的一组接口,并且在 Unix-link 的操作系统上都实现了 socket,并提供给应用使用;我是想理论上来说应该是有非 socket 实现的 tcp 协议,没 Google 到所以来问问,顺便理清一下思路。
多谢楼上各位的回答。
misaka19000
2020-07-23 21:25:28 +08:00
你甚至可以自己操作网卡发送 raw 数据包
VDimos
2020-07-23 21:34:59 +08:00
完全可以,你只要愿意,最底层可以直接通过串口来写

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

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

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

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

© 2021 V2EX