TCP/IP协议是网络七层协议中最重要的两个协议,一个负责传输层的数据传输,一个负责网络层的数据传输。它的重要程度之高导致有时候七层协议直接称为TCP/IP协议。所以对TCP/IP协议的了解将决定了在服务器端开发、调试中是否能快速定位到问题,程序优化方向是否正确。在这篇文章中主要是针对TCP的协议格式与链接、断开过程进行简单分析。
1:基础介绍
TCP(Transimission Control Protocol)负责传输层的数据传输,并保证数据的完整性与有序性,是面向链接、字节流传输(UDP面向无连接、数据包传输)。它是在协议栈的第四层传输层使用到的协议,通过IP协议传输。因为在IP网络层是点对点,随机选择路由进行跳转转发的,没有办法保证任何一个IP数据包都可以正常准时到达对端。因此在IP层是无法保证数据的完整性,只能依靠更高层的协议保证。TCP是如何保证数据的有序与完整性的那,那需要对TCP协议进行介绍。
首先对TCP的头部进行一个简单的介绍说明。
1.1:TCP头部简介
通过上图可以看到,一般情况下,TCP的头部是20个字节,最后一个四个字节记录检验和与紧急指针。那么TCP的头部是如何解决了数据的有序性与完整性的那?在回答问题之前还要对有序性再多说一句。这里的有序性并不是指的一端发送数据,另一端是有序接收到。不是指发送端先发包A,又发送了包B,而接收端就一定是先接收到A,再接受到B。这里的有序性可以理解成数据最终有序性。因为网络的问题,无论什么协议都不可能保证数据有序接收。因为TCP数据流会以往网络层的IP包来传输,而IP是随机选择路由的(其实也不是随机),不可能保证先后发送的IP报可以先后被对端接收到。虽然TCP接受端不能有序接受到数据,但是它可以有其他机制来保证数据最终有序。下面就对头部简单介绍来分析它是如何保证有序和完整性的。