- 论坛徽章:
- 4
|
一个TCP连接是由4元组唯一确定的(remote ip, remote port, local ip, local port), 假设服务端使用(local ip, local port), 那么服务端bind在port = 8080后, listen进入监听状态.
之后, 有客户端(remote ip, remote port) connect (local ip, local port), 此后三路握手完成, 客户端与服务端建立了TCP连接, 就是(remote ip, remote port, local ip, local port), 服务端通过accept可以取出这个连接对应的socket, 其中local ip是客户端请求到来的网卡IP(因为服务端向此网卡送出发往remote的包一定也能路由回去), local port(8080, 和监听port一样), remote ip, remote port是该客户端的IP和一个PORT, 这就是一个完整的四元组, 确定了一个TCP连接, 这是一个新的SOCKET, 是accept来的. 与监听socket没有关系了, 监听socket仍然在监听, 只不过监听socket的local port和accepted socket的local port都是8080, 这是毫无问题的, 这就是事实, 因为监听socket只用于监听在给定PORT, 连接建立完成后是4元组, 虽然local port都是8080, 但remote ip, remote port这个2元组都是不同的(除非客户端犯贱重复bind后connect同一个server).
wy200747055 发表于 2012-10-04 21:38 ![]()
回复 2# linux_c_py_php |
|