多媒体

移动通信

计算机网络

  无限网络今日始
  羽檄交驰话通信
  计算机网络的五脏六腑
  嫦娥孤凄与谁邻
  因特网的游戏规则
  团结的力量――网络互连
  Internet今昔谈
  网络应用万花筒
  小心驶得万年船

智能网

光通信

微波通信

卫星通信

交换网

接入网

电信管理网

 

 

  
  电信博物馆 > 计算机网络 > 因特网的游戏规则


 


滴水不漏的TCP协议

  TCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。

  通过对每个TCP传输的字段指定顺序号,可以获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。通过发送应答,用以确认别的主机收到了数据。对于发送的每一个小段,接收主机必须在一个指定的时间返回一个确认。如果发送者未收到确认,数据会被重新发送;如果收到的数据包损坏,接收主机会舍弃它,因为确认未被发送,发送者仍会重新发送分段。

  TCP是一个更高层次的协议。它允许运行在不同主机上的应用程序相互交换数据流。在大多数情况下,每个TCP数据段装在一个IP数据报中进行发送。但如需要的话,TCP将把数据段分成多个数据报,而IP数据报则与同一网络不同主机间传输位流和字节流的物理数据帧相容。由于IP并不能保证接收的数据报的顺序与发送的相一致,TCP会在收信端装配TCP数据段并形成一个不间断的数据流。FTP和HTTP就是两个非常流行的依靠TCP的TCP/IP应用程序。

  另一个重要的TCP/IP协议集的成员是用户数据报协议(UDP),它同TCP相似但比TCP原始许多。TCP是一个可靠的协议,因为它能通过错误检查和握手确认来保证数据完整地到达目的地。UDP是一个“不可靠”的协议,因为它不能保证数据报的接收顺序同发送顺序相同,甚至不能保证它们是否全部到达。如果有可靠性要求,则应用程序避免使用它。同许多TCP/IP工具同时提供的SNMP(简单网络管理协议)就是一个使用UDP协议的应用例子。

  下面的内容可以让我们对TCP协议的功能和特点有更为深刻的认识。

(一)怎么接头--端口与套接字Socket

  TCP端口为信息的传送提供地点,端口号小于256的定义为常用端口。 SOCKETS实用程序使用一个协议端口号来标明自己应用的唯一性。端口可以使用0到65536之间的任何数字。在服务请求时,操作系统动态地为客户端的应用程序分配端口号。

套接字

  网络应用程序把两台希望相互通讯的计算机连在一起,所以它们需要连接来交换数据。在TCP/IP中,这种连接叫做套接字(Socket),它和金属套管用的是一个词。TCP/IP的套接字是一种支撑某物的支架,所以需要两个套接程序,每台计算机一个。为了建立双方的连接,以达到各类通讯要求,一个应用程序通过定义三部分来产生一个套接字:主机IP地址、服务类型(面向连接的服务是TCP,无连接服务是UDP)、应用程序所用的端口。套接字在要领上与文件句柄类似,因为其功能是作为网络通信的终结点。

(二)电影院散场与TCP的流量控制

  就像电影院散场的时候人如潮涌,平时则冷冷清清,网络中的通信量也会时大时小,有时传输量过大,信号就无法到达目的地。TCP的一个重要作用就是对通信量的控制。

  TCP采用可变发送窗口的方式进行流量控制。发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整自己的接收窗口(可增大或减小),然后告诉对方,使对方的发送窗口和自己的接收窗口一致。这种由接收端控制发送端的做法,在计算机网络中经常使用。

(三)没收到?再发呗!--TCP的重发机制

  重发机制是TCP中最重要和最复杂的问题之一。TCP每发送一个报文段,就设置一次定时器。只要定时器设置的重发时间到而还没有收到确认,就要重发这一报文段。但是,大家知道,TCP的下层往往是一个互连网环境,可能是一个高速的局域网,也可能是多个低速的广域网,而且路由还可能会发生变化,所以往返时延(就是从数据发出到收到对方的确认所经历的时间)差别很大。那么,TCP的超时定时器的重发时间究竟应设置为多大?TCP采用了一种自适应算法,就是把各个报文段的往返时延样本平均得出平均往返时延,每测量到一个新的往返时延样本就计算一次平均往返时延,并通过公式更新定时器的重发时间。

(四)三次握手--TCP的运输连接管理

  TCP对话通过三次握手来初始化。三次握手的目的是使数据段的发送和接收同步;告诉其它主机其一次可接收的数据量,并建立虚连接。

  我们来看看这三次握手的简单过程:

  (1)初始化主机通过一个同步标志置位的数据段发出会话请求。

  (2)接收主机通过发回具有以下项目的数据段表示回复:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将收到的下一个数据段的字节顺序号。

  (3)请求主机再回送一个数据段,并带有确认顺序号和确认号。

[上一页]