TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。
一、TCP协议的定义TCP在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层,在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。
首先,我们需要知道,我们程序的数据首先会打到TCP的Segment中,然后TCP的Segment会打到IP的Packet中,然后再打到以太网Ethernet的Frame中,传到对端后,各个层解析自己的协议,然后把数据交给更高层的协议处理。
TCP头格式TCP协议是面向连接的协议,把连接作为最基本的抽象。每一条TCP连接唯一的被通信两端的两个端点所确定。TCP协议是点对点,而不是点对多点。端点又被称为套接字,TCP协议规定,IP地址拼接端口号就构成套接字。
接下来,我们来看一下TCP头的格式:
1、seq:序号。TCP协议是面向字节流的,在一个TCP连接中的传送的字节流的每一个字节都是按照顺序编号,seq需要占用4个字节,所以范围是[0 4294967296],序号可以重复使用。TCP规定,首部中序号字段值是本报文段所发送数据的第一个字节的序号。序号用于跟踪该端发送的数据量。4