服务器与客户端建立socket时,一般会新开一个端口而不是占用80,这个过程和“三次握手”之间是什么关系?
web服务器一般监听80端口,但只是用来建立连接而不会真正拿来通信。真正的数据传输的连接是在socket.accept()步骤之后新开的一个临时通信端口。
我的问题是:
- 监听端口与通信端口的不一致,我上面说的理解是否正确?
- 这个“新开端口”的过程和TCP的三次握手是否有关系,如果没关系的话,哪个在前?
- 具体使用哪一个新端口,服务器是如何通知到客户端的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
TCP四元组:源IP、目的IP、源端口、目的端口,这个东西确定一个TCP连接,客户端连接到服务器的时候,会选没被使用的端口作为源端口。
不是新开临时端口,是客户端先选了源端口,然后发起连接进行握手,每个TCP数据包都带有四元组,所以服务器知道客户端用的端口。
需要TCP四元组才能确定一个TCP连接,所以不存在只用80端口或者只用一个新的端口来传输的情况,源端口和目标端口都是必须的,也不会新开端口。
例如看看一个运行中的redis(对http服务器同理的),监听6379端口:
第一个LISTEN状态的就是监听的socket,后面ESTABLISHED的就是和客户端建立的socket,ESTABLISHED的socket还是服务端还是6379端口,而客户端端口不同。