网络协议与攻击模拟_05TCP协议

news2024/11/18 21:29:50

一、传输层知识回顾

1、传输层的功能

  • 定义应用层协议数据报文的端口号,流量控制
  • 对原始数据进行分段处理

2、传输层提供的服务

  • 传输连接服务
  • 数据传输服务、流量控制、差错控制、序列控制

3、传输层的协议

  • 面向连接的传输协议TCP
    要求数据在传输之前必须建立连接,数据传输完成后,必须释放连接
    仅支持单播传输,在两个终端之间建立点对点连接
  • UDP(用户数据报协议)

二、TCP协议

1、TCP协议

  • 面向连接的传输协议
  • 要求数据在传输之前必须建立连接,数据传输完成后,必须释放连接
  • 仅支持单播传输,在两个终端之间建立点对点连接

2、TCP报文结构

  • Source port:发送方端口号,随机端口
  • Destination:目标端口,HTTP协议,默认端口80
  • Sequence Number序列号
  • Acknowledgement number确认号
  • Header length:首部长度,32位
  • Reserved:为TCP将来发展预留的空间
  • Flags:控制位,常见的有urg、Ack、Push、Reset、Syn、Fin
    • urgent:用于标识发送数据时是否为紧急
    • Ack:确认控制位,服务器回复的确认
    • Push:是否将数据推到上一层
    • Reset:是否重置连接
    • Syn:建立连接时的控制位
  • Windows size value:窗口大小
  • Checksum 校验和
  • Urgent pointer:紧急指针
  • Options 选项

这里控制位为1表示现在正在发请求

Fin:数据发送完毕会有释放连接,当释放连接时Fin控制位为1

3、TCP报文字段

  • 序号seq:占32位,用于标识报文段所发送数据的第一个字节的编号。在TCP连接中,所传送的字节流的么一个字节都会按顺序编号。当SYN标记不为1时,这是当前数据分段的第一个字母的序列号;如果SYN的值为1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1.
  • TCP确认号Acknowledgement numbe:占32位,它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号,其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1.
  • TCP首部长度:数据偏移是指数据段中“数据”部分起始距离TCP数据段起始处的字节偏移量,占4位,其实这里的“数据偏移”也是在确定TCP数据段头部分的长度,告诉接收端的应用程序,数据从何处开始。
  • 保留Reserved:占4位,为将来TCP的发展预留的空间。目前必须全部为0.
  • URG:表示报文段中发送的数据是否包含紧急数据。URG为1表示有紧急数据,当URG为1时,后面的紧急指针字段才有效。
  • ACK:表示前面的确认字段是否有效。当ACK为1表示有效。只有当ACK为1时,前面确认号字段才有效。TCP规定,连接建立后,ACK必须为1.
  • PSH:告诉对方 收到该报文段是否立即把数据推送给上层。如果值为1,表示应当立即把数据交给上层,而不是缓存起来。
  • RST:表示是否重置连接。如果RST为1,说明TCP连接出现了严重错误(如主机奔溃),必须释放连接,然后再重新建立连接。
  • SYN:在建立连接的时候使用,用来同步序列号。当SYN为1,ACK为0时,表示这是一个请求建立连接的报文段;当当SYN为1,ACK为1时,表示对方同意建立连接。当SYN为1时,说明这是一个请求建立连接或同意建立连接的报文,只有再前两次我手中SYN才为1.
  • FIN:标记字段数据是否发送完毕。如果FIN为1,表示数据已经发送完成,可以释放连接。

4、TCP连接与释放

(1)三次握手

服务器上搭建有网站,开启了HTTP服务

TCP三次握手

  • 客户机向服务器发送请求建立连接,SYN控制位为1,报文有序列号seq假设为x。
  • 服务器收到客户端发来的建立连接请求后向客户端发出确认请求报文,ACK控制位为1,ack序列号为x+1,(ack=seq+1表示对上一条请求建立连接报文的确认),SYN控制位为1,报文有序列号seq记为y。
  • 客户端收到服务器发来的确认连接请求后,client向server回应确认请求报文,ACK控制位为1,ack序列号为y+1。seq 序列号为x+1.

Q:为什么是三次握手?不是两次或者四次呢?

  • 两次握手,会发生什么情况呢? 服务端在发出应答消息后无法确认客户端是否接受到消息了。

  • 四次握手,在三次握手中已经建立了一个稳定的传输流,为什么还要浪费性能再去发一次消息,第四次握手是一种性能浪费。

(2)四次挥手

