想问一下,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的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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