TCP协议及三次握手的总结

作者: 木秋 时间: 2017-04-21 点击量: 501

一、TCP特点简介

        TCP提供一种面向连接的、全双工的、可靠的字节流服务。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。TCP的接收端必须丢弃重复的数据。TCP对字节流的内容不作任何解释。对字节流的解释由TCP连接双方的应用层解释。 

        TCP通过下列方式来提供可靠性:

       1、应用数据被分割成TCP认为最适合发送的数据块,称为报文段或段。

      2、TCP协议中采用自适应的超时及重传策略。

      3、TCP可以对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 

      4、TCP的接收端必须丢弃重复的数据。TCP还能提供流量控制。


二、TCP数据包结构

    tcp.jpg


        源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。


        序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。


        确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。


        数据偏移——占4bit,它指出TCP报文段的数据起始处距离 CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。


        保留字段——占6bit,保留为今后使用,但目前应置为0。

        

        紧急比特URG——当URG=1时,表明紧急指针字段有效。[www.t262.com)它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

        

        确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

        

        复位比特RST(Reset) —— 当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。


        同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。

终止比特FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。


        窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。

    

        检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。


        紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。


        选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。


        填充字段——这是为了使整个首部长度是4字节的整数倍。 TCP首部的主要选项:


最大报文段长度MSS(Maximum Segment Size)是TCP报文段中的数据字段的最大长度。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。” 窗口扩大因子,用于长肥管道。

时间戳,可用于测量往返时延RTT。


TCP的数据编号与确认:

        TCP协议是面向字节的。TCP将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。

在连接建立时,双方要商定初始序号。TCP每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。

        TCP的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加1。因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。 为提高效率,TCP可以累积确认,即在接收多个报文段后,一次确认。



三、TCP建立与断开连接

    深度截图20170421165953.png


    建立连接过程(三次握手):


        1、A的TCP向B发出连接请求报文段,其首部中置同步比特SYN =1,并选择序号x,表明传送数据时的第一个数据字节的序号是x。

        2、B的TCP收到连接请求报文段后,如同意,则发回确认。B在确认报文段中应置SYN=1,其确认号应为x+1,同时也为自己选择序号y。

        3、A收到此报文段后,向B给出确认,其确认号应为 y+1。

        A的TCP通知上层应用进程,连接已经建立。

        

        当运行服务器进程的主机B的TCP收到主机A的确认后,也通知其上层应用进程,连接已经建立。


    断开连接过程(4次挥手):


    深度截图20170421172023.png


        在数据传输结束后,通信的双方都可以发出释放连接的请求。TCP连接的释放是两个方向分别释放连接,每个方向上连接的释放,只终止本方向的数据传输。当一个方向的连接释放后,TCP的连接就称为“半连接”或“半关闭”。当两个方向的连接都已释放,TCP连接才完全释放。