TCP四次挥手

  • 客户端发送一个FIN+ACK标记的包,告诉服务器需要关闭连接,表示自己不用发送数据了,但是还可以接收数据。发送完成后,客户端进入FIN_WAIT_1状态。
  • 服务端发送一个ACK的确认包,告诉客户端接收到关闭的请求,但是还没有准备好。发送完成后,服务端进入CLOSE_WAIT状态,客户端收到这个包后,进入FIN_WAIT_2,等待服务器关闭连接。
  • 服务端准备好关闭连接时,发送FIN+ACK标记的包,告诉客户端准备关闭了。发送完成后,服务端进入LAST_ACK状态,等待客户端确认
  • 客户端接收到服务端的关闭请求,再发送ACK标记的确认包,进入TIME_WAIT状态,等待服务端可能请求重传的ACK包。服务端接收到ACK包后,关闭连接,进入CLOSED状态。

    客户端在等待固定时间(两个最大段生命周期)后,没有接收到服务的ACK包,认为服务器已关闭连接,自己也关闭连接,进入CLOSED状态。
     

Q:为什么是三次握手,却是四次挥手?三次挥手不可以吗?

假设是三次挥手,在服务器接收到客户端发送关闭的请求后,把SYN和ACK包一起发过去。这样会造成服务端还有数据没有发送完,造成了数据的丢失。所以中间的这一段时间,等待服务器把剩余的数据发送完是很有必要的。

(3)TCP半关闭

  • 客户机向服务器发送FIN表示客户机想要断开连接,但是服务器还在给客户机发送数据。
  • 客户机向服务器发送重新建立连接请求,客户机表示可以重新建立与服务器的连接。
  • 服务器向客户机发送了FIN+ACK断开连接的请求。
  • 客户机又向服务器发送重新建立连接的请求。 

(4)TCP半连接

半连接是SYN Flood的原理所在,SYN Flood是DDOS的一种。

  • 三次握手过程中客户机向服务器发了SYN请求
  • 服务器正常响应。标识与客户机建立连接,客户机已经占用了服务器资源。
  • 客户机不进行第三次握手,称为半连接,会造成一直占用服务器的连接资源。

5、常见的TCP端口号

  • 21 FTP
  • 22 SSH
  • 23 Telnet
  • 25 Smtp
  • 53 DNS
  • 80 HTTP
  • 110 POP3
  • 143 IMAP4
  • 443 HTTPS
  • 3306 MYSQL
  • 3389 RDP

dns是基于UDP的,但是如果有两台DNS服务器,要把一台DNS服务器上的数据同步到另一台DNS服务器上(即主DNS和辅助DNS的数据要实时同步),需要可靠连接的,所以会建立TCP连接。

三、winshark抓包分析

1、三次握手

2、四次挥手

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VQGAN:从图像重建到图像生成

本文的目标是作为全新图像生成系统的VQGAN。我已经开始讨论VQGAN的一部分——自编码器(VQVAE:矢量量化变分自动编码器)。VQVAE的概念是对编码器、解码器和码书的同时训练,该码书适用于所有可能的图像。码书是一组256个嵌入向量。具…

毕业设计:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

Material Design 进阶(十一)——Chip,ChipGroup,ChipDrawable使用

流式布局标签发展历程 第一阶段:实现这种界面的时候,基本都是自定义一个控件,然后在Java代码中动态的 添加一个个的TextView,还需要计算布局宽度/高度,进行换行等等处理,比较复杂;第二阶段:使用…

CSC8021_computer network_The Transport Layer

Role of the transport layer • The transport layer is responsible for providing a reliable end-to-end connection between two application processes in a network • Abstracting away the physical subnet • Does not involve intermediate nodes • Takes a netwo…

Centos源码编译安装Redis

Redis是常用的内容使用工具,每次安装服务器都需要安装Redis 为了减少重复工作,写了一个脚本自动安装Redis,如下 #!/bin/sh #下载源码 curl -O http://download.redis.io/redis-stable.tar.gz # 解压缩 tar zxf redis-stable.tar.gz cd redi…

【Redis集群】docker实现3主3从扩缩容架构配置案例

一,集群规划及准备工作 架构实现:Redis3主3从 二,搭建命令 第一步,创建6台服务: docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --clust…

照片删除了怎么恢复回来

照片,对我们来说,这两个字眼再熟悉不过了,每一张照片都包含无比重要的意义,相信在大家的心目中,这些包含意义的照片都是无价的。怎样找回删除的照片? 既然这些照片对我们来说意义非凡,那如果不小…

超详细的搭建压测平台笔记

