vlambda博客
学习文章列表

TCP/IP网络必备知识(四) --- TCP协议详解


    这几天要辅导娃期末复习,时间不多,花了两天才学习完TCP协议的工作过程并整理笔记,敲字时手冻得发冷,但还是要坚持学习,心里才会觉得暖暖的。

TCP协议:

TCP(Transmission Control Protocol) 传输控制协议,对数据的传输进行一定的控制。

主要涉及TCP的三次握手和四次挥手,后面的内容详细讲解它们的交互过程。

 

TCP协议的工作过程:

先举一个例子来理解TCP三次握手的过程。

例:男生向女生提出恋爱交往请求过程



男生发出请求交往消息,女生收到消息后,礼貌回应(确认ACK=1)并表示同意交往试试(SYN=1),男生收到后也向女生发送消息通知确认已经得到她的回复(ACK=1),并确认自己也想试试(SYN=1),确认完毕,正式开始交往。男女生一共发送了三次消息,也就是类似TCP的三次握手过程。

 

TCP协议头部组成结构,如下图所示:

TCP/IP网络必备知识(四) --- TCP协议详解


上图中红色圈出部分是我们要重点掌握的内容。

>>序号(sequencenumber):也就是编号,TCP数据包过大,分段,比如分成10段,编号为12…910。按照顺序重组 seq == 1

>>确认号(acknowledgenumber): 存在于服务器回应消息的确认消息里,依据序号,ack(确认号)==1+seq,表示服务器期望收到它的下一个序号。

>>状态控制码(codecontrol flag): 标志位 --- 信号灯, 1---亮,0---灭,表示数据包的类型,有六种类型,我们重点理解下面四种类型:

ACK(acknowledge):确认位,=1,表示这个消息时一个确认消息

RST(RESET):重置。=1,表示这个消息释放链接。TCP连接出现错误,比如主机服务器崩溃,断开连接。请求重新建立连接。

SYN(synchronous):同步,=1,表示这个消息是:1.一个发起连接的消息 + 确认接受连接消息。

FIN(Final):终止,=1,表示发送报文结束了,释放这个连接。接下来应该进行四次挥手了。

 

TCP/IP网络必备知识(四) --- TCP协议详解


    注意:TCP三次握手连接发起前,客户端和服务器都处理Close状态。


TCP三次握手过程:

    第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(SynchronizeSequence Numbers)。

 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

◆上述过程中的重要概念:

(1)未连接队列

 在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(seq=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于 Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

(2)Backlog参数

 三次握手协议表示内核为相应套接字排队的最大连接个数。SYN-ACK重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

(3)半连接存活时间

 是指半连接队列的条目存活的最长时间,也即服务器从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。


改进的三次握手


    对于一个已经建立的连接,TCP使用改进的三次握手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下:

第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。

第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。

第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。

第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。

    当我们在电脑上访问百度服务器的过程就是TCP的典型应用,虽然我们是通过http/https协议来实现,但这两个协议是基于TCP协议的:Client --- 百度server,主要是通过TCP协议建立交互和链接的前提下,通过http/https协议进行交互。


TCP协议连接请求包含TCP三次握手连接过程TCP四次挥手断开连接过程。

细节如下:


 

TCP/IP网络必备知识(四) --- TCP协议详解

 

继续举一个例子来理解TCP四次挥手的过程。

TCP/IP网络必备知识(四) --- TCP协议详解


例:男生向女生提出分手的请求过程,男生女生都非常的绅士和淑女,比较容易理解。


 

TCP/IP网络必备知识(四) --- TCP协议详解


TCP四次挥手断开连接发起前,客户端和服务器都处理连接状态。客户端发出断开连接请求后,等待服务器确认并发送关闭连接的请求,然后客户端再确认,至此四次挥手就完成了。

下图为我们关闭百度页面的过程示意图:

 

TCP/IP网络必备知识(四) --- TCP协议详解


 

下面是wireshark抓包TCP三次握手的数据包情况,可以对照上面的原理来加深印象。

打开浏览器访问一个页面,抓包。

TCP/IP网络必备知识(四) --- TCP协议详解



输入tcp协议进行过滤,点击第一个包分析TCP流信息,邮件点击该条报文信息,选择追踪流之TCP流。

TCP/IP网络必备知识(四) --- TCP协议详解

TCP/IP网络必备知识(四) --- TCP协议详解


以上重点关注传输层的内容,可对照前面所讲来分析。

接下来的图是第二次握手信息。

TCP/IP网络必备知识(四) --- TCP协议详解


同样查看TCP流信息

TCP/IP网络必备知识(四) --- TCP协议详解


最后是第三次握手信息



TCP四次挥手包以此方法同理可以自行分析。

 

注意TCP协议中的发送的每个数据包都是需要确认的。

如果理解起来依然觉得困难,可以点击下面的链接观看视频详细讲解:

https://edu.csdn.net/course/play/30776/453095