服务器与客户端建立socket时,一般会新开一个端口而不是占用80,这个过程和“三次握手”之间是什么关系?

发布于 2022-09-07 04:32:52 字数 228 浏览 16 评论 0

web服务器一般监听80端口,但只是用来建立连接而不会真正拿来通信。真正的数据传输的连接是在socket.accept()步骤之后新开的一个临时通信端口。
我的问题是:

  1. 监听端口与通信端口的不一致,我上面说的理解是否正确?
  2. 这个“新开端口”的过程和TCP的三次握手是否有关系,如果没关系的话,哪个在前?
  3. 具体使用哪一个新端口,服务器是如何通知到客户端的呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千と千尋 2022-09-14 04:32:52

TCP四元组:源IP、目的IP、源端口、目的端口,这个东西确定一个TCP连接,客户端连接到服务器的时候,会选没被使用的端口作为源端口。

真正的数据传输的连接是在socket.accept()步骤之后新开的一个临时通信端口。

不是新开临时端口,是客户端先选了源端口,然后发起连接进行握手,每个TCP数据包都带有四元组,所以服务器知道客户端用的端口。

服务器端真正与客户端进行数据传输时使用的一般不是80端口

需要TCP四元组才能确定一个TCP连接,所以不存在只用80端口或者只用一个新的端口来传输的情况,源端口和目标端口都是必须的,也不会新开端口。

例如看看一个运行中的redis(对http服务器同理的),监听6379端口:

clipboard.png

第一个LISTEN状态的就是监听的socket,后面ESTABLISHED的就是和客户端建立的socket,ESTABLISHED的socket还是服务端还是6379端口,而客户端端口不同。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文