真正的端口和协议是什么?


11

我听到人们谈论端口和协议(与计算机网络有关),并且他们经常为它们提供类比(例如:“端口非常像装运港,它发送和接收数据就像装运港发送和接收货物一样。从其他端口”)之类的东西。

我了解这一切的含义,但仅是在非常人为的层面上。基本上,我知道什么端口,也知道什么协议,但是它们到底是什么?

这些端口是物理对象吗?它们是否在我的计算机中内置?有几个端口?我可以增加或减少端口数量吗?它们甚至是物理物质吗?还是用代码编写?该代码在哪里?操作系统?港口到底是什么?

什么是协议?我以为它们是某种代码。。。您可以创建自己的协议吗?如何获得特定端口以运行特定协议?您使用什么语言创建协议?您如何定义或发明新协议?

Answers:


9

对于Hello71的回答,通过考虑数据包中地址的结构,可能有助于可视化端口。数据包是通过网络传递的数据单位。TCP是使用端口的传输层协议的示例,通常在IP上使用。

因此,IP具有两个寻址组件-源IP和目标IP。TCP通过使用源端口和目标端口添加到此端口。正是这些端口使接收机能够区分发往同一IP地址的流量-即,如果您有一个服务器可以在单个IP地址上接收Web请求和电子邮件,那么您需要确定哪个应用程序应该接收数据-电子邮件服务或网络服务。因此,如果一个用户要向同一服务器执行Web请求和电子邮件请求,则它们可能看起来像这样:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

Web服务拥有端口80,而电子邮件服务拥有端口25-它们在各自的端口上“监听”,这使流量可以在正确的位置结束。

源端口是“临时”端口,即在发送数据包时就已完成。但是,它仍然有用。它使连接的两端都能跟踪单独的对话。考虑我们的用户是否发送了两个同时的Web请求:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

这使Web服务知道这些是单独的请求,而且来自Web服务器的返回流量-网页-被发送回各自的源端口,这使浏览器能够知道服务器正在响应哪个请求。

请注意,从TCP / IP角度来看,所有这些都是端口号,跨这些端口移动的实际数据可能是任何东西。它不在乎或对应用程序没有任何了解,因此,如果您在端口25上有网络流量,而在端口80上有电子邮件,那将是明智的选择。

发送和接收应用程序要确保数据是正确的结构,这就是应用程序协议的来源。HTTP是网络浏览器用来与Web服务器通信的应用程序协议的示例。这是一个定义明确的协议,可确保浏览器将请求发送到任何Web服务器,并且Web服务器将理解并做出明智的响应。但是它的定义中没有包含有关数据包如何从A传输到B的任何内容-这是前面各层的责任-传输,互联网和链接层。


谢谢!这只是我一直在寻找的答案,谢谢您的帮助!
鲍勃

3

嗯 我认为最好的起点是查看IP套件,也就是TCP / IP模型。(为简单起见,忽略了OSI模型的其他层。)

基本上,它是一系列的层:

应用层-HTTP,FTP,POP,SSH等。
传输层-TCP,UDP等
。Internet层-IP,ICMP等。
链路层-以太网等。

大多数情况下,端口是在传输层实现的(第4层-是的,编号是正确的。)

在OS中实现的大多数TCP和/或UDP堆栈都使用一种基本系统,即为程序分配端口,并在数据包通过网络进入时简单地在这些程序中引发事件。但是,任何实现在理论上都是可行的。在学术界甚至可能通过假想的替代栈进行思考。

TCP已被定义为总共具有65535个端口,任何程序都可以使用它来完成其所需的操作(尽管许多操作系统限制使用1024以下的端口,从而使它们具有特殊的特殊状态)。尽管列表有限,但没有真正的标准来定义谁获得哪个端口以及哪个端口运行什么程序。因此,端口或多或少是程序的不同实现决定同意进行通信的随机数。当然,此类程序的设计者会尽量避免其他流行程序已经选择的移植。

承认它完全不需要使用TCP运行。一些协议在裸互联网层甚至裸链路层上运行,主要是出于提高效率的目的,或者因为这些协议是在TCP或IP尚未出现之前就发明的。当然,这样做时,您会舍弃OS网络库的简单性和广泛的错误检查。

有关更多详细信息,请查看OSI模型,TCP和IP上的Wikipedia页面。


我了解所有这些。所以基本上,端口不是物理上的东西吗?它是编程的东西吗?计算机上的端口在哪里定义?然后对于协议,如何创建这些协议?那些编程了吗?
鲍勃

不,在这种情况下,端口不是物理的东西(显然,USB端口是物理的,但与此主题无关​​)。协议是通过RFC(en.wikipedia.org/wiki/Request_for_Comments)定义的,并以经过编程的代码实现。
保罗

