计算机网络应用  TCP协议
TCP(Transmission Control Protocol,传输控制协议)是重要的传输层协议,也是TCP/IP最具代表性的协议。它是面向连接的、基于字节流的能够提供可靠的端到端数据传输协议。
1.TCP协议功能特点
IP协议提供了一种使计算机能够发送和接收数据的方法,即将分组从发送端传送到接收端。但它是不可靠的传输,必须通过TCP协议才能解决数据报在传输过程中出现的各种差错,如数据报丢失、重复等。因此,TCP协议具有以下功能特点:
面向连接的服务
在进行数据传输时,首先应在发送端和接收端建立相应的连接。即发送端和接收端分别利用服务原语创建一个称为套接字(Socket)的连接端点。
面向数据流
两个应用程序相互传输大量数据时,可以将数据划分为字节流。在传输过程中,接收端应用程
序收到的字节流顺序同发送端送出的字节流顺序一样。
缓冲传输
当应用程序将数据发送给TCP实体时,TCP可能将其缓存起来,待累加到一定量后,将其作为一个数据片发送出去,以便提高数据传输效率。
对于急需发送出去的数据,TCP协议提供了一种PUSH机制。应用程序用PUSH标志来通知TCP协议把当前在缓冲区中的数据立即发送出去。
可靠性
TCP协议采用带重传的肯定确认机制来进行差错控制和流量控制。TCP协议能够对不按顺序到达的数据片进行整理,最后将其组装成原报文。
全双工连接
TCP协议允许在两个方向上同时进行数据传输。数据流服务允许在一个方向上结束数据传输,而在另一个方向上,数据仍在继续传输。由于其支持全双工连接,因此可以在一个方向
的数据流中同时附带对相反方向数据流的控制信息,这样减轻了网络负载。socket通信报文格式
重置  TCP允许在传输的过程中突然中断连接,这称为TCP重置。
2.TCP协议的数据段格式
TCP协议在计算机之间传输数据时的基本数据单元称为数据段。通过报文段的交互最终能够实现连接的建立、传输数据、发出确认、通告窗口大小以及关闭连接等。其报文格式如图3-1所示。
图3-1  TCP报文格式
TCP报文格式可以分为报头区和数据区两部分。其中,数据区包括高层需要传输的数据,而报头区是为了正确传输高层数据而增加的控制信息,这些控制信息包括源端口、目的端口等。
源端口和目的端口  源端口指明了发送端的端口号,目的端口指明了接收端的端口号。
序列号
它指明了段在即将传输的段序列中的位置。即数据段中第一个数据字节的序号(除含有SYN的数据段外)。在含有SYN的数据段中,序列号字段为SYN的序号,即建立本次连接的初始序号,在该连接上发送的第一个数据字节序号为初始序号加1。
确认号
当报头控制字段为ACK时,该字段才有效。它表示本地希望接收的下一个数据字节的序号。对于收到有效确认号的发送端来说,其值表示接收端已经正确接收到了该序号以前的数据。
数据偏移  该字段指明当前报文段中数据的起始位置,以4字节为单位。
保留  它预留了一个保留字段,以备将来使用。
控制位
它指定了报文段的应用目的和内容,包括6中不同类型的控制位,其各控制位字段代表含义如表3-1所示。
表3-1  控制位类型
控制位字段名称
含义
URG
表示紧急指针
ACK
表示确认
PSH
表示尽快的将数据送往接收端进程
RST
表示复位连接
SYN
表示同步
FIN
表示发送方完成数据发送
窗口
该字段表示当前报文段发送端,能够接收从确认号开始的最大数据长度。该字段主要向对方通告本地接收缓冲区的使用情况,以指定关于发送端能传输的下一段字段的大小。
校验和
该字段包含TCP段头和数据部分,用于校验协议伪头、TCP报头,以及数据部分的可靠性。
紧急指针
当报头控制位字段为URG时,该字段才有效。它表示从当前报文段序号开始的一个正向位移,指向紧急数据的最后一个字节。
选项
该字段位于TCP报头的尾部。它分为单字节和多字节两种格式,单字节格式只标明选项类型,而多字节格式由一个字节的选项类型、多字节的实际选项数据和一个字节的选项长度组成。
3.TCP协议的工作原理
TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一条连接,数据在发送出去后,发送方回等待接收方给出一个确认性的回答,否则发送方将认为此数据丢失,并重新发送此数据。
建立TCP连接
TCP建立连接的过程也被称为“三次握手”过程,如图3-2所示。其中,计算机A要与要与计算机B建立连接,A发送第一个握手的报文段,其中SYN位置1,并随机选取一个初始数序号X,这样告诉计算机A自己对数据编号的信息。计算机B在接收到计算机A发送的请求后返回一个应答报文段,也在其中指出自己的顺序号。计算机A在接收到B的应答时发送一个确认报文,其中ACK位置1。计算机B在接收到计算机A发送的确认报文段后,连接就成功建立。通过三次握手,计算机A与计算机B就都做好了传输数据的准备并且交换了一些信息。
图3-2  三次握手过程示意图
关闭TCP连接
当计算机A与计算机B的应用程序完成数据传输后,TCP将关闭连接以释放其所占用的计算机资源。通信双方都可以在数据传输接收后请求释放连接。由于TCP是全双工通信,因此只有当接收和发送双方主机都关闭连接时,连接才被真正关闭。只有一方发送关闭连接信号时,则其还能接收对方的数据,直到对方也发出管理连接的信号为止。
例如,当计算机A要关闭连接时,它将发送一个FIN位置位、序列号为Y的报文段,计算机B在接收到此数据后也将马上发送一个证实信号并通知其上层的应用程序,使其直到对方已关闭连接。此时,计算机A不再发送任何数据,但是还可以接收从计算机B传送来的数据。当计算机B要停止发送数据时,也发送一个带有FIN位置的报文段给计算机A,以告知计算机A自己要关闭连接,至此TCP连接关闭,双方通信结束,其过程如图3-3所示。
图3-3  TCP连接关闭过程示意图
4.TCP数据排序和确认
TCP是一种可靠的传输协议,在传输的过程中它使用序列号和确认号来了解数据的接收情况。
TCP采用为每个字节的数据分配一个序列号的方法,以保证接收端既可以对接收到的数据进行重组,恢复得到最初的数据,另外,还能够让接收到了解到还有多少数据没有接收及哪些数据需要重复接收等。
序列号在TCP报文段中占32比特位,因此其最大值为232-1。当数据过大,序列号大于此值时,应该对序列号的最大值232取模。
当TCP要发送数据时,它随机选择一个初始序列号(正整数),且该序列号依次递增,按顺序地分配给后续的每个字节的数据。如发送的数据是“TCP SEGMENT”,其第一个随机产生的序列号为20,那么气候每个字节的数据序列号依次为21、22、23…24、25…,如图3-4所示。
图3-4  TCP发送数据序列号示意图
值得注意的是,如果初始序列号为X,则其发送的第一个字节的顺序号应为X+1,序列号X则用于同步。
TCP在发送数据的同时,还将启动一个计时器,其目的在于,如果在一定的时间内接收不到确认信号,发送方将认为数据已丢失,需要重新发送数据。例如,计算机A发送数据给计算机B,A首先发送报文1,在B接收到报文1后,将发送一个ACK;A在接收到ACK后,接着发送报文2,B在接收到报文2后,继续发送一个ACK给A,A在接收到ACK后,继续发送报文3,依次类推,直到连接关闭,如图3-5所示。
图3-5  接收方发送数据后发送确认号

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。