操作系统的端口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32635069/article/details/82312717

网络中可以被命名和寻址的通信端口是操作系统的一种可分配资源。由网络OSI(开放系统互联参考模型,Open System Interconnection Reference Model)七层协议可知,传输层与网络层最大的区别是传输层提供进程通信能力, 网络通信的最终地址不仅包括主机地址,还包括可描述进程的某种标识。所以TCP/IP协议提出的协议端口,可以认为是网络通信进程的一种标识符。

之前学习Netty框架时,涉及到这个问题,Netty是基于NIO,单线程可以处理多连接,使得服务器对连接的处理可以达到百万级

我们用 Netty 写了一个测试客户端,它同样用了非阻塞 IO ,所以不用开大量的线程。 但是一台机器上的端口数是有限制的,用root权限的话,最多也就 6W 多个连接了。 所以我们这里用 Netty 写一个客户端,用尽单机所有的连接吧。
按照上面的做法,单机最多可以有 6W 的连接,百万连接起码需要17台机器!
如何才能突破这个限制呢?其实这个限制来自于网卡。 我们后来通过使用虚拟机,并且把虚拟机的虚拟网卡配置成了桥接模式解决了问题。

虚拟机解决了单机测试百万连接的问题,但是我对端口的概念不清楚了

端口是怎么来的?
这里面我们谈论的都是面向连接和无连接的通讯协议端口,是由软件定义的逻辑端口,它的作用是使得数据报可以准确的传递到相应的应用程序中,它其实就是一种队列,发送到该进程的数据报,会汇聚到特定的端口排队,等到被消费

端口数量的限制是怎么来的?:总共有65536个;
正如你所知,在TCP和UDP的协议中都只有16位来存储源端口和目的端口,也就是端口最大的值可以达到2^16-1,所以一共有2^16-1+1=65536个端口。再加一个1是因为最大值是65535,而计算机中是从0开始计算的,所以要加上全0这个端口。

还有一个问题?之前和主管探讨过?
他认为云化没有任何作用,只不过是多了虚拟化而已,
我争论说虚拟化可以更充分的利用资源,可是他说,一个单纯的物理机我们也可以很好的利用啊,并且用的更好,无非是加硬盘,加内存的事
可是上面测试的例子,便是虚拟化的一个很好利用,大家还有其他的好意见吗?

猜你喜欢

转载自blog.csdn.net/qq_32635069/article/details/82312717