当我们谈论计算机端口的时候,你可能认为你了解它,但它却没有照进现实,给你更多的想象空间,它有点孤独。
如果一个知识点带来的想象空间不多,一定是我们看待它的角度不全或者打开的方式不对,我们需要重新认识它!!
端口英文叫port,port的本意是港口,如果你是一个以英语为母语的开发者,就很容易联想到:
---端口就是计算机系统和外界进行数据流通的港口,端口号则是这些港口的编号~~----
港口 类似于港口——系统外部的数据到达端口后,就会进入端口缓冲区排队,然后在系统内部会有服务通过连接端口的数据通道不断从缓冲区取走数据。总结下:端(港)口=门户+缓冲+信道,打开一个端口和开辟一个港口一样,有如下三件事:
1 新设港口门户,承认合法性:内部数据可以通过这个门流通到外部,外部数据也可以通过这个门流通到内部,不是通过合法门户进出的数据一律是违法的,一旦发现就会被制裁;
2 打通连接港口的交通要道:系统内部的服务通过这个通道从缓冲区获取数据,也通过这个通道把数据发送到端口以及外部;
3 围绕港口建立缓冲地带:比如港口的大片空地和避风港湾,缓冲区有两种:内部数据出去的缓冲区,外部数据进来的缓冲区,一个端口都有一对缓冲区,所以端口编号也代表了缓冲队列编号;
------当把虚拟映射到现实中,像理解港口一样理解端口,关于端口的很多问题就一下子变得容易理解了~~~~比如:
问题一: 如果端口缓冲区满了会有什么问题?
答:类比港口——缓冲地带满了,新的货物就不能进来或者出去了。现实世界路可以停车,但计算机世界中,没有缓存的信道上不能储存任何信息,接收数据的缓冲区满了,外面的数据就进不来了;不停的去塞满端口缓冲区,也是一种常见的黑客攻击手段。
问题二:为啥一个计算机系统要很多端口?是否可以随便开辟端口呢?
答:类比港口——为啥一个国家有很多港口呢?当然为了提升整个国家内部与外部的人和资源(对应计算机的数据)的流通速度了;
开辟一个港口是需要占用很多资源的,所以港口不是随意开辟的,端口也是如此,打开端口就会消耗内存/CPU资源,并且有一定的安全风险,所以端口开辟也不是随便开辟,且有数量限制~
问题三、常说的http使用端口是80,https使用端口443,是什么意思?
答:类比港口——一个小岛都会有空运货物港、空运客运港、火车站、货运港、客运港等不同类型的港口,究其原因就是不同的人和货物(数据形式)需要不同的处理方式,为了加速整体数据流通效率而做的分工。
80就是大家约定好接收并处理Http请求数据的端(港)口 ,这就叫公认端口,就是说当一个数据到达一个计算机系统,如果是http数据,默认就去端(港)口80排队进入系统。
有公认就有例外,比如你启动了一个http服务器程序,你就要从8080端口接收数据,那就需要跟你信任的客户端提前说好,当它发送数据过来的时候不去大家公认的80港口排队,而是去8080港口排队;还有一种办法就是找一个中间人(网关、代理)还是去80端口接数据,接到数据后,它就做一些做一些安全校验,然后再把校验通过的数据转发到8080端口。
最后我们来一个小结
端口就是计算机系统的"港口",端口号则是这些港口的编号,端口设计需要考虑系统整体的数据吞吐量、资源占用、数据安全等问题。
从整体到局部,从系统到具体功能,端口设计建设和港口设计建设都是可以相互参考、相互借鉴的,您能再给出一些具体的实例吗?欢迎在评论区或者留言交流~~~
网友评论