正在看计算机网络自低向上。看到欢迎套接字这里有两个问题。
三次握手的第一次和第三次都是发送给服务器,而且都是发送给了服务器的欢迎套接字?因为从第二个图中,看起来是这个意思。
三次握手以后,客户端再向服务器发送什么数据时,来自客户端的数据到达目的地主机的运输层之后,会发现两个 socket 都满足目的地的端口号(欢迎套接字和连接套接字),那它怎么知道该传给 欢迎套接字 还是 连接套接字呢? ( https://www.zhihu.com/question/54182420/answer/138476746 ,从知乎这个回答里,说了欢迎套接字和连接套接字是具有相同端口的。)
欢迎套接字和连接套接字是处于 运行在服务器主机上的两个进程吗?
本人网络太菜,各位大佬求解答
1
misaka19000 2021-02-06 22:09:48 +08:00
欢迎套接字和连接套接字是啥?完全看不懂
|
2
misaka19000 2021-02-06 22:11:26 +08:00
TCP 连接在建立前(即三次握手)是客户端主动发起第一个 syn,之后服务端回复 ack 以及顺便向客户端发送 syn,随后客户端向服务端发送 ack,到此连接建立
连接建立后就不存在客户端和服务端的区别了,双方发送数据都是对等的 |
3
lujie2012 2021-02-06 22:21:05 +08:00
看书没有用,都是死的。你自己去抓包,看代码,运行一下,实践才是靠谱的。
|
4
qakito 2021-02-06 22:29:59 +08:00 1
listen socket 只用来接收客户端的 TCP 连接
1.完成握手后,该 client 连接信息(IP:PORT + SERVER:PORT)加入 listen socket 的连接完成队列,同时 accept 函数返回 2.accept 函数从 listen socket 的连接完成队列中取队列元素,并生成新的 socket 与其关联 3.server 可以通过新的 socket 与 client 通信 代码中,listen socket 只需要完成 fd = socket(AF_INET, SOCK_STREAM, 0); bind(fd, 相应的 TCP 端口) listen(fd) new_conn = accept(fd) 当新 TCP 连接完成,new_conn 即可用于实际数据通信 至于 new_conn 的实际交互流程,可以放在子进程(or 线程),也可以在同一个进程里完成 你要的答案 TCP/IP 详解卷 2 里有 socket 的相关实现 |
5
qakito 2021-02-06 22:31:54 +08:00
另,关于 TCP server 在 unix 网络编程中也有相关章节介绍
无论是子进程的方式,还是 select 复用 |
6
oaix 2021-02-06 22:39:57 +08:00 1
> 三次握手的第一次和第三次都是发送给服务器,而且都是发送给了服务器的“欢迎套接字”?
是的 > 那它怎么知道该传给 欢迎套接字 还是 连接套接字呢? 根据来 src 来区分,如果已经建立连接了,就发送到“连接套接字” > 欢迎套接字和连接套接字是处于 运行在服务器主机上的两个进程吗? 不是,“连接套接字”是通过在“欢迎套接字”上调用 accept 调用返回的。 |
7
hxndg 2021-02-06 23:11:18 +08:00
坦白讲,我也不知道欢迎套接字是啥。。。。
我主要好奇的是 《计算机网络自底向上》是个啥书? 我只知道《计算机网络自顶向下》特别好。 |
8
amiwrong123 OP @qakito #4
谢谢回答啦。那比如下面这个 tcp server 的简单 py 实现: 红框里那一句得到的数据 sentence,就是第一个图里客户端的第三次握手顺带发过来的 http 请求报文吗?(我没理解错吧,第三次握手时,客户端会顺便发送 http 请求报文) |
9
amiwrong123 OP |
10
amiwrong123 OP |
11
anthow 2021-02-07 09:16:17 +08:00
欢迎套接字,还是第一次听说。
|
12
dongtingyue 2021-02-07 09:51:02 +08:00
这书看起来好古老
|
13
zhangsanfeng2012 2021-02-07 09:56:22 +08:00
监听 socket 和 已连接 socket 的意思吗?
|
14
newmlp 2021-02-07 10:53:29 +08:00
tcp 协议那么复杂,够写一本书了,你用两张图就能搞清啦?
|
15
ooxiaoming 2021-02-07 11:31:58 +08:00
看 tcp/ip 详解...
|
16
yamasa 2021-02-07 12:24:11 +08:00
> 看 tcp/ip illustrated 或者 computer network: A top down approach, 要看原版, 绕过垃圾翻译成本。
> 边看的时候自己用 wireshark 抓包玩起来,只看书都是务虚的,很多细节看完没几天忘光。 |
17
togou 2021-02-07 12:27:15 +08:00
1,2 :欢迎套接字 欢迎之后 也就是 accept 完成了 为给你生成一个新的 fd 那个 fd 所对应的 ip 端口 就是欢迎套接字监听的端口
对端的套接字连接 connect 之后 那个 fd 与服务端 ip:port <=> ip:port 这个四元组 就是一个 tcp 连接 3.套接字编程实现是 文件描述符 欢迎套接字 与 连接的套接字是两个不同的 fd |
18
julyclyde 2021-02-07 15:02:38 +08:00
listen socket
connection socket |