客户端请求的端口号是什么?

简介: TCP 协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是 Web 服务器监听的端口(HTTP 默认端口号是 80, HTTPS 默认端口号是 443)。

我们知道服务器端是要指定和开放端口号的,比如 web 服务 http 请求的 80,https 的 443 端口,都要开放,否则无法请求成功。


我们知道通信是由两端组成的,既然服务器需要指定端口,那么客户端呢?


比方说我用 chrome 浏览器请求 www.baidu.com, 我知道对于百度的服务器肯定开放了 80、443 端口,那么浏览器呢,或者说我的电脑本机用于请求的端口是什么呢?


带着疑问我用 Wireshark 抓包看了一下


18.jpg


可以看到我的浏览器请求 源端口是 62412 ,目标端口是 443。

443 我知道,62412 又是为什么?


不知道,于是想了想 TCP 的连接和请求过程,参考这篇文章:

探究!一个数据包在网络中的心路历程


如文章所说:


“TCP 协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是 Web 服务器监听的端口(HTTP 默认端口号是 80, HTTPS 默认端口号是 443)。”

浏览器端口随机生成?嗯,可以,但理论依据是什么?谁规定的?怎么规定的,怎么个随机法,不可能乱生成对吧。带着疑问,查到了资料。



这是 RFC 的其中一份文档 。


解释下 RFC(来自维基百科)


“请求意见稿(英语:Request for Comments,缩写:RFC),又翻译作意见征求,意见请求,请求评论是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及 UNIX 和互联网社群的软件文件,以编号排定。目前 RFC 文件是由互联网协会(ISOC)赞助发行。


RFC 始于 1969 年,由当时就读加州大学洛杉矶分校(UCLA)的斯蒂芬·克罗克(Stephen D. Crocker)用来记录有关 ARPANET 开发的非正式文档,他是第一份 RFC 文档的撰写者。最终演变为用来记录互联网规范、协议、过程等的标准文件。基本的互联网通信协议都有在 RFC 文件内详细说明。RFC 文件还额外加入许多的论题在标准内,例如对于互联网新开发的协议及发展中所有的记录。

19.jpg


总结一下


所有的端口被划分为三个数字范围


  • 系统端口,也称为众所周知的端口,从 0 到 1023(由 IANA 分配)


“互联网号码分配局(英语:Internet Assigned Numbers Authority,缩写 IANA),是一家互联网地址指派机构,管理国际互联网中使用的 IP 地址、域名和许多其它参数的机构。IP 地址、自治系统成员以及许多顶级和二级域名分配的日常职责由国际互联网注册中心(IR)和地区注册中心承担。IANA 是由 ICANN 管理的。”


  • 用户端口,也称为注册端口,从 1024-49151(由 IANA 分配)
  • 动态端口,也称为私有或临时端口,从 49152-65535(从未分配)

在可分配的端口范围(系统端口和用户端口,即端口号 0-49151)中,单个端口号在任何给定时间处于以下三种状态之一:

  • 已分配:已分配的端口号当前已分配给注册表中指示的服务。
  • 未分配:当前可根据请求分配未分配的端口号。
  • 保留:保留端口号不可用于常规分配;它们被“分配给 IANA”用于特殊目的。保留端口号包括每个范围边缘的值,例如 0、1023、1024 等,可用于扩展这些范围或将来的整体端口号空间。


对于动态端口(Dynamic Ports),范围从 49152 到 65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如 49152 端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。


这样就解决了我的疑问,确实客户端也是要有明确的端口号分配的,具体讲比如浏览器它的端口看上去也是随机分配的,而分配范围是在“动态端口”范围,这个依据可以在 RFC-6335 中查到。

相关文章
|
网络协议
用 ipv6 和端口号发起 http 请求
用 ipv6 和端口号发起 http 请求
|
3月前
|
网络协议 Linux 网络安全
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
|
3月前
|
SQL 网络协议 NoSQL
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
|
3月前
|
网络协议 Ubuntu Linux
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
|
5月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
87 5
|
5月前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送"Hello, Server!"后关闭。注意Android中需避免主线程进行网络操作。
100 4
|
5月前
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
|
4月前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
JWT令牌,JWT令牌的后续使用,在其他端口中使用的注意事项?如果你编写了JWT令牌的话,在下一次请求当中,都需要添加的,如果你已经配置好了WebConfig和Inter 就不用配了,添加了拦截器之后
JWT令牌,JWT令牌的后续使用,在其他端口中使用的注意事项?如果你编写了JWT令牌的话,在下一次请求当中,都需要添加的,如果你已经配置好了WebConfig和Inter 就不用配了,添加了拦截器之后
|
6月前
|
安全 程序员

热门文章

最新文章