我正在阅读computer network a top down approach 6th edition
,并且我在传输层。我理解客户端的数据包是如何通过客户端套接字发送到服务器的,但是当服务器收到数据包时,谁会读取数据包信息并将其传递给正确的进程?
对于 TCP,首先在两个进程之间建立连接。同样的问题,谁或什么在进行多路复用并传递数据包?
答案1
每个客户端/服务器 IP 连接由五个元素组成的元组标识:
- IP 协议
- 源地址
- 源端口
- 目标地址
- 目的端口
建立连接后,客户端和服务器 IP 堆栈都会在特定的内存表中记住相应的元组。稍后,当数据包到达时,它会搜索连接表以找到正确的元组并查看哪个特定进程正在监听它。
作为一个实际的例子,考虑在 Linux 机器上发出该命令netstat -n -t -p
。在我的 PC 上,它显示以下输出:
[root@centos-webdev ~]# netstat -n -t -p 活动互联网连接(无服务器) Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称 tcp 0 0 172.31.255.240:45414 1.1.8.246:25 TIME_WAIT - tcp 0 64 172.31.255.240:22 1.1.9.6:2205 已建立 10604/sshd
看一下最后一行:if 表明从远程地址 1.1.9.6、端口 2205 到本地 IP 172.31.255.240、端口 22 建立了 SSH 连接。最右边的字段说明 PID 为 10604 的 ssh 可执行文件正在监听属于该特定连接的数据包。