关于TCP三次握手和四次挥手

作者: 跑步与开车 | 来源:发表于2018-03-06 19:53 被阅读72次

    废话

    1.TCP报文的定义格式:
    TCP报文格式.png
    2.TCP报文的电/光/波信号形式

    通过电话线传输就电信号咯(找个电子打火机打一下,估计里面的蓝光类似)
    途径一段路由器有光缆,就变成了光信号咯(就跟激光灯差不多吧)
    途经无线电,就变成无线电波形式咯(就跟声音差不多)

    3.TCP报文的二进制形式

    把2里面的形式变成二进制数据存在了存储设备里面,大概可能长这样:
    1101010111011111 0010001010111000 ......
    太多了只显示两个端口号的数据好了

    4.TCP报文的十六进制形式

    操作系统把二进制形式转化成十六进制方便理解计算啥的,长这样(图侵删)


    十六进制TCP报文.png
    5.然后根据上面的就知道数据表达的意思了

    源端口号2字节: d5 df (54751)
    目的端口2字节: 22 b8 (8888)
    TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接
    序号(seq4字节) 37 59 56 75
    确认序号(ack 4字节)00 00 00 00
    由于该报文为SYN报文,ACK标志为0,故没有确认序号(ACK标志为1时确认序号才有效)
    一旦连接建立,该值将始终发送(同ACK标志)

    首部长度(4 位) 1000,(转化为10进制是8 8×32/8 = 32,该报文头部长度为32个字节)
    存在该字段是因为TCP报头中任选字段长度可变报头不包含任何任选字段则长度为20字节4位所能表示的最大值为1111,转化为10进制为1515×32/8 = 60,故报头最大长度为60字节

    标志位(12位)0000 0000 0010
    Reserved保留3位:000 必须置为0
    ENC 3位:000 显示拥塞通告。
    控制位6位
    URG:0 Ugent(16位紧急指针有效标志)
    ACK:0 确认序号有效标志(一旦一个连接建立起来,该标志总被置为1即除了请求建立连接报文(仅设置Syn标志位为1),其它所有报文的该标志总为1)
    PSH:0 推送标志
    RST:0 重置连接标志
    SYN:1 同步序号标志
    FIN:0 传送数据结束标志

    窗口大小(2字节):TCP流量控制通过连接的每一端声明窗口大小进行控制(接收缓冲区大小)
    20 00(00100000 00000000)= 8192 最大65535

    检验和(2字节):检验和覆盖整个TCP报文段;强制字段,由发送端计算存储,由接收端进行验证
    2e 2f
    紧急指针(2字节):当Urgent标志置1时,紧急指针才有效
    00 00
    任选字段(0 - 40字节):不想写,参考文件www.networksorcery.com/enp/protocol/tcp.htm

    正题

    1.三次握手

    概念
    TCP握手协议:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接
    第一次握手
    建立连接时,客户端发送SYN包,例如seq = 200 ,SYN = 1 (200是随机产生的一个值,TCP规定SYN = 1的时候不能携带数据)给服务器,然后Socket进入SYN_SENT状态
    第二次握手
    服务器收到SYN报文段进行确认,发一个将SYN=1,ACK = 1,seq = 300,ack = 201(ack确认号为收到的序列号+1,ACK=1表示确认号有效,建立成功全程都是1,300是随机生成的)
    第三次握手
    客户端再进行一次确认,发一个ACK = 1,seq = 201,SYN = 0,ack = 301,ACK = 1(seq为第一次发送的seq+1,SYN从此都是0,ack为服务器确认的seq+1,ACK从此都是1)
    建立成功

    四次挥手

    tcp四次挥手,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    第一次挥手:
    主机1向主机2发送FIN报文段,表示关闭数据传送,并主机1进入FIN_WAIT_1状态,表示没有数据要传输了
    第二次挥手
    主机2接受到FIN报文后进入CLOSE_WAIT状态(被动关闭),然后发送ACK确认,表示同意了主机1的关闭请求
    第三次挥手
    主机2等待主机1发送完数据,发送FIN到主机1请求关闭,主机2进入LAST_ACK状态,
    第四次挥手
    主机1收到主机2发送的FIN后,回复ACK确认到主机2,主机1进入TIME_WAIT状态,主机2收到主机1的ACK后就关闭连接了,状态为CLOSED,主机1等待2MSL,仍然没有收到主机2的回复,说明主机2已经正常关闭了,主机1关闭连接
    MSL(Maximum Segment Lifetime):报文最大生存时间,是任何报文段被丢弃前在网络内的最长时间。当主机1回复主机2的FIN后,等待(2-4分钟),即使两端的应用程序结束。

    相关文章

      网友评论

        本文标题:关于TCP三次握手和四次挥手

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