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和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的紧急方式是发送端向另一端发送紧急数据的一种方式。我会在后面的章节具体介绍。