深入理解TCP协议上

本文为作者原创内容,未经许可,禁止转载。如您发现侵权行为,请联系我们

在网络传输的世界里, TCP/IP协议族提供了很多服务支撑,这其中TCP协议尤为重要,它提供了可靠的字节流传输服务。当我们使用HTTP访问网页,或者使用WebSocket与服务端建立持久连接,再或者与远程服务器上的服务如MySQL,Redis建立连接时都将建立在TCP协议之上,使用TCP提供可靠的传输服务。

可靠是TCP的最大的特点之一,如何在错综复杂的网络环境中实现“可靠”的传输,将是本文讨论的重点。本文将以“可靠”为线索,使用Wireshark进行抓包分析,逐步深入理解TCP的各项特性和连接原理。


文章分为上下两部分,上文中主要使用抓包来分析TCP的首部与选项的含义。下文《深入理解TCP协议下》主要介绍TCP的各种特性。在网络传输中,TCP的样子自然就是一串很长的字节流,但是如何分清楚其“五官”,就是下面要做的事情。

首先,TCP是以IP数据报的格式进行传输,即包含IP首部的组成方式:


使用WireShark抓包如下:    


注意:笔者在实际抓包时,使用浏览器进行请求,发现一次HTTP请求却建立了多个TCP连接,查阅资料后得知,这是浏览器普遍采用的加速机制:多个连接中有返回的就采用最先返回的,不必等待。所以,为了更加便于我们分析TCP原理,我们使用命令行进行HTTP的请求。


选中上图中的第一条TCP请求连接(即SYN)进行分析:    

图中所示共有四行,第一行是物理层,为设备之间通信提供一些“信号”,不在网络传输中,不做详解。
第二行,Ethernet II,Src,即以太网首部,由14字节组成,包含了目标MAC地址和源MAC地址,在链路层传输所用,不做详解。

说明:网络传输中的数据解析到最底层即是以太网首部这一层。    

第三行和第四行即是我们要探寻的TCP的样貌,由名称可见,第三行就是IP首部,第四行是 TCP首部 + TCP选项,展开第三行如下图:    



IP首部内容即是下方的蓝色字体,一个16进制位包含4bit,故图中蓝色字体40个16进制位即160bit,刚好20B

转化成16进制,使得更容易分析,实际传输中,就是计算机能识别的二进制,对应如下图:


引出IP首部如下,刚好与上图一一对应,下图只是其以32位为一行对齐之后的模样: 

   

现展开第四行:


第四行就是TCP首部+TCP选项的内容,TCP选项的含义下文会解读,其首部对齐之后如下:    


以上,就是TCP的“五官”划分。

下篇我们将要探讨,这样的五官,都具备了怎样的功能。