TCP三次握手和四次挥手 详解

2023-10-30

首先了解下TCP报文

16位源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。

16位目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

32位序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(Initial Sequence Number,ISN),而第一个数据字节是ISN+1。这个序列号(序列码)可用来补>偿传输中的不一致。

32位确认序号:32位的序列号由接收端计算机使用,重组分段的报文成最初形式。如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。

4位首部长度:4位包括TCP头大小,指示何处数据开始。

保留(6位):6位值域,这些位必须是0。为了将来定义新的用途而保留。

标志:6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。

16位窗口大小:用来表示想收到的每个TCP数据段的大小。TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小>是一个16字节字段,因而窗口大小最大为65535字节。

16位校验和:16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。检验和覆盖了整个的TCP报文段:这是一个强制性的字段,一定是由发送端计算和存储,
并由接收端进行验证的。

16位紧急指针:指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。

选项:长度不定,但长度必须为1个字节。如果没有选项就表示这个1字节的域等于0。

数据:该TCP协议包负载的数据。

在上述字段中,6位标志域的各个选项功能如下。

URG:urgent紧急标志。紧急标志为"1"表明该位有效。

ACK:acknowledge确认标志。表明确认编号栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

PSH:push推标志。该标志置位时,接收端不将该数据进行队列处理,而是尽可能快地将数据转由应用处理。在处理Telnet或rlogin等交互模式的连接时,该标志总是置位的。

RST:restart复位标志。用于复位相应的TCP连接。

SYN:同步标志。表明同步序列编号栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编
号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

FIN:结束标志。

TCP三次握手:


第一次握手:1,client将数据包标志位SYN置为1,随即产生一个值seq=J

                 2,client发送数据包(SYN=1,seq=J),进入SYN_SENT状态

第二次握手:1,server收到包,发现SYN=1,知道是请求连接.

                  2,server将数据包标志位SYN=1,ACK=1,ack=J+1,随机产生seq=K

                  3,server发送数据包(SYN=1,ACK=1,ack=J+1,seq=K),进入SYN_RCVD状态

第三次握手:1,client收到包,发现ACK=1,ack=J+1.

                  2,client将数据包标志位ACK=1,ack=K+1,

                  3,client发送数据包(ACK=1,ack=K+1,seq=J+1),进入ESTABLISHED状态

                   4,server收到包,发现ACK=1,ack=K+1,也进入ESTABLISHED状态.完成握手,建立了连接

在server处于SYN_RECV状态即是半连接状态.SYN攻击是典型的ddos攻击,client伪造大量ip让server处于SYN_RECV状态.在超时之前,这些SYN包占满了队列,从而导致正常的SYN被丢弃.而server在client未回复ACK时,会认为发送的SYN/ACK包丢失,从而不断重复发送,直至超时.

查看是否遭到攻击,可以通过natstat -nap|grep SYN_RECV 进行查看. -n numeric显示ip而不是域名 -a显示所有连接中的 socket. -p显示所有使用socket的programs -t显示tcp.

TCP四次挥手:


第一次挥手:1,client发送一个FIN包(seq=M,FIN=1),并进入FIN_WAIT_1状态

第二次挥手:1,server收到FIN包,立刻发送ACK包(seq=v,ack=M+1,ACK=1),并进入CLOSE_WAIT状态.

                   2,client收到ACK包,进入FIN_WAIT_2状态,此时是半连接状态.

第三次挥手:1,server将需要发送的数据包发送完毕.

                  2,server发送FIN包(seq=N,ack=M+1,FIN=1,ACK=1),进入LAST_ACK状态

                  3,client收到FIN后,进入TIME_WAIT状态

第四次挥手:  1,client立刻发送ACK包(seq=M+1,ack=N+1,ACK=1).

                    2,server收到ACK包,进入CLOSED状态.完成挥手.

在client处与TIME_WAIT状态后,需要等待2MSL.为什么呢?第一,确保TCP连接正常关闭.第二,确保网络中的延迟数据从网络中消失.

1,如果client不等待2MSL,由于ip协议不可靠,ACK包可能丢掉,导致server收不到ACK包,第四次挥手不成功.于是server在超时后,以为第三次挥手对方没收到FIN,便重复发送.

a,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP三次握手和四次挥手 详解 的相关文章