可以肯定地说TCP是一个系统进程,该进程保留用于存储从IP传入的数据(或存储要由IP检索的数据)的内存,并且该内存分为“端口”。并且其他应用程序(进程)(例如HTTP)可以通知TCP他们想要保留特定端口(即80和443)。然后,它成为TCP的工作:1.允许HTTP将数据传出数据添加到那些内存地址,并且2.当传入数据已添加到那些内存地址时通知HTTP?
扎克·史密斯

也许鲍勃在协议端口和物理交换机端口之间感到困惑。尽管缺少任何来源,但几个人都很好地回答了协议端口部分。对于物理端口,这些是电缆连接的输入,输入和输出位置,可以进行网络数据传输。这可能涉及电子电路,光纤接收器,激光器和缓冲器。L. Peterson第4版。
nassim

3

尽管此问题已被标记为已回答,但我想解决OP中提出的一些其他问题。

这些端口是物理对象吗?

没有端口不是物理对象。

端口号是一个16位无符号整数,表示可用的端口范围是1到65535(端口号0是保留的,不能使用)。进程将其通过Internet套接字的输入或输出通道,文件描述符的类型与传输协议,端口号和IP地址相关联。此过程称为绑定,可通过网络发送和接收数据。

它们是否在我的计算机中内置?它们甚至是物理物质吗?还是用代码编写?该代码在哪里?操作系统?港口到底是什么?

操作系统的网络软件的任务是将所有应用程序端口的传出数据传输到网络上,并通过匹配数据包的IP地址和端口号将到达的网络数据包转发到进程。

使用相同的传输协议,只有一个进程可以绑定到特定的IP地址和端口组合。当多个程序尝试使用同一协议绑定到同一IP地址上的相同端口号时,就会发生常见的应用程序故障,有时也称为端口冲突。

上一段是理解为什么在网络中使用端口/协议的关键。如果我们没有办法指定协议,该协议通过约定的apon端口号传输数据-您一次只能做一件事情(检查您的电子邮件并使用网络),因为您的计算机会无法区分电子邮件客户端的数据和浏览的网站的数据。

有几个端口?

根据三个范围,以各种方式分配端口号:

  1. 众所周知/系统端口(0-1023)-此范围的端口由提供广泛使用的网络服务类型(HTTP / 80,HTTPS / 443,Telnet / 21,SSH / 22)的系统进程使用

  2. 注册/用户端口(1024-49151)-从1024到49151的端口号范围是注册端口。IANA会根据请求实体的申请将其分配给特定服务。(Webmin / 10000,HTTP Proxy / 8080,远程桌面协议/ 3389等)

  3. 临时/动态/专用端口(49152-65535)-49152-65535范围包含无法向IANA注册的动态或专用端口。此范围用于自定义或临时目的以及临时端口的自动分配。

我可以增加或减少端口数量吗?

关于能够增加可用端口的数量,由于数学运算允许网络工作(二进制),因此您无法分配大于65535的端口-因此,此问题的答案为否,您无法增加可用端口的总数65535以上的端口。

什么是协议?

在计算机科学中,通信协议是一种用于在计算机内部或计算机之间进行消息交换的数字规则系统。通过计算机网络交换消息时,规则系统称为网络协议。协议基本上是两个联网设备都可以通过其通信的一组指令/命令/调用。想想我们是否未达成协议,Web服务器只是将数据随机发送到Web浏览器,而该浏览器不知道如何处理?幸运的是,我们拥有HTTP,并且该软件内置了每个HTTP创建的Web浏览器,因此它可以与任何使用相同语言(HTTP)的Web服务器进行通信。

我以为它们是某种代码。。。您可以创建自己的协议吗?您使用什么语言创建协议?

是的,您可以创建自己的协议。协议以多种语言编写。我不是软件开发人员,但是我很确定只要您使用的任何语言都具有允许您编写可以通过TCP / IP进行通信的软件的库(还有其他协议套件,但TCP / IP最多)广泛使用),您可以使用该语言编写协议。编程语言“ C”似乎是编写协议最常用的语言。这是由于许多最早的网络协议都是在1970年代在UNIX上开发的,而C恰好是UNIX本身所使用的语言。

如何获得特定端口以运行特定协议?

操作系统之间的差异很大。例如,要更改远程桌面协议在Windows上运行的端口号,您需要编辑注册表。在Linux上,可以直接从.conf文件为特定的网络服务配置许多网络服务。

您如何定义或发明新协议?

参见https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/,以获取最近开发了一种新的网络协议的人的博客文章以及他必须要做的事情一路上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.