什么是端口?到底是做什么的呢?

老男孩IT教育


一、端口定义

端口是指接口电路中的一些寄存器,这些寄存器分别用来存放数据信息、控制信息和状态信息,相应的端口分别称为数据端口、控制端口和状态端口。

  

电脑运行的系统程序,其实就像一个闭合的圆圈,但是电脑是为人服务的,他需要接受一些指令,并且要按照指令调整系统功能来工作,于是系统程序设计者,就把这个圆圈截成好多段,这些线段接口就叫端口(通俗讲是断口,就是中断),系统运行到这些端口时,一看端口是否打开或关闭,如果关闭,就是绳子接通了,系统往下运行,如果端口是打开的,系统就得到命令,有外部数据输入,接受外部数据并执 行。

 (一)什么是TCP端口?

  

   TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,

由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

(二)什么是UDP端口?

 

  UDP:UDP是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP 协议基本上是IP协议与上层协议的接口。

UDP协议适用端口分辨运行在同一台设备上的多个应用程序。

二、端口作用

 

 我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。

需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。

(一)动态端口(Dynamic Ports)

  动态端口的范围是从1024到65535。之所以称为动态端口,是因为它 一般不固定分配某种服务,而是动态分配。动态分配是指当一个系统进程或应用

 程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配 一个供它使用。当这个进程关闭时,同时也就释放了所占用的端口号。

(二)端口在入侵中的作用

 

有人曾经把服务器比作房子,而把端口比作通向不同房间(服务)的门,如果不考虑细节的话,这是一个不错的比喻。入侵者要占领这间房子,势必要破门而入(物理入侵另说),那么对于入侵者来说,了解房子开了几扇门,都是什么样的门,门后面有什么东西就显得至关重要。

  

入侵者通常会用扫描器对目标主机的端口进行扫描,以确定哪些端口是开放的,从开放的端口,入侵者可以知道目标主机大致提供了哪些服务,进而猜测可能存在的漏洞,因此对端口的扫描可以帮助我们更好的了解目标主机,而对于管理员,扫描本机的开放端口也是做好安全防范的第一步。

  

(三)面向连接服务和无连接服务

可以先了解面向连接和无连接协议,面向连接服务的主要特点有:面向连接服务要经过三个阶段:数据传输前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。面向连接服务,确保数据传送的次序和传输的可靠性。无连接服务的特点是:无连接服务只有传输数据阶段。消除了除数据通信外的其它开销。只要发送实体是活跃的,无须接收实体也是活跃的。它的优点是灵活方便、迅速,特别适合于传送少量零星的报文,但无连接服务不能防止报文的丢失、重复或失序。

区分"面向连接服务"和"无连接服务"的概念  区分特别简单,形象的例子是:打电话和写信。两个人如果要通电话,必须先建立连接--拨号,等待应答后才能相互传递信息,最后还要释放连接--挂电话。

写信就没有那么复杂了,地址姓名填好以后直接往邮筒一扔,收信人就能收到。

 

TCP/IP协议在网络层是无连接的(数据包只管往网上发,如何传输和到达以及是否到达由网络设备来管理)。而"端口",是传输层的内容,

是面向连接的。协议里面低于1024的端口都有确切的定义,它们对应着因特网上常见的一些服务。

 

三、端口分类

(一)常见的服务划分

划分为使用TCP端口(面向连接如打电话)和使用UDP端口(无连接如写信)两种。

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

所以TCP/IP协议提出的协议端口,可以认为是网络通信进程的一种标识符。

应用程序(调入内存运行后一般称为:进程)通过系统调用与某端口建立连接(binding,绑定)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都从该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写方式访问类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来区别不同的端口。

由于TCP/IP传输层的TCP和UDP两个协议是两个完全独立的软件模块,因此各自的端口号也相互独立。

如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。端口号有两种基本分配方式:

第一种叫全局分配这是一种集中分配方式,由一个公认权威的中央机构根据用户需要进行统一分配,并将结果公布于众。

第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来(binding,绑定)。

TCP/IP端口号的分配综合了以上两种方式,将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。

   每一个标准服务器都拥有一个全局公认的端口叫周知端口,即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。

TCP和UDP规定,小于256的端口才能作为保留端口。

(二)按端口号可分为3大类

 

 (1)公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。

例如:80端口实际上总是HTTP通讯。

  

(2)注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。

例如:许多系统处理动态端口从1024左右开始。

  

(3)动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。





Kali技术


    在网络的世界里,有两个很重要的概念,一个是IP地址,一个是端口。根据IP地址可以找到互相通信的终端,根据端口可以找到互相通信的应用程序,也就是不同的端口号对应不同的应用程序。

    端口的作用

    一个IP地址标识了一台主机,而一台主机可以提供多种服务,比如web服务、ftp服务、远程桌面等。如何区分不同的服务呢,显示只靠IP地址是不行的,IP地址与服务是一对多的关系,这时就需要端口号进行区分了。


    比如我们访问今日头条网站,浏览器使用一个大于1024的随机端口,通过DNS获取到今日头条的网站的IP地址,访问web服务的80端口。下图显示了TCP报文的格式,其中前两个字段就是源端口号和目的端口号。


    端口的分类

    端口号是个整数,范围从0到65535(2^16-1),分为周知端口和动态端口。


    1)周知端口,周知端口就是众所周知的端口,有些是约定俗成的。范围从0~1023,比如常见的www为80,ftp为21、telnet为23、dns为53等等。

    2)动态端口,一般不用于固定分配给某种服务,范围从1024到65535,是动态分配的。当系统的某个进程或者应用需要通信时,主机从可用的端口号中分配一个供其使用,程序关闭时,同时释放所占用的端口号。


    综上所述,IP地址用于唯一标识一台主机,端口号(Port)用于唯一标识不同的应用程序或进程,(源IP地址,源端口号,目的IP地址,目的端口号)四元组用于一个通信过程。

