首页 > 代码库 > 传输层的端口与TCP标志中的URG和PSH位

传输层的端口与TCP标志中的URG和PSH位

一、协议端口号的提出

运输层提供了进程间通信的能力(即端-端通信)。但是不同的操作系统可能无法识别其他机器上的进程。为了用统一的方法对 TCP/IP体系的应用进程进行标志,使运行不同操作系统的计算机的应用进程能够互相通信,提出在运输层使用协议端口号(protocolport number)的方法,或通常简称为端口(port)。它是协议栈各层之间的抽象软件端口,是应用层各种协议进程与运输实体进行层间交互的地址。下图为端口在进程间通信的作用图:

技术分享

运输层对每个端口都赋予一个16位(二进制)的端口号。这个端口号只具有本地意义,它只是为了标志本计算机应用层中的各进程与应用层实体交互的层间接口。在因特网中不同计算机的相同端口号是没有联系的。虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由TCP来完成。

二、端口号分类

端口号的范围是从1~65535,一般分为两大类:

1.服务器使用的端口号

(1)熟知端口号,又称系统端口号,数值一般为0~1023,每个端口号应用于特定熟知的应用协议。英特网号码指派管理局INIA负责分配一些常用的应用程序固定使用的端口号,,并为所有服务器进程所共知。

(2)登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在IANA,互联网数字分配机构)登记,以防止重复。

2.客户端使用的端口号

或称短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

3.一些常见的端口号及其用途如下:

TCP21端口:FTP文件传输服务 TCP23端口:TELNET终端仿真服务 TCP25端口:SMTP简单邮件传输服务 UDP53端口:DNS域名解析服务 TCP80端口:HTTP超文本传输服务 TCP110端口:POP3“邮局协议版本3”使用的端口 TCP443端口:HTTPS加密的超文本传输服务 TCP1521端口:Oracle数据库服务
TCP1863端口:MSNMessenger的文件传输功能所使用的端口
TCP3389端口:MicrosoftRDP 微软远程桌面使用的端口
TCP5631端口:SymantecpcAnywhere 远程控制数据传输时使用的端口
UDP5632端口:SymantecpcAnywhere 主控端扫描被控端时使用的端口
TCP5000端口:MSSQL Server使用的端口
UDP8000端口:腾讯QQ

4.socket
    TCP 把连接作为最基本的抽象。每一条TCP连接有两个端点。TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字(socket)或插口。端口号拼接到(contatenatedwith) IP 地址即构成了套接字。

套接字(socket) = (IP地址:端口号)
     每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
    TCP 连接 = {socket1, socket2}  =  {(IP1: port1), (IP2: port2)}

式中,socket1和socket2是一条运输连接的两个套接字地址,IP1和IP2分别表示两个端点主机的IP地址,而port1和port2分别是两个端点主机中的端口号。

:同一个名词socket有多种不同的意思

三、TCP标志中的URG和PSH位

URG(紧急位): 急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。T C P的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的)

PSH(急迫位): 在一个交互程序中,当客户发送一个命令给服务器时,它设置P U S H标志并停下来等待服务器的响应。通过允许客户应用程序通知其T C P设置P U S H标志,客户进程通知T C P在向服务器发送一个报文段时不要因等待额外数据而使已提交数据在缓存中滞留。类似地,当服务器的T C P接收到一个设置了P U S H标志的报文段时,它需要立即将这些数据(包括以前存中滞留的数据)递交给服务器进程而不能等待判断是否还会有额外的数据到达。 PSH=1,只对接收方的接收缓冲区起作用,发送方通过使用PUSH位来通知接收方将所有收到的数据立即提交给服务器进程,而不需要等待额外数据(将缓存填满)而让数据在缓存中停留!这里所说的数据包括与此PUSH包一起传输的数据以及之前就为该进程传输过来的数据(滞留在缓存中的数据)。

 二者的区别:

摘自《WinSock网络编程经络》第5章:
URG 紧急位,设置为1时,首部中的紧急指针有效;为0时,紧急指针没有意义;
PSH 推位,推功能,设置为1时,要求把数据尽快地交给应用程序;
通常的数据中都会带有PSH,但URG只在紧急数据时设置,也称"带外数据",解释如下:
紧急指针 
URG标志设置为1时,紧急指针才有效,紧急方式是向对方发送紧急数据的一种方式,表示数据需要优先处理。它是一个正的偏移,与TCP首部中序号字段的值相加表示紧急数据后面的字节,即紧急指针是指向紧急数据最后一个字节的下一字节。这是协议编写上的一个错误,RFC1122中对此给出了更正说明,紧急指针是数据最后一个字节,不是最后字节的下一位置。TCP首部中只有紧急指针指出紧急数据的位置,它所指的字节为紧急数据,但没有办法指定紧急数据的长度。

urg=1,紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的)psh=1就是是把接收缓冲中排好序的那一段数据交给上层

 

 

传输层的端口与TCP标志中的URG和PSH位