关于 socket 的一些问题
source link: https://www.v2ex.com/t/817019
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
最近在学习计算机网络,看到 socket 时产生了一个问题。socket 是 tcp/udp 等的一个抽象接口,那么是不是几乎所有使用 tcp/udp 来建立连接的都需要通过 socket 来调用 tcp/udp ?比如 http 协议等。 网络传输的报文是在传输层来寻找对应端口号,这个是不是就是通过 socket 来完成的? socket 在客户端与服务端建立连接时会生成一个新的 socket ,在客户端或者服务端调用 close 方法时断开这个连接,那么 http 协议每次请求是不是都会创建一个 socket?在服务端响应完毕后关闭这个 socket 连接?
第 1 条附言 · 13 小时 15 分钟前
mangoDB 15 小时 49 分钟前
ye4tar 15 小时 10 分钟前
socket 是给你一种实现,也就是程序,库,完整的实现。
你构建的程序无非是使用 socket 库,如果你懂硬件,手里有网卡驱动,或者干脆网卡都是你自己生产的,且符合标准,那你完全可以自己在驱动层自己完成网络交互,网卡无非就是把数据变成一种信号,对端再把这个信号解码成数据而已嘛!
BigMountain 15 小时 3 分钟前
其他的例如 http resp 等等协议都是基于 tcp 协议。 如果你需要实现一个 http 协议( http 基于 tcp ) 那么就通过 socket 进行编解码转换来实现 http 。
lesismal 14 小时 47 分钟前 2
1. 入门阶段,如果不看图解这本、直接啃详解或者其他数很吃力要花费很久;
2. 没有详解这本,图解又太简单了,了解不到深入细致;
3. 没有 wireshark ,看再多也难记得住,实践出真知。另外 tcp 是大头,把 tcp 11 种状态转换图放在桌面上,配合抓包看 tcp 各种流程,tcp 搞熟悉了其他的多看看就容易得多了
cweijan 14 小时 22 分钟前
1. Socket 是由操作系统实现的, 所以说是由操作操作寻找端口比较合理
2. 不是每个 HTTP 请求都会创建一个新的 Socket(即 TCP 连接), 例如浏览器对 HTTP 实现了 Keep-Alive 机制, 间隔时长较短的 HTTP 请求会复用 TCP 连接, 不会重新创建
CRVV 14 小时 13 分钟前
它是一个接口( API, interface )而不是实现( implementation )。
> 是不是几乎所有使用 tcp/udp 来建立连接的都需要通过 socket 来调用 tcp/udp ?
TCP/UDP 也可以用其它的接口,比如 https://www.nongnu.org/lwip/2_0_x/raw_api.html
但是在通常的操作系统上( Windows/Linux/BSD/macOS )用的接口都是 socket
> 网络传输的报文是在传输层来寻找对应端口号,这个是不是就是通过 socket 来完成的?
端口号这些属于网络协议的实现,和接口没关系。
其它和 HTTP 相关的问题,那是 HTTP 协议的实现,和 socket 更没关系了。
liu1996 13 小时 17 分钟前
unixeno 12 小时 23 分钟前 via Android
对于客户端来说,你 connect 时就会进行握手,完成之后才会返回你 fd 。
对于服务端,你 accept 的时候系统会帮你处理握手
git00ll 6 小时 19 分钟前
只不过用完后 socket 连接会放到池里复用。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK