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

news/2024/5/17 19:25:10 标签: 网络, tcp, TCP三次握手四次挥手

一、传输层知识回顾

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.niftyadmin.cn/n/5325251.html

相关文章

编曲混音FL Studio21.2对电脑有什么配置要求

FL Studio 21是一款非常流行的音乐制作软件,它可以帮助音乐人和制作人创作出高质量的音乐作品。然而,为了保证软件的稳定性和流畅性,用户需要知道FL Studio 21对电脑的配置要求。本文将介绍FL Studio 21的配置要求,以帮助用户选择…

Java 8 中的 Stream 轻松遍历树形结构

直接上代码 测试实体类 /*** Menu** author lcry*/ Data Builder public class Menu {/*** id*/public Integer id;/*** 名称*/public String name;/*** 父id &#xff0c;根节点为0*/public Integer parentId;/*** 子节点信息*/public List<Menu> childList;public Me…

kafka为什么快

消息发送 1、批量发送: Kafka 通过将多个消息打包成一个批次&#xff0c;减少了网络传输和磁盘写入的次数&#xff0c;从而提高了消息的吞吐量和传输效率。 2、异步发送: 生产者可以异步发送消息&#xff0c;不必等待每个消息的确认&#xff0c;这大大提高了消息发送的效2.率 …

OpenGauss源码分析-SQL引擎

所讨论文件大多位于src\common\backend\parser文件夹下 总流程 start_xact_command()&#xff1a;开始一个事务。pg_parse_query()&#xff1a;对查询语句进行词法和语法分析&#xff0c;生成一个或者多个初始的语法分析树。进入foreach (parsetree_item, parsetree_list)循环…

计算机网络的常用的网络通信命令(Windows)

ping&#xff1a;它是用来检查网络是否通畅或者网络连接速度的命令。ping命令利用的原理是&#xff1a;网络上的机器都有唯一确定的IP地址&#xff0c;我们给目标IP地址发送一个数据包&#xff0c;对方就要返回一个同样大小的数据包&#xff0c;根据返回的数据包我们可以确定目…

【网络工程师】NAT与动态路由

一、NAT网络地址转换 1、NAT&#xff1a;Network Address Translations 网络地址转换 2、ip地址问题&#xff1a;ipv4地址严重不够用了&#xff08;A、B、C类可以使用 D组播 E科研&#xff09; 3、解决&#xff1a;把IP地址分为了公网IP和私网IP 公网IP只能在公网上使用 私网…

详解Spring事件监听

第1章&#xff1a;引言 大家好&#xff0c;我是小黑。今天咱们来聊下Spring框架中的事件监听。在Java里&#xff0c;事件监听听起来好像很高大上&#xff0c;但其实它就像是我们日常生活中的快递通知&#xff1a;当有快递到了&#xff0c;你会收到一个通知。同样&#xff0c;在…

外汇天眼:澳大利亚金融投诉管理局在2023年收到了102,790宗投诉

在2023年&#xff0c;澳大利亚金融投诉管理局收到了来自消费者和无法与其金融公司直接解决争端的小企业的102,790宗投诉。 根据初步的数据快照&#xff0c;这相比于2022年增加了23%。 澳大利亚的金融纠纷解决方案首次在一个日历年内录得了100,000宗投诉。 “投诉升级到AFCA的…