从80端口返回来的数据一定是80端口监听到吗?

发布于 2022-09-04 19:03:31 字数 57 浏览 23 评论 0

比如请求www.aaa.com:80 这个网址的数据,返回来的时候是用本地的80端口去接收数据的吗?

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

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

发布评论

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

评论(5

春夜浅 2022-09-11 19:03:31

排名最高的回答,有些回答的是错的,但是最主要的是,根本没有回答你的问题。

https用的是443端口,因此http 或者 https 协议默认的端口是 80是错的。

非要辩论,存在形如https://www.xxx.com:80的强制走80端口的https协议,浏览器也支持这种用法,但是,没有但是。


简单回答:不是。客户端会随机采用一个本地可用的端口来连接你的80端口。

使用tcp协议访问远程端口,例如www.aaa.com:80,
无论采用纯tcp或者http,ftp协议,
都会在本地启动一个随机端口,随机原则是端口号在本地必须未被占用,具体端口不确定,但是基本是在10000以上,绝对不可能在1024以内。
tcp是长连接,所以连接断开之前,后续的数据传输仍旧通过这个端口。


下面会有个具体的例子?。

举个例子,我们可以在一台服务器上启动一个ssh服务(tcp,22端口),从另一台服务器上链接,那么:

ssh服务端:
机器名没有改,为默认的localhost.localdomain
ip为192.168.1.102

从服务器上看到的网络信息有三条,其中两条是监听ssh端口,还有一条是客户端的tcp连接。

[root@localhost ~]# lsof -i
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
[root@localhost ~]# lsof -i |grep ssh
sshd      9937   root    3u  IPv4  29733      0t0  TCP localhost.localdomain:ssh->192.168.1.103:51774 (ESTABLISHED)
上面一行表示:客户端通过客户端的51774端口进行连接到本机的22端口。
sshd     10931   root    3u  IPv4  32825      0t0  TCP *:ssh (LISTEN)
sshd     10931   root    4u  IPv6  32827      0t0  TCP *:ssh (LISTEN)
上面两行表示:服务端监听本机的22端口

ssh客户端:
机器名为PC,
ip为192.168.1.103

PC 18:22 [~]: lsof -i |grep ssh
ssh        8186 mudu    3u  IPv4 0xdda1541ac1dd08c9      0t0  TCP 192.168.1.103:51774->192.168.1.102:ssh (ESTABLISHED)
上面一行表示:客户端通过51774端口连接服务端的ssh端口。

那么结论就有了:
对于传统的tcp连接和协议来说,
客户端对外开放51774(随机的)端口,使用51774(上次建立的随机端口)端口连接远程的22端口,这是一条tcp长连接,
数据传输,也是通过这一条tcp长连接,没有客户端用哪个端口接收数据这种说法。

如果非要说接收服务端的数据用哪个端口的话,那么,也是通过51774端口(上次建立的随机端口)。


客户端端口随机,下次再建立tcp连接,就会重新随机一个客户端可用的端口,服务端端口仍然不会变(ssh的22端口)。

但是仍然有个不算是规律的规律,
如果频繁创建连接的话,可以认为,第二次的客户端随机到的端口,比第一次随机到的端口要大1。看看就好,别当真。


另外说一下:
192.168.1.102:ssh表示,ip为192.168.1.102,端口为ssh端口(而不是ssh协议)。
端口与协议的对应可以在/etc/services查看。

你げ笑在眉眼 2022-09-11 19:03:31

其实这个涉及到计算机网络的知识:

这个属于网络数据传输,所以要涉及到计算机网络的五层模型

5.应用层(http应用)
4.传输层 (ip地址+端口号)
3.网络层 (ip 地址)
2.数据联络层 (mac 地址)
1.物理层 (传输二进制流)

因为你是用浏览器发送的请求(http 协议默认的端口是 80),而返回来的数据(其实都是二进制流。其中包含了 目的主机的 ip地址和端口号,ip 是指定你这台机器在网络上的地址,而端口号指定应用程序),然后从第一层物理层一直向上解析到应用层,当解析到第四层时,操作系统根据 端口号,在这里是 80,所以系统在所有进程中找到哪个应用程序占用80端口,就把返回的数据交给他。

所以说:是在第一层物理层统一接收到所有的数据,然后根据端口号找到相应的应用程序,最后把数据交给该应用程序。

北凤男飞 2022-09-11 19:03:31

简单的说,不是。
监听端口的设置,是为了让别人来连接的一个“通道”,不是“接收”通道。

返回来的时候是用本地的80端口去接收数据的吗?

所以说,不用用本地端口接受的,更不是80了。

故乡的云 2022-09-11 19:03:31

那么一楼所说的不是用本地端口接收数据,跟二楼就矛盾了啊,

感受沵的脚步 2022-09-11 19:03:31

不用,随便你怎么取这个地址的内容都可以。本地不用指定某个端口去接收。

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