根据报文格式来理解TCP协议

来源:互联网 发布:快递数据录入员兼职 编辑:程序博客网 时间:2024/04/29 07:23

 TCP协议规定了在不同主机间进行可靠数据流传输的通用方法,如 连接建立与释放、报文编号、收到数据报后的确认、流量控制、发送超时等等。靠死记硬背来学习这些东西,没过几天就又忘记了。我发现根据TCP报文格式来了解掌握这些知识,效果还是不错的。看到下面这张图(此图来源于网络),就能回忆起关于TCP协议的大部分东西:

Source Port,Destination Port:源端口号,目标端口号。IP实现了点到点的数据通信,而TCP实现的是端到端的通信。通信端用一个IP与端口号来唯一标识。(其实端口号就是用来标识同一主机中的不同进程。)IP协议负责将数据传输到目标主机,而TCP可以根据数据报中的端口号,将数据交给相应的程序进行处理。

Sequence Number:发送序列号。IP实现点到点的通信,这种通信是不可靠的。IP数据报可能会丢失或乱序到达目标主机,而TCP提供一种可靠的通信方式。它通过对发送的数据报进行编号(准确的说应该是对数据流进行编号)来实现可靠通信。如:应用程序发送2048个字节数据到目标主机,TCP协议首先将这些数据报打包成一个一个的数据报,然后对其进行编号。假设每个数据报携带的数据的长度是100个字节,第一个数据报的编号是1, 那么第二个数据报的编号就是101,第三个的编号是201,以此类推。

Acknowledgment Number: 确认序号。对于发送端来讲,这个序号表示下一个tcp报文的起始序号,对于接收端来讲,表示下一个希望接收到报文的序号。

Data Offset:该字段占用4个字节,用来表示报文首部的长度,单位是4byte。例如:0x05 表示 报文的首部长度是 5 * 4 = 20个字节。

Reserved:该字段占用6个字节,作为保留字段,暂时没有什么用处。

后面是六个标识位(uaprsf,记得每个单词的首字母):

URG(ent): 如果该位置为1,表示该报文比较紧急,要赶紧传输。
ACK:确认序号。跟上面的Acknowledgment Number有点关系。只有该位置为1时,Acknowledgment Number才有效。
PSH:push,推。表示接收到接到报文后,要赶紧传递给应用层。
RST: reset,重置连接。
SYN: 同步。在创建连接的时候,用到该标识位。
FIN:终止。在释放连接的时候,用到该标识位。
Window:滑动窗口的大小。用于通信双方的流量控制。为了保证通信的可靠性,TCP对报文进行编号,然后发送。接收到接到报文后,要向发送方进行确认。一般情况下,发送方不是在收到确认消息之后才发下一个报文,这些网络的利用率太低,而是在没有收到确认消息时,可以发送的数据是有个最大上限。

Checksum:对报文进行校验。如果校验失败,就丢弃该报文。

Urgent Pointer:智能针针。具体我还不清楚,网上一些资料的解释是:指向后面是优先数据的字节。

Options:选项。当前tcp只定义了一个选项:最大报文段长度。它用于告诉通信的另一方,当前协议框缓冲区所能接收到报文段的最大长度。

Padding:填充段。确保报文头的长度能为32整除。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/JGood/archive/2009/12/13/4953648.aspx