tcp三次握手四次挥手

tcp原理

  1. TCP报文段的首部格式:

    tcp三次握手四次挥手_第1张图片

    ACK :只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

    SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求 报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1.因此,SYN置1就表示这是一个连接请求或连接接受报文。

    FIN:用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

    tcp三次握手四次挥手_第2张图片

  2. tcp三次握手过程:

    Client:我可以给你发数据吗?
    Server:可以
    Client:好的
    tcp三次握手四次挥手_第3张图片

    2.1、首先由Client发出请求连接即 SYN=1,声明自己的序号是 seq=x

    2.2、然后Server回复确认,SYN=1 ,声明自己的序号是 seq=y, 并设置为ack=x+1,

    2.3、最后Client 再进行一次确认,设置ack=y+1.

    seq 序列号范围:2^32 -1 到最大值,再从0开始 seq 序列号作用:依据这个序列号来组数据

    使用tcpdump抓包查看tcp三次握手过程
    tcpdump
    常用参数:
    -c         指定包个数
    -n        IP,端口用数字方式显示(不把IP解析成域名)
    port   指定端口 
    tcpdump port 22 -c 3 -n -i ens33 -S
    注:Flags [S]  中的 S 表示为SYN包为1
    
  3. tcp四次挥手
    tcp三次握手四次挥手_第4张图片

    3.1、当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没 有数据),其中 FIN 设置为1, seq=u;

    3.2、 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不 再发送信息(但仍可接收信息)。B会发送收一个报文,其中 FIN 设置为 1, ack=u+1; A收到B的确认包后,进入等待状态,等待B请求释放连接。

    3.3、服务器B向客户A发送断开连接请求,包中FIN=1,seq=w,ack = u+1

    3.4、A收到后回复一个确认信息,发送包,ack=w+1,并进入 TIME_WAIT 状态

    为什么第二次和第四次没有seq序列号? 因为已经要断开了,没有必要产生新的序列号。
    a 我没有数据要传输了,我要断了
    b 好;b数据传输完,我也要断了
    a 好

    使用tcpdum抓取4次挥手数据包
    tcpdump port 22 -c 3 -n -i ens33 -S
    
  4. TCP连接状态详解:
    tcp三次握手四次挥手_第5张图片

    服务器端LISTEN:侦听来自远方的TCP端口的连接请求

    客户端SYN-SENT:在发送请求连接后等待匹配的连接请求

    服务器端SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求确认

    客户端/服务器端:ESTABLISHED:代表一个打开的连接

    客户端:FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

    服务器端:CLOSE-WAIT:等待从本地用户发来的连接中断请求

    客户端:FIN-WAIT-2:从远程TCP等待连接中断请求

    服务器端:LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认

    客户端:TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

    服务器端:CLOSED:没有任何连接状态

喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章; 文章中用到的文件、安装包等可以加小编联系方式获得;
欢迎来交流小编联系方式VX:CXKLittleBrother 进入运维交流群

你可能感兴趣的:(tcp/ip,网络,网络协议)