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

查看:466
本文介绍了从80端口返回来的数据一定是80端口监听到吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

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

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查看。

这篇关于从80端口返回来的数据一定是80端口监听到吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