码迷,mamicode.com
首页 > 其他好文 > 详细

TCP报文

时间:2021-01-08 10:45:54      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:目标地址   就是   标识   max   target   指正   html   tcp三次握手   复用   

一、首部字段总览

技术图片

?

  • TCP首部包括20字节的固定首部部分及长度可变的其他选项,所以TCP首部长度可变。20个字节又分为5部分,每部分4个字节32位,如图中的5行,每行表示32位。

  • 传输层,TCP报文段包括:TCP首部和TCP数据部分;

  • 网络层,TCP报文段成为IP数据部分,加上IP首部组成IP数据报;

  • 数据链路层,还要在IP数据报前面加上数据链路层的首部。

    ?

    ?

二、概述

1、端口

? 源端口和目的端口字段:各占 2 字节(16位)。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。

?

2、序号

? 序号字段:占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

? 比如分组的第一个数据包由文件的14个字节数据组成,那么该数据包所添加的序号就是1,同理第二个数据包由文件的59个字节数据组成,那么该数据包所添加的序号就是5;

?

3、确认号

? 确认号字段:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

? 比如接收端收到由文件14个字节数据+TCP首部组成的数据包后,删除首部提取14个字节数据,返回的确认号为5,即告诉发送端下一次应该发送文件的第5个字节及其之后字节组成的数据包过来。

?

4、数据偏移

? 数据偏移(即首部长度):占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,也就是TCP首部的长度。

? “数据偏移”的单位是 32 位字(以 4 字节为计算单位),最大1111表示15x4=60个字节,即表示TCP首部最大长度为60个字节,因此“选项”部分最多40个字节。(也就可以标识选项的长度)

?

5、保留字段

? 保留字段:占 6 位,保留为今后使用,但目前应置为 0。

?

6、紧急 URG

? 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 即URG=1的数据包不用排队直接优先传输。

技术图片

?

7、同步 SYN

? 同步 SYN = 1 表示这是一个连接请求连接接受报文。即A想与B建立连接,发送过去的第一个数据包(第一次握手)中SYN=1;B返回的数据包(第二次握手)中SYN=1表示同意建立连接。

?

8、确认 ACK

? ACK是对已接受数据的确认。只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。(确认号:表示发送端接下来要发送的序号)

1、A与B请求连接阶段: A向B发送的第一个数据包(第一次握手)中ACK=0,无效,所以数据包中不显示,表示还没从B中接收到数据;

? 序号Seq也为0,表示A还未向B发送数据;

? SYN=1,表示正在建立连接。

2、B向A返回一个数据包(第二次握手): 确认号ACK=1,表示B收到了A序号为0的数据包(期望A发送序号为1的数据);

? 序号Seq=0,也表示B还未向A发送数据;

? SYN=1表示同意建立连接。

3、A向B发送一个数据包(第三次握手) :确认号ACK=1,表示A收到了B发出的数据包;

? 序号Seq=1,表示A已向B发送了1个数据包(即第一次握手);

? SYN=0,表示已建立连接。

?

9、推送 PSH (PuSH)

? 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。

技术图片

?

10、复位 RST (ReSeT)

? 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

?

11、终止 FIN (FINis)

? 用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接

?

12、窗口

? 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。(设置自己的窗口大小)

技术图片

? 抓包后可以看到:

技术图片

?

13、检验和

? 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。

?

14、紧急指针字段

? 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

? 即:数据部分中有多少位是紧急数据

?

15、选项字段

? 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。

? MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”

? 其他选项有:窗口扩大选项、时间戳选项、选择确认选项(SACK)。

?

16、填充字段

? 这是为了使整个首部长度是 4 字节的整数倍。

?

?

三、案例

访问www.91xueit.com ----> 通过wireshark抓包

1、TCP三次握手原理分析

技术图片

35: 本机向网站发起连接请求(第一次握手)。此时SEQ为0,SYN为1,ACK为0

技术图片

36:网站回复本机,确定连接。(二次握手) SYN:1(确认连接), ACK:1(B收到了A的请求)。Seq为0(B还未向A发送数据)

技术图片

37: 本机继续发送数据给网站(三次握手)。 SEQ为1,SYN为0(已经建立连接),ACK为1

技术图片

大致流程如下:

技术图片

第一次握手:建立连接时,客户端发送 syn 包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=x+1),同时自己也发送一个 SYN 包(syn=y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

第三次握手:客户端收到服务器的 SYN + ACK 包,向服务器发送确认包 ACK(ack=y+1),此包发送完毕,客户端和服务器进入 ESTABLISHED(TCP连接成功)状态,完成三次握手。

?

2、SYN攻击

源地址不存在

? 比如地址A的ip地址为102,地址B的ip地址为101,A想和B建立通信时,如果设置数据包的源地址为一个不存在的地址103。那么当B返回确认连接的数据包给103时,是不会得到回复的。如果A一直发送TCP连接的请求,那么就会大大消耗B的系统资源

?

3、Land攻击

源地址和目标地址相同

? 和SYN攻击类似,都是建立大量同步SYN请求。主要的区别是源地址和目标地址相同

4、序列号和确认号 分析

序列号: 我现在要发送哪个字节的了

确认号: 你后面要给我发送什么字节的

技术图片

技术图片

?

?

参考链接:

https://www.cnblogs.com/AhuntSun-blog/p/12332156.html

?


如果本篇博客有任何错误和建议,欢迎大佬们批评指正

我是知逆,我们下期见

Peace

TCP报文

标签:目标地址   就是   标识   max   target   指正   html   tcp三次握手   复用   

原文地址:https://www.cnblogs.com/mercurytan/p/14241092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!