tcp协议的解读

    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滑动窗口控制,重传策略,拥塞控制,会在后续的里面介绍

谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容