发布网友 发布时间:2024-09-08 00:36
共1个回答
热心网友 时间:2024-09-24 18:50
我们知道服务器端是要指定和开放端口号的,比如web服务http请求的80,https的443端口,都要开放,否则无法请求成功。
我们知道通信是由两端组成的,既然服务器需要指定端口,那么客户端呢?
比方说我用chrome浏览器请求www.baidu.com,我知道对于百度的服务器肯定开放了80、443端口,那么浏览器呢,或者说我的电脑本机用于请求的端口是什么呢?
带着疑问我用Wireshark抓包看了一下
可以看到我的浏览器请求源端口是62412,目标端口是443。
443我知道,62412又是为什么?
不知道,于是想了想TCP的连接和请求过程,参考这篇文章:https://mp.weixin.qq.com/s/iSZp41SRmh5b2bXIvzemIw
如文章所说:
TCP协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是Web服务器监听的端口(HTTP默认端口号是80,HTTPS默认端口号是443)。
浏览器端口随机生成?嗯,可以,但理论依据是什么?谁规定的?怎么规定的,怎么个随机法,不可能乱生成对吧。带着疑问,查到了资料。
https://www.rfc-editor.org/rfc/rfc6335.html
这是RFC的其中一份文档。
解释下RFC(来自维基百科)
请求意见稿(英语:RequestforComments,缩写:RFC),又翻译作意见征求,意见请求,请求评论是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及UNIX和互联网社群的软件文件,以编号排定。目前RFC文件是由互联网协会(ISOC)赞助发行。
RFC始于1969年,由当时就读加州大学洛杉矶分校(UCLA)的斯蒂芬·克罗克(StephenD.Crocker)用来记录有关ARPANET开发的非正式文档,他是第一份RFC文档的撰写者。最终演变为用来记录互联网规范、协议、过程等的标准文件。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多的论题在标准内,例如对于互联网新开发的协议及发展中所有的记录。
RFC-6335比较长,我们看其中重要的一段
总结一下所有的端口被划分为三个数字范围
系统端口,也称为众所周知的端口,从0到1023(由IANA分配)
互联网号码分配局(英语:InternetAssignedNumbersAuthority,缩写IANA),是一家互联网地址指派机构,管理国际互联网中使用的IP地址、域名和许多其它参数的机构。IP地址、自治系统成员以及许多顶级和二级域名分配的日常职责由国际互联网注册中心(IR)和地区注册中心承担。IANA是由ICANN管理的。
用户端口,也称为注册端口,从1024-49151(由IANA分配)
动态端口,也称为私有或临时端口,从49152-65535(从未分配)
在可分配的端口范围(系统端口和用户端口,即端口号0-49151)中,单个端口号在任何给定时间处于以下三种状态之一:
已分配:已分配的端口号当前已分配给注册表中指示的服务。
未分配:当前可根据请求分配未分配的端口号。
保留:保留端口号不可用于常规分配;它们被“分配给IANA”用于特殊目的。保留端口号包括每个范围边缘的值,例如0、1023、1024等,可用于扩展这些范围或将来的整体端口号空间。
对于动态端口(DynamicPorts),范围从49152到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如49152端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。
这样就解决了我的疑问,确实客户端也是要有明确的端口号分配的,具体讲比如浏览器它的端口看上去也是随机分配的,而分配范围是在“动态端口”范围,这个依据可以在RFC-6335中查到。
参考https://www.rfc-editor.org/rfc/rfc6335.html