美文网首页
tcp协议的解读

tcp协议的解读

作者: 北方_f6b4 | 来源:发表于2018-12-07 16:42 被阅读0次

        1 七层网络协议 

    首先作为我们要交流的基础,我们先上张图,七层网络协议,具体每一层都干了什么就不作具体讲解了。了解 

               七层协议就行、


    网络七层协议

    2 我们要说的Tcp位于传输层,我们知道,对报文的处理,在经过每一层都会经过一次封装头或者解析头的过程,各层的封装与解析如下图所示

      我们tcp在传输层,主要解析的是tcp头,传输的控制数据在存在tcp头部下面,到了传输层,我们的数据就只包含tcp头和体数据了,我们就一起来探讨下

    1 tcp服务模型的特征与

    2  tcp头部包含了哪些信息解析后分别起到了什么作用

    3 建立连接断开连接机制

    3  Tcp的服务模型的特征

    我们现在常用的http服务就是基于tcp连接的,tcp总结起来有以下几个特征

    1 面向连接的传输,传输前必须先建立连接。传输完毕需要断开连接。

    2  仅支持单播传输。只能进行端到端的传输,不支持多播和广播传输

    3  传输单元为数据段,传输单位为字节,字节过长时将其分段(数据段大小可变,最小为21字节)

    4 支持全双工传输,允许通信双方随时都能够发送数据,因为tcp通信两端都设有缓存,用于存放临时双方通信的数据。当然tcp也能立即发送一个接受到的数据段(URG配合紧急指针oobinline来实现),也可以缓存一段时间后发送。

    5 URG配合紧急指针实现数据及时发送

    6 可变tcp数据段大小和tcp数据段的个数

    7 重传策略保证数据的安全性

    4    tcp的段结构

         tcp能够支持上面集中特性,与tcp的结构是密不可分的。tcp的头可分为10部分,每一部分都是极其重要的,都控制住tcp连接的一个部分。下面,我们得先来看看tcp头部都包含了哪些部分(如图)

    tcp的段结构

    1 源端口:16bit告诉主机该报文段从哪里来, 客户端是系统自动选择的端口号,服务器不同协议默认使用不同 

           的端口号(如http协协议,默认80端口) 

    2 目标端口:16bit,目标节点端口,就是要传输给上层哪个程序。

     3 序列号:32bit,是数据段的序列号。tcp字节流中每个字节都有编号,我们这次传输的数据段大小是100个数据

                        字节。第一个字节的编号是一个随机值ISN,那么这段字节的序列号就是ISN+1,ISN+2,                

               ISN+3,......,ISN+100等

        4 确认号:32bit,用于对另一方发过来的序列号进行确认,他的数值是序列号的数值加一,同时也表示该字节                序号前面的字节全部接收。

         5  数据偏移(头长度):4bit,表示tcp头的长度为多少字节,也表示数据 的偏移,一共4位,最大表示数为

                                   15,所以头长度 最大15位,60个字节

           6 标志位(6位):分别为1  URG标志,表示紧急指针是否有效ACK标志,表示确认号是否有效。称携带

                                                      2   ACK标志 的tcp报文段位确认报文段

                                                      3    PSH标志,提示接收端应用程序应该立即从tcp接受缓冲区中读  走数据,为

                                                                                  接受后续数据腾出空间(如果应用程序不将接收的数据读走,

                                                                                它  们就会一直停留在tcp缓冲区中)

                                                        4 RST标志,表示要求对方重新建立连接。携带RST标志的tcp报文段为复位报                                                                            文段。               

                                                         5  SYN标志,表示请求建立一个连接。携带SYN标志的tcp报文段为同步报文

                                                                            段。

                                                          6 FIN标志,表示通知对方本端要关闭连接了。携带FIN标志的tcp报文段为结

                                                                           束报文段。

            7 窗口:16bit,是tcp流量控制的一个手段。这里说的窗口,指的是接收通告 窗口。它告诉对方本端的tcp接

                              收缓冲区还能容纳多少字节的数据,这样对方就可以根据这个值来改变自己的发送窗口的大小。

            8  检验和 :16bit,由发送端填充。接收端对tcp报文段执行CRC算法来校验tcp报文段是否在传输层被损

                                    坏。

              9 紧急指针:16bit,当URG=1时这段部分才起作用。紧急指针是一个偏移量,指向紧急数据与非紧急数据

                                    的临界点,紧急数据起点是序列号,终点是序列号+紧急数据大小。所以 我们也称其为紧                        

               10  选项(可变长度):部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20

                                             字 节的固定部分),还要 保证利用填充字段保证tcp头是4的整数倍。 急偏移。紧急

                                                指针内的数据不走tcp的数据缓冲区,能够立即发送传输的数据

    到这里tcp头的几个段都已经简单介绍了。tcp头是控制tcp数据传输的主要机制。  也是tcp连接,断开,传输,重 传的支持。理解非常重要,是我们介绍接下来内容的基础。

    5 tcp的连接建立   

    1 传输控制协议tcp协议基于连接的传输协议。数据传输前需要建立逻辑连接 tcp采取的机制是三次握手协议,以

                      此来建立全双工的连接。

    第一次握手:客户端的应用进程主动打开,并向客户端发出请求报文段。其首部中:SYN=1,seq=x。                                 

    第二次握手:服务器应用进程被动打开。 若同意客户端的请求,则发回确认报文 其首部中:

                         SYN=1,ACK=1,ack=x+1,seq=y。                            

    第三次握手:客户端收到确认报文之后,通知上层应用进程连接已建立,并向服务器发出 a确认报文,其首部:

                       ACK=1,ack=y+1。当服 务器收到客户端的确认报文之后,也通知其上层应用进程连接已建立。

          至此 tcp三次握手完成,连接建立

    6 tcp连接的释放

                tcp是全双工协议,所以断开连接需要采用对称释放的方式。

        1 第一次挥手:A接收到应用层的通知,发送请求断开连接的数据段

        2 第二次挥手:  B发送应答段,表明数据传输完成,同意B的请求

        3 第三次挥手:B接收到应用层的通知,请求终止连接

        4 第四次挥手:A接到B的请求,同意断开连接

      如果是笼统的说,这样已经逻辑完整的完成tcp断连了。但是,在这期间,服务 器如何识别四次挥手的是同一个客户端,还有在断连过程中,第二次挥手到第三次挥手期间是可以进行单向数据传输的。四次挥手期间,Tcp连接的状态分别是什么,相信大家都和我一样很感兴趣。

                      如果细说四次挥手,我们可以将其分为8个阶段,(同时我也画了一  个示意图,如下)

    1 开始时,A,B都处于established状态, 可以进行双向传输状态

    2 A接收到应用层的通知,停止发送数据关闭tcp连接,报文头标志位的FIN=1序号seq=x+1,x是已传输数据的最后一 个字  节序号。A进入FIN-WAIT-1状态(终止等待1)状态,等待B的确认。FIN报文

      段即使不携带数据也要消耗一个序号

    3 B收到A的请求释放报文,确认 号X+2B的序列号是Y+1,Y是已传输数据的最后一个字节B进入Close-   

              wait状态(关闭等 待)。TCP服务器进程通知高层应用进程,从A到B的连接被释放了。这条Tcp

              连接进入半关闭状态。

    4 A收到B的确认,进入FIN-WAIT-2(终止等待2)状态 等待B发出连接释放报文段。

    5 B应用进程通知Tcp释放连接,报文段首部FIN=1,序号为seq=Z+1半连接状态B可能又向A发送了一段

        数据,B重复上次的确认号ack=X+2,B进入last-ack(最后等待)状态,等待A的回复。

    6 A收到B的断连报文,向B发出确认,ACK=1,确认号ack=Z+2A的序号seq=X+2,A进入time-wait状态

    7 A 经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A进入CLOSED状态。

    8 B收到A的确认,进入closed状态,撤销传输控制块TCB,Tcp连接释放成功

    (如下图)

    到这里,tcp四次挥手就介绍完了,后续的TCP滑动窗口控制,重传策略,拥塞控制,会在后续的里面介绍

    谢谢

    相关文章

      网友评论

          本文标题:tcp协议的解读

          本文链接:https://www.haomeiwen.com/subject/abwthqtx.html