0、前言 最近重新回来学习熊哥的极客教程,结合自己学习的shell编程和Docker的指令学习,对熊哥的一些操作做bash脚本自动化,将搭建压测平台的步骤做记录,目的是分享搭建过程。 过程中会安装docker,mysql,redis,influxdb,grafana,…

分布形态的度量_峰度系数的探讨

集中趋势和离散程度是数据分布的两个重要特征,但要全面了解数据分布的特点,还应掌握数据分布的形态。 描述数据分布形态的度量有偏度系数和峰度系数, 其中偏度系数描述数据的对称性,峰度系数描述与正态分布的偏离程度。 峰度系数反映分布峰的尖峭程度的重要指标. 当…

2024--Django平台开发-Redis集群(十一)

内容回顾 主从复制。 哨兵:实例启动了,哨兵节点没启动,Python通过redis-py连接报错。一定要确保实例节点和哨兵节点都启动了。 搭建集群用的是虚拟机的多台centos服务器,你在跟着学习的时候,一定要全部都是虚拟机&am…

Mysql-redoLog

Redo Log redo log进行刷盘的效率要远高于数据页刷盘,具体表现如下 redo log体积小,只记录了哪一页修改的内容,因此体积小,刷盘快 redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快Redo log 格式 在MySQL的InnoDB存储引擎中,redo log(重做日志)被用…

【UEFI基础】EDK网络框架(VLAN)

VLAN VLAN代码综述 在MNP中有很多的VLAN介绍,MNP存在的一个重要原因也是为了处理VLAN,而本文介绍的NetworkPkg\VlanConfigDxe\VlanConfigDxe.inf其实只是一个帮助模块,真正的VLAN配置还是在MNP中。 VLAN同样是一个UEFI Driver Model&#…

pytorch一致数据增强—异用增强

前作 [1] 介绍了一种用 pytorch 模仿 MONAI 实现多幅图(如:image 与 label)同用 random seed 保证一致变换的写法,核心是 MultiCompose 类和 to_multi 包装函数。不过 [1] 没考虑不同图用不同 augmentation 的情况,如&…

adb 常用命令汇总

目录 adb 常用命令 1、显示已连接的设备列表 2、进入设备 3、安装 APK 文件到设备 4、卸载指定包名的应用 5、从设备中复制文件到本地 6、将本地文件复制到设备 7、查看设备日志信息 8、重启设备 9、截取设备屏幕截图 10、屏幕分辨率 11、屏幕密度 12、显示设备的…

Linux 压缩与解压缩

参考资料 linux 压缩和解压缩命令gz、tar、zip、bz2tar命令 – 压缩和解压缩文件 目录 一. gzip命令1.1 压缩1.1.1 -k 压缩后保留源文件1.1.2 -l 查看压缩文件中的文件信息1.1.3 -r 递归压缩文件夹中的所有文件 1.2 解压缩 二. zip命令2.1 zip 压缩2.1.1 -r 压缩文件夹2.1.2 压…

Android中的anr定位指导与建议

1.背景 8月份安卓出现了一次直播间卡死(ANR)问题,且由于排查难度较大,持续了较长时间。本文针对如何快速定位安卓端出现ANR问题进行总结和探讨. 这里大致补充一下当时的情况,当时看到情景的是从某一个特定的场景下进入直播间后整个直播间界面立刻就卡住…

css3 2D与3D转换

css3 2D与3D转换 前言2D变形旋转变形 rotate()transform-origin属性 缩放变形 scale()斜切变形 skew()位移变形 translate() 3D变形3D旋转 rotateX() | rotateY()perspective属性 空间移动 制作一个正方体结语 前言 网页设计不再局限于平面,而是充满了立体感和动态…

【ESP32接入语言大模型之智谱清言】

1. 智谱清言 讲解视频: 随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。智谱清言作为千亿参数对话模型 基于ChatGLM2模型开发,支持多轮对话,具备内容创作、信息归纳总结等能力。可以快速注册体验中国版…

Linux系统使用超详细(十)~vi/vim命令①

vi/vim命令有很多,其实只有少数的用法对于我们日常工作中起到了很大帮助,但是既然我选择梳理Linux的学习笔记,那么一定全力把自己的理解和学习笔记的内容认真整理汇总,内容或许有错误,还请发现的C友们发现了及时指出。…

小程序基础学习(发送请求)

原理 通过js发起wx.request的方法发送请求并接受相应数据 实例(一) 参数: url:请求网址地址, success:请求成功执行的函数, fail:请求失败执行的函数 请求返回的数据 实例(二) 参数&#xff1…