我们知道在TCP/IP模型中,有时也叫DoD(Department of Defense)模型,TCP/IP简化OSI的七层模型为四层,由下而上分别为:网络接口层,网际层,传输层和应用层。而今天我学习的就是传输层的TCP协议(传输控制协议)。
本文目录:
1.TCP协议简介
2.TCP报文格式
一.TCP协议简介
TCP是TCP/IP协议栈中的传输层的协议,TCP协议又叫传输控制协议(Transport Control Protocal),是面向连接的,可靠的字节流服务。它的可靠性体现在:3次握手建立连接,滑动窗口机制,一定的拥塞避免算法,流量控制,以及一定的超时重传机制。在本文中并不介绍它的可靠性的实现机制。。。
要学习TCP协议,首先要了解TCP报文的报文格式,下面是TCP的报文格式及分析。。。
二.TCP报文格式
1).16位的源端口号和目的端口号,我们知道端口号就是标识特定主机上的唯一进程的,而IP地址是用来标识网络中的不同主机的,这两个源和目的端口号和IP首部中的源和目的IP地址则标识互联网上的唯一进程,所以套接字的定义说白了就是IP地址和端口号共同组成。
2).32位的序号,是用来标识从TCP发送端向TCP接收端发送的数据字节流的,是一个32位的无符号数。它表示在这个报文段中的的第一个数据字节在数据流中的序号。如果将字节流看作在两个应用程序间的单向流动,则TCP用序列号对每个字节进行计数。用来保证到达数据顺序的编号。
3).32位的确认序号,上一个字段的序号是对数据的编号,所以确认序号是下一个期望接收的TCP分段号,相当于是对对方所发送的并且已经被本方所正确接受的分段的确认。确认序号应当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志为1时该确认序列号的字段才有效。所以顺序号和确认号共同作用于TCP服务中的确认,差错控制,是用于确保TCP的安全性和可靠性的。
4).4位的报头长度,以32位字长为单位,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能表示15(四位全为1)个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。不存在任选字段正常的报头长度是20字节。其实相当于给出数据在数据段中的开始位置。
5).保留位,占6比特,为将来的应用而保留,目前置为'0'。
6).编码位,占有6个比特位,他们中可以有多个为置为1,依次为:URG,ACK,PSH,RST,SYN,FIN。
URG:该位为1说明表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据。
ACK:该位为1时说明确认字段是有效,反之为0。
PSH:请求急迫操作,这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。