端口号背后的技术是什么?

时间:2016-01-29 04:58:51

标签: http networking ftp webserver port

我知道端口号用于识别服务器上运行的不同进程,因此多个进程可以使用相同的网络资源。但它在内部如何运作?

例如,如果对网站<ComboBox TextBlock.Foreground="{Binding DesiredForegroundBrush}"/> 的请求到达服务器,服务器如何知道在端口80上运行的是Web服务器?我的意思是,请求管道在获取发现Web服务器在端口80上运行的请求和将请求转发到Web服务器之间是什么样的?

2 个答案:

答案 0 :(得分:2)

端口号仅仅是某些传输层协议(如TCP和UDP)的地址,与IP地址用于第3层协议的方式相同,MAC地址用于第2层协议。并非所有传输层协议都使用端口,并且每个传输层协议独立地维护其端口,以便TCP端口80与UDP端口80不同,并且每个端口可以由不同的应用程序同时使用。

第2层地址仅与LAN链路相关,第3层地址仅与第3层网络相关的主机到主机,第4层地址是相关的应用程序到应用程序。

IANA注册端口并在Service Name and Transport Protocol Port Number Registry维护官方注册表列表。

来自RFC 793, TRANSMISSION CONTROL PROTOCOL

  

复用:

     

允许单个主机中的许多进程使用TCP       通信设施同时进行,TCP提供了一套       每个主机中的地址或端口。与网络连接       和形成来自互联网通信层的主机地址       一个插座。一对套接字唯一标识每个连接。       也就是说,套接字可以同时使用多个       连接。

     

端口与进程的绑定由每个进程独立处理       主办。但是,证明附加常用过程很有用       (例如,“记录器”或分时服务)到固定套接字       让公众知道。然后可以访问这些服务       通过已知的地址。建立和学习港口       其他过程的地址可能涉及更多动态机制。

     

连接:

     

上述可靠性和流量控制机制需要       TCP初始化并维护某些状态信息       每个数据流。这些信息的组合,包括       套接字,序列号和窗口大小称为连接。       每个连接由一对套接字唯一指定       确定其双方。

     

当两个进程希望通信时,必须首先使用TCP       建立连接(初始化每个连接的状态信息       侧)。当他们的通信完成时,连接是       终止或关闭以释放资源用于其他用途。

     

由于必须在不可靠的主机之间建立连接       在不可靠的互联网通信系统上,握手       使用基于时钟的序列号的机制来避免       错误的连接初始化。

答案 1 :(得分:1)

打开套接字(类似于打开文件但用于网络通信)后,套接字的用户可以直接使用临时端口(由OS选择),如果应用程序是客户端,这通常是典型的应用

服务器进程执行的操作是调用bind()套接字API调用来设置套接字的端口,然后在TCP套接字的情况下调用listen()以开始侦听传入的连接请求。< / p>

由于bind()调用,操作系统将知道此特定套接字是接收发送到特定端口号的数据的套接字。

通过网络发送的数据包包含源和目标IP地址以及源和目标端口:

http://www.techrepublic.com/article/exploring-the-anatomy-of-a-data-packet/

因此操作系统有一个数据结构,其端口号列出了开放套接字,它会将接收到的数据传递给正确的套接字输入缓冲区。发送的数据将由发送套接字的端口号标记。