想问一下,tcp/ip协议中的三次握手的ack包是如何能正确找到发起链接请求的主机的?

在tcp/ip协议的三次握手过程中,c向s发起链接申请,先是c向s发一个syn请求包,s收到c的syn包之后,s也会向c发一个ack包。c向s发的syn包,通过ip下一跳以及arp协议,就能找到s,因为s有独立唯一的公网ip。但是s发给c的ack包,c是没有独立ip的,这个ack包如何能够找到c的?比如mqtt协议推送消息给app,从协议的角度,消息是如何能够到达app的?

阅读 2.2k
1 个回答

s->c 走的是 网关路由器。

路由器NAT:https://www.zhihu.com/questio...

比如 c (192.168.0.1) 网关g(8.8.1.1) 服务器s(8.4.1.1)


c发送数据包:
源IP 192.168.0.1 端口 19201
目标IP 8.4.1.1 端口 8080


经过网关g
会变成
源IP 8.8.1.1 端口 10201
目标IP 8.4.1.1 端口 8080

同时记录映射关系
源IP 192.168.0.1 端口 19201 -> 端口 10201


服务器s收到数据包,
源IP 8.8.1.1 端口 10201
目标IP 8.4.1.1 端口 8080

回复:
源IP 8.4.1.1 端口 8080
目标IP 8.8.1.1 端口 10201


经过网关g
根据映射关系查找
源IP 192.168.0.1 端口 19201 -> 端口 10201

变成
源IP 8.4.1.1 端口 8080
目标IP 192.168.0.1 端口 19201


c收到 s的数据包
源IP 8.4.1.1 端口 8080
目标IP 192.168.0.1 端口 19201

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进