随机推荐

  • hid自定义report 影响键盘_基于STM32CUBE的USB键盘例程.docx

    前面说了USB鼠标 这次趁热打铁 说一下USB键盘 依然只说如何修改 不说背后的原理 原因你懂的 涉及的知识点太多了 会不会写成USB三部曲 不知道 猜猜我下一步再写个啥 1 生成工程 首先 STM32CubeMX的配置部分不说了 和USB
  • (三)高德地图之自定义缩放及缩放动画效果

    这一节主要实现的功能是地图的自定义缩放及缩放的动画效果 还是直接放上代码更直观些 主要部位里面基本有注解 还是老样子 首先是新建activity zoom animate xml布局文件
  • Unity urp2d ShaderGraph 实现一个黑白转彩色的场景渐变效果 设计思路

    设计背景 2022网易MG比赛 策划案里关卡背景是一个信中被损坏的场景 主角要去修复这个场景的故事 然后原本的场景呈现黑白色的效果 但主角旁边画面是彩色的 关卡结局还要有镜头拉远 然后整个画面以主角为中心扩散恢复颜色的视觉效果 效果展示 项
  • 为什么说Python是普通人编程领域的王者

    点击上方 菜鸟学Python 选择 星标 公众号 超级无敌干货第一时间推给你 Python 自上个世纪诞生 一直过着不温不火的生活 直到近几年 乘着数据科学的东风 从低调的脚本小兵 成为了全能型的战士 同时也被被培训机构狠狠地炒火了一把 然
  • 稀疏数组

    稀疏数组 1 什么是稀疏数组 稀疏数组可以看做是普通数组的压缩 但是这里说的普通数组是值无效数据量远大于有效数据量的数组 下面蓝色的就是普通的二维数组转换成稀疏数组的形式 2 为什么要用稀疏数组 当二维数组中的很多值的默认值为0 因此也记录
  • iOS开发多线程-线程间的通信

    一 简单说明 线程间通信 在1个进程中 线程往往不是孤立存在的 多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后 转到另1个线程继续执行任务 线程间通信常用方法 void perfo
  • 05-----检测某个端口是否开放和查看服务器防火墙状态

    1 检测某个端口是否开放 nc vv 192 168 1 117 8890 结果 2 查看服务器防火墙状态 service firewalld status 或者使用下面的命令查看防火墙状态 主要看系统 systemctl status f
  • CCNP学习考试心得(转)

    CCNP学习考试心得 转 more 当计算机屏幕上显示 Congralation时 我不禁长出一口气 心中想 终于考完了 我所说的终于考完是指 我终于完成了ccnp的考试 四个月的学习 对于某些人来说可能太长了 但是要真正掌握ccnp的内容
  • C++学习系列之打印金字塔和倒金字塔

    实例要求 用符号 打印一个金字塔 用符号 打印一个倒金字塔 金字塔代码 include
  • VSCode中开发JavaWeb项目(Maven+Tomcat+热部署)

    1 安装插件 首先需要安装所用到的插件 分别用来支持Java 热部署和Tomcat服务器的插件 在插件市场中搜索Java 第一个就是Extension Pack for Java 内置了6个依赖插件 直接一键安装即可 然后是热部署插件 市场
  • python recvfrom设置超时_如何在python的socket recv方法上设置超时?

    我需要在python的socket recv方法上设置超时 怎么做 仅供参考 如果您选择使用超时 您需要知道如何处理超时 这个SO问题讨论了超时发生时的处理 stackoverflow com questions 16745409 典型的方
  • elementui实现横向时间轴_横向时间轴(进度条)

    1 2 3 4 5 6 7 8 9 10 timeline box 11 width 100 12 height 8rem 13 position relative 14 15 16 timeline container 17 height
  • 2023 年及未来最佳的软件构建工具

    当今世界 加快任务完成速度和尽可能减少人力投入是一切事物都需要关注的问题 软件开发也不例外 无论你在哪个领域 游戏 区块链 还是应用创建 软件开发的竞争都异常激烈 只要能够帮助到你 采用任何手段都无关紧要 而这也正是构建工具的作用 这些工具
  • Linux——I/O复用(2)—— poll和epoll

    poll原型 poll系统调用和select类似 也是在指定时间内轮询一定数量的文件描述符 以 测试其是否有就绪者 int poll struct pollfd fds int nfds int timeout fds struct pol
  • JAVA笔记--异常处理(第一篇)

    目录 一 异常概念 1 什么是异常 2 try与catch关键字 二 try catch finally 1 catch 2 异常处理过程分析 3 finally 三 throw throws与异常规则 1 throw throws 2 异
  • Unity3d 通过json文件使用C#脚本代码生成多个相机

    首先设计一个存储相机类型的json类如下 using UnityEngine using System using System Collections Serializable public class Cameras public in
  • matlab基本粒子群算法实现(四)

    最后在炼数成金那边找到了很好的一篇教程 在这里把它整理一下 做个粒子群算法的收尾 main m I 清空环境 clc clear II 绘制目标函数曲线 figure x y meshgrid 5 0 1 5 5 0 1 5 z x 2 y
  • 阿里巴巴一道笔试题

    其实这是谷歌的一道面试题 给定能随机生成整数1到5的函数 写出能随机生成整数1到7的函数 惭愧 阿里的笔试题做错了 说实话 以前没见过 见过了就把搞懂 阿里题目 给定rand 7 表示能生成1 7的随机数 使用四则运算和循环等控制语句 可以
  • Python基础之循环语句

    Python基础之循环语句 一 循环语句介绍 1 循环语句理解 2 循环语句示意图 二 循环语句的分类 三 循环控制语句 四 while循环 1 while死循环 2 while条件循环 五 break和continue 1 break使用
  • TCP三次握手和四次挥手 详解

    首先了解下TCP报文 16位源端口号 16位的源端口中包含初始化通信的端口 源端口和源IP地址的作用是标识报文的返回地址 16位目的端口号 16位的目的端口域定义传输的目的 这个端口指明报文接收计算机上的应用程序地址接口 32位序号 32位