如果觉得对你有帮助,可以多多点赞哦,也可以随手点个关注哦,谢谢。

Geek视界


题主针对端口并未做进一步的描述,所以这里的端口并不清楚是物理端口还是逻辑端口?但可以大胆的猜测的一下,如果题主是搞网络的肯定对端口这块应该不会陌生,所以题主可能接触到的是逻辑端口,并且可能是协议端口。协议端口可能大家接触的更多一些,但如果你对网络不是很熟悉,可能端口是什么就比较迷惑!下面也主要是对协议端口的说明。

首先说明一下网络的层级结构。

如上图所示,网络层主要提供了一种不同网络主机之间的通信能力,通过IP地址来标识不同的主机。当然IP地址也是逻辑地址,至于IP地址的细节此文不再展开描述。传输层与网络层的最大区别是传输层提供进程间通信通能力。从某种意义上讲,网络通信的最终地址就不能仅仅是主机的IP地址了,还包括可以描述进程的某种标识符。TCP/IP协议提出了协议端口的概念,用于表示通信的进程。有人将主机比作大楼,将端口比作房间。实际上端口可以进一步理解为不同的应用。例如主机上有WEB服务、FTP服务、SMTP服务等等,这些服务分别使用不同端口号来标识。

从某种意义上讲,端口是对通信的进一步细化,由主机细化到主机里面的进程,是通信进一步具体化。

端口有两种分配方式。一种是全局分配,另一种动态连接。例如Socket编程的服务端是事先分配好地址的,这个是一种全局分配。而客户端向服务端建立连接时获取的地址是动态连接,是客户端向操作系统提出申请,操作系统处理后返回的。这就容易理解服务端端口不变,而客户端端口不断变化。

在日常生活我们见到的各种服务都有端口,像HTTP、TELNET、DNS、SSH等,主要因为它们均是基于TCP/IP协议,底层或者是TCP,或者是UDP。UDP或TCP协议就需要有端口的标识。

本人具有多年的java开发经验,熟悉多种框架,熟悉网络编程,熟悉java安全编程,熟悉大数据,熟悉多种安全协议,熟悉并发编程,有兴趣的同学可以互相关注,互相学习!!!


代码饲养员天齐


不知道这里的端口是指计算机上面的网络端口吗?我就当网络端口来回答一下,纯手打。

IP不够用,端口来凑!

用IP来标记一台计算机,通过这个IP就可以访问到这台计算机,那么计算机上装了很多应用怎么区分呢?


我发送的这个数据是发给什么应用的呢?总不能一台计算机只装一个应用。用端口就相当于给应用指定一个专门的通道,应用和端口绑定,数据达到指定端口,那个应用就去处理,计算机的网络端口有65536个,从0-65535,有名的应用都是有默认端口,如Apache,Nginx占80端口,FTP占21端口,SSH占22端口,Telnet占23端口,MySql占3306端口,Redis占6379等等。大家约定俗成,后开发的软件不会用别的软件相同的端口,就像SSH占用的22端口一样,当时已经有FTP和Telnet各占了21和23端口,22还没人用,于是就选了22端口,具体可以查下哦。


总结一下:IP+端口 = 到达指定的应用,一一绑定


真的想不到吧


端口一般指两种,一种是硬件比如路由器或者交换机的插网线的端口,一种是软件的逻辑的概念,比如http的80端口!

从以上可以看出来,不论是硬件的还是逻辑的,端口其实就像“门”一样,用来标识它负责的一个房间!和这个门连接上就代表进入了某个特定的房间,然后获取自己需要的信息!

对于交换机和路由器等互联电脑主机的设备来说,上面的一个个插口就可以说是一个接口或者端口,我需要接入交换机的5号端口,交换机就知道了有一个A设备在我的5号端口,A设备从5号端口发了数据,这个数据需要从5号端口发送到A设备!看,简单理解端口就是一个定位用的门!


而在应用层面,会听过端口映射,Windows远程3389,网页端口80,这些都是一些逻辑概念,是各个应用软件用来接受和发送数据的门,比如3389,B设备从互联网连接X设备的3389端口,X设备就会知道,B设备需要远程连接而不是网页!当我们从家里打开浏览器输入baidu时,浏览器默认会用80端口去请求百度的服务器,百度就会知道,哦 这个是从80端口进来的,他是需要打开我的网页!于是我们就打开了网页!

端口它就是门,各种不同的门,从A门进去就会有A房间的服务,并且用来区分不同服务的门!


分享到:


相關文章: