day25-TCP三次握手四次挥手以及过程中状态转换

TCP/IP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的 可靠            的、基于字节流的传输层通信协议

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是一种无连接的传输层协议

TCP 传输控制协议  面向连接的协议(同步传输)  可靠传输协议  传输效率低  na

UDP 用户报文协议  无连接协议    (异步传输)  不可靠传输协议 传输效率高 

系统中:

异步传输数据: 类似离线传输  不需要进行确认 

    优点: 传输效率较高

缺点: 安全性不高

同步传输数据: 类似在线传输  需要进行确认

    优点: 安全性高

缺点: 传输效率较低


1.TCP协议中重要原理

    1) TCP三次握手过程  -- 完成网络连接建立

  TCP报文结构:

  a 源端口地址    返回数据包目标端口地址 

  b 目标端口地址  要和服务端哪个网络服务建立连接

  端口的数值范围: 1-65535 是通过报文结构获知的

  根据报文结构 源端口和目标端口各占用16个bit

  公式: 2的n次方 n占用了多少比特

  占用了1bit

  端口范围: 0 1  2种  2的1次方=2 0-1       

  占用了2bit

  端口范围: 00(0) 01(1) 10(2) 11(3) 4种  2的2次方=4 0-3

  占用了3bit

  端口范围: 000(0) 001(1) 010(2) 011(3) 100(4) 101(5) 110(6) 111(7)  8种 2的3次方=8 0-7

  占用了16bit

  端口范围: 2的16次方=65536  0-65535 --- 1-65535

  PS: 一般0号端口不被使用

  c Sequence Number(序列号)

  d Acknowledgement Number(确认号)


  特殊6bit作为报文结构中的控制位:

  syn(连接)  --- 请求建立连接控制字段

  ack(确认)  --- 表示确认控制字段

  fin(断开)  --- 请求断开连接控制字段

  说明: 控制字段数值置为1表示控制功能开启 默认为0


  三次握手详细过程:

  第一次握手: 发送TCP数据报文 客户端 -- 服务端

              a TCP数据报文中,需要将syn控制字段改为1

              b TCP数据报文中,需要将seq序列号信息发出 seq=x

  第二次握手: 发送TCP数据报文 服务端 -- 客户端

               a TCP数据报文中,需要将ack控制字段改为1

               b TCP数据报文中,同时将syn控制字段改为1

              c TCP数据报文中,同时将ack确认号信息发出 ack=x+1

              d TCP数据报文中,同时将seq序列号信息发出 seq=y

  第三次握手: 发送TCP数据报文 客户端 -- 服务端

              a TCP数据报文中,需要将ack控制字段改为1

              b TCP数据报文中,同时将ack确认号信息发出 ack=y+1

              c TCP数据报文中,同时将seq序列号信息发出 seq=x+1

   2.TCP四次挥手过程  -- 完成网络连接断开

  第一次挥手: 发送TCP数据报文 客户端 -- 服务端

              a TCP数据报文中, 需要将fin控制字段改为1

              b TCP数据报文中, 同时将ack控制字段改为1

                    也包含seq和ack确认号信息

  第二次挥手: 发送TCP数据报文 服务端 -- 客户端

                 a TCP数据报文中, 需要将ack控制字段改为1

  第三次挥手: 发送TCP数据报文 服务端 -- 客户端

                  a TCP数据报文中, 需要将ack控制字段改为1  

                  b TCP数据报文中, 同时将fin控制字段改为1

  第四次挥手: 发送TCP数据报文 客户端 -- 服务端

                  a TCP数据报文中, 需要将ack控制字段改为1

扩展: 如何抓取网络数据包(抓包软件) 

windows: Wireshark

linux: tcpdump命令

3. TCP 11种状态集转换(了解 -- 架构层面)

    1) 以后可以更好排查系统网络问题

  2) 以后学习网络编程会有帮助

TCP三次握手过程: 服务端和客户端状态变化(5种状态变化)

    第一历程: 初始状态信息

客户端状态为: closed

服务端状态为: closed

第二历程: 服务端开启相应服务

服务端状态为: closed -- LISTEN

第三历程: 发送建立连接请求(客户端) == 三次握手第一次

客户端发送syn信息

客户端状态为: closed -- syn_sent

第四历程: 接收建立连接请求(服务端) == 三次握手第二次

服务端接受syn信息, 发送确认以及请求建立连接信息(ack syn)

服务端状态为: LISTEN -- syn_rcvd

    第五历程: 发送最后确认信息(客户端) == 三次握手第三次

    客户端发送ack信息

    客户端状态为: syn_sent -- established

    第六历程: 接收最后确认信息(服务端)

    服务端接收ack信息

    服务端状态为: syn_rcvd -- established

    结论: 只有服务端和客户端都统一处于established连接建立状态, 才能正常传输数据信息

TCP四次挥手过程: 服务端和客户端状态变化(5种状态变化)

第一个历程: 初始状态信息

客户端状态为: established

服务端状态为: established

第二个历程: 发送断开连接请求(客户端) == 四次挥手第一次

客户端发送fin请求断开连接字段

客户端状态为: established -- fin_wait1

第三个历程: 接收断开连接请求(服务端) == 四次挥手第二次

服务端接受fin请求断开连接字段 发出确认信息(ack=1)

服务端状态为: established -- close_wait

第四个历程: 接收确认断开信息(客户端)

客户端接受服务端发出的确认信息(ack=1)

客户端状态为: fin_wait1 -- fin_wait2

第五个历程: 发送断开连接请求(服务端) == 四次挥手第三次

服务端发送fin请求断开连接字段 同时还会再次发送确认字段

服务端状态为: close_wait -- last_ack

第六个历程: 接收断开连接请求(客户端) 发送最后确认信息 == 四次挥手第四次

客户端接收断开连接请求 同时发送最后确认信息ack=1

客户端状态为: fin_wait2  -- time_wait (等时间 60s 90s 120s???)

第七个历程: 接收最后确认信息(服务端)

服务端状态为: last_ack  -- closed

第八个历程: 等待时间结束

客户端状态为: time_wait -- closed


你可能感兴趣的:(day25-TCP三次握手四次挥手以及过程中状态转换)