TCP协议及工作原理浅析

来源:互联网 发布:寻爱软件骗局 编辑:程序博客网 时间:2024/04/30 01:42

摘 要:虽然TCP/IP协议并不完全符合OSI的七层参考模型,但TCP/IP通讯协议采用的4层层级结构从一开始便成为了业界的实际标准。传输控制协议TCP是TCP/IP协议栈中的传输层协议,提供可靠的数据流发送和到应用程序的虚拟连接服务。

关键词:TCP/IP协议;TCP通路 
  众所周知,计算机连接因特网都要作TCP/IP协议设置,显然该协议成了当今世界计算机相互通信的标准协议。尽管它不符合OSI设计的七层模型,但实际上成为了业界的事实上的标准协议。作为实际的网络标准,许多问题都需要在深刻了解该协议的基础上才能更好的得到解决和优化。本文通过研究,进一步了解其工作原理、运行机制。
一、TCP/IP整体构架
  TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的七层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。而TCP/IP通讯协议采用了四层的层级结构,每一层都使用它的下一层所提供的网络来完成自己的需求。这四层分别为:
  应用层:应用程序间通信的层,如SMTP、FTP、Telnet等。
  传输层:它提供了节点间的数据传送服务,如TCP、UDP等,它们给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
  网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(不检查是否被正确接收),如IP协议。
  网络接口层:对实际的网络媒体的管理,定义如何使用实际网络来传送数据。


TCP报头:TCP报头总长最小为20个字节,其报头结构如下图(图1)所示;



二、TCP通路的建立和终结
  不同主机需要进行通信时,首先必须建立起一个连接,当通信结束后,则必须关闭这个连接以释放资源。TCP协议是构建在不可靠的协议之上,故需要一种“握手”机制来建立连接。通常我们将这种建立连接的方式称为“三次握手”机制。
  TCP连接包括三个状态:连接建立、数据传送和连接终止。TCP用三次握手建立一个连接,四次握手过程来释放一个连接。
  TCP连接的正常建立通常是一端打开一个端口监听连接请求,这就是通常所指的被动打开。服务器端被动打开以后,用户端就能开始建立主动打开。
  1、客户端向服务器端发送一个SYN来建立一个主动打开,作为三次握手的一部分。
  2、服务器端为一个合法的SYN回送一个SYN/ACK。
  3、最后客户端再发送一个ACK。这样就完成了三次握手,连接建立。
三、TCP连接状态
  TCP可具有如下几种状态:
  1、CLOSED
  关闭状态。在两个通信端建立连接前即处于该状态。
  2、LISTEN
  监听状态。处于此状态服务器端此时正在等待客户端的连接请求。
  3、SYN-SENT
  客户端发送一个SYN 报文请求建立与服务器端的连接后,设置为此状态。如果已得到对方应答,则进入ESTABLISHED 状态。
  4、SYN-RECV
  一般服务端在接收到客户端发送的SYN报文后,会发送一个附带ACK的SYN报文进行与对方的同步,之后将其状态设置为SYN-RECV。
  5、ESTABLISHED
  客户端接收到其之前发送的SYN报文的ACK后,设置为此状态。而此时处于SYN-RECV状态的服务端在接收到此ACK后也会将自己的状态设置为此状态。到此连接完全建立,之后二者即可进行数据传输。
  6、FIN-WAIT-1
  客户端发起关闭操作,此时客户端将发送一个FIN报文给对方,并将其状态设置为此状态。
  7、FIN-WAIT-2
  处于FIN-WAIT-1状态的客户端在接收到之前发送的FIN的ACK报文后,将其状态设置为此状态,然后一直处于该状态,直到接收到对方发送FIN报文。收到后将进入TIME-WAIT状态。
  8、CLOSE-WAIT
  服务端在接收到对方的FIN报文时,将本地状态设置为此状态,并即刻发送ACK报文给对方。此后本地仍可以发送尚未发送的数据直到数据发送完。
  9、CLOSING
  当连接双方同时发送FIN时,会进入此状态。
  10、LAST-ACK
  此状态从CLOSE-WAIT状态变化而来。当服务端发送完用户数据后,进行关闭操作,便发送一个FIN报文完成通信通道的完全关闭。在服务端发送这个FIN报文后,设置为此状态,等待最后一个客户端响应的ACK报文,一旦接收到,则连接完全关闭,服务端将状态设置为CLOSED。对于客户端,当接收到服务端发送的FIN时,其首先发送一个ACK报文给服务端,之后将状态从FIN-WAIT-2设置为TIME-WAIT。
  11、TIME-WAIT

  静等待状态。这是对于首先发送关闭操作的一端(一般即客户端)所最后经历的状态。2个报文最大生存时间的等待时间对于应用程序编程的影响即一般在关闭一个客户端套接字后,系统不会允许立刻建立一个同样通道的套接字连接。

       更沉入了解:http://jasonccie.blog.51cto.com/2143955/422966

出处:http://lunwen.1kejian.com/jisuanjiwangluo/67677.html