首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

TCP/IP原理浅析(4)

TCP/IP原理浅析(4)

  • TCP和UDP采用16 bit的端口号来识别不同的应用程序。
    网络服务一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务的TCP端口号都是21,每个Telnet服务的TCP端口号都是23,每个TFTP(简单文件传送协议)服务的UDP端口号都是69。任何TCP/IP实现所提供的服务都使用知名的1~1023之间的端口号。这些知名端口号由Internet号码分配机构(Internet Assigned Numbers Authority, IANA)来管理。现在IANA管理1~1023之间所有的端口号。
    大多数TCP/IP实现给临时端口分配1024~5000之间的端口号。大于5000的端口号是为其他服务(Internet上并不常用的服务)预留的。
    如果仔细检查这些标准的简单服务以及其他标准的TCP/IP服务(如Telnet、FTP、SMTP等)的端口号时,我们发现它们都是奇数。这是因为这些端口号都是从NCP端口号派生出来的(NCP,即网络控制协议,是ARPANET的传输层协议,是TCP的前身)。NCP是单工的,不是全双工的,因此每个应用程序需要两个连接,需预留一对奇数和偶数端口号。当TCP和UDP成为标准的传输层协议时,每个应用程序只需要一个端口号,因此就使用了NCP中的奇数。

    端口号.png

  • TCP首部的数据格式,如果不计任选字段,它通常是20个字节。
    每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。
    序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32 bit的无符号数。
    当建立一个新的连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN(Initial Sequence Number)。因为SYN标志消耗了一个序号,该主机要发送数据的第一个字节序号为这个ISN加1。
    确认序号包含发送确认的一端所期望收到的下一个序号。确认序号应当是上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。
    发送ACK无需任何额外代价,因为32 bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
    TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
    在TCP首部中有6个code bits 中的多个可同时被设置为1。含义如下:
    URG紧急指针(urgent pointer)有效.ACK确认序号有效。PSH接收方应该尽快将这个报文段交给应用层。RST重建连接。SYN同步序号用来发起一个连接。FIN发端完成发送任务。
    TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,窗口大小是一个16 bit字段,因而窗口大小最大为65535字节。
    检验和覆盖了整个的TCP报文段:包括了TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
    只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
    最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项。它指明本端所能接收的最大长度的报文段。
    TCP报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

    TCP传输控制协议.png



    TCP端口号.png

返回列表