您的位置:首页 > 理论基础 > 计算机网络

TCP(传输控制协议)概述

2015-08-25 11:16 591 查看
TCP(传输控制协议)概述

TCP和UDP都是运输层的协议,使用相同的网络层(IP),但是TCP和UDP提供着完全不同的服务,TCP提供一种面向连接的,可靠的字节流服务。

什么叫面向连接呢?是指使用TCP的应用在开始交换数据之前,要先建立起一个可靠的连接。就像打电话一样,双方会在提起话筒后先互相说“喂”,确认连接已经正确建立了,然后才开始说正事。在后一章中将介绍建立连接以及关闭连接的流程。

TCP的可靠性来源于以下一些方式:

~应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。(我还没有搞清楚这样做有什么优点)

~当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。超时重传是TCP保证可靠性的一个重要策略,之后的章节里会具体讲超时重传的算法。

~TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。这个策略是用来防止有人伪造报文首部的,至于校验和的算法,我会在这一章后面介绍。

~既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

~既然IP数据报会发生重复,TCP的接收段必须丢弃重复的数据。

~TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收段只允许另一端发送接受端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。我会在后面的章节中具体介绍TCP是如何估算当前网络状态能接受的最大吞吐量的。

TCP的首部: 

因为TCP是建立在IP的基础上的,所以TCP的数据前会有一个IP首部。然后作为一个TCP报文段,又会有一个TCP首部,之后才是TCP数据。

下面一张图显示了TCP首部的数据格式。接下来我会具体介绍各个部分的作用。

一个IP地址和一个端口号被称为一个插口(socket),在IP首部中给出了源IP地址和目的IP地址,再加上源端口号和目的端口号就构成了可以唯一确定一个TCP连接的四元组。

序号和确认序号的作用是来保证数据报的发送和接收顺序不变的,简单得说,发送端发送第一个数据包的时候,序号是32bit的无符号数,随机生成,确认序号为0。接收端回发数据的时候,确认号为它接受到的上一个包的序号,确认序号则随机生成。发送端接收到回发数据后,再次发送数据时序号为回发数据的确认序号,确认序号则为回发数据的序号加上自己要发的数据包的大小。

首部长度给出首部中32bit字的数目。

TCP首部中的6个标志比特URG,ACK,PSH,RST,SYN,FIN分别表示紧急指针有效,确认序号有效,接收方应该尽快将这个报文段交给应用层,重建连接,同步序号用来发起一个连接,发送端完成发送任务。如果哪个标志比特需要启用,则将它的值设置成1。它们具体的用法会在后面的章节中介绍。

TCP的流量控制由连接的每一端通过申明的窗口大小来提供。最大为65535字节,后面讲介绍窗口大小具体是怎样影响TCP对于流量的判断的。

校验和覆盖了整个TCP报文段:TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。校验和本身是用于校验目的地一组数据项的和的。它通常是以十六进制为数制表示的形式。数据项可以是数字或在计算校验的过程中看作数字的其它字符串。校验和(checksum)是指传输位数的累加,当传输结束时,接收者可以根据这个数值判断是否接收到了所有的数据。如果数值匹配,那么说明传送已经完成。

紧急指针:只有当URG标志为1时才生效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。我会在后面的章节具体介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tcp 网络