Wireshark Tcp三次握手

 
TCP三次握手Three-way Handshake 
 
一个虚拟链接的创建是经过三次握手来实现的 
1. (B) --> [SYN] --> (A) 
 
假如服务器A和客户机B通信. 当A要和B通讯时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求创建链接. 
 
注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当A受到B发来的SYN包,才可创建链接,除此以外别无他法。所以,若是你的防火墙丢弃全部的发往外网接口的SYN包,那么你将不 能让外部任何主机主动创建链接。
在wireshark抓包分析中,Seq表示数据段的序号,一个Seq号的大小是根据上一个数据段的Seq号和长度len相加而来的。根据Seq序号和len,能够判断哪些包丢失。

 

2. (B) <-- [SYN/ACK] <--(A) 
 
接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操做. 
 
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包. 

3. (B) --> [ACK] --> (A) 
 
B收到SYN/ACK 包,B发一个确认包(ACK),通知A链接已创建。至此,三次握手完成,一个TCP链接完成 
 
Note: ACK包就是仅ACK 标记设为1的TCP包. 须要注意的是当三此握手完成、链接创建之后,TCP链接的每一个包都会设置ACK位

 

这就是为什么链接跟踪很重要的缘由了. 没有链接跟踪,防火墙将没法判断收到的ACK包是否属于一个已经创建的链接.通常的包过滤(Ipchains)收到ACK包时,会让它经过(这绝对不是个 好主意). 而当状态型防火墙收到此种包时,它会先在链接表中查找是否属于哪一个已建链接,不然丢弃该包 服务器

 

在TCP层,有个FLAGS字段,这个字段有如下几个标识:SYN, FIN, ACK, PSH, RST, URG.
其中,对于咱们平常的分析有用的就是前面的五个字段。spa

它们的含义是:指针

URG:Urget pointer is valid (紧急指针字段值有效)接口

SYN: 表示创建链接,携带此标志位的包表示正在发起链接请求get

FIN: 表示关闭链接,携带此标志位的包表示正在请求终止链接服务器端

ACK: 表示响应,确认号请求

PSH: 表示有 DATA数据传输防火墙

RST: 表示链接重置,或者拒绝一个无效的请求总结


其中,ACK是可能与SYN,FIN等同时使用的,好比SYN和ACK可能同时为1,它表示的就是创建链接以后的响应,若是只是单个的一个SYN,它表示的只是创建链接。TCP的几回握手就是经过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,由于前者表示的是创建链接,然后者表示的是断开链接。RST通常是在FIN以后才会出现为1的状况,表示的是链接重置。通常地,当出现FIN包或RST包时,咱们便认为客户端与服务器端断开了链接;而当出现SYN和SYN+ACK包时,咱们认为客户端与服务器创建了一个链接。PSH为1的状况,通常只出如今 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。通信

 

三次握手(总结)

    Client --> 置SYN标志 序列号 = J,确认号 = 0 ----> Server

    Client <-- 置SYN标志 置ACK标志 序列号 = K, 确认号 = J + 1 <-- Server

    Clinet --> 置ACK标志 序列号 = J + 1,确认号 = K + 1 --> Server
 
连接创建后,接下来Client端发送的数据包将从J + 1开始,Server端发送的数据包将从K + 1开始,这里要说明的是:创建连接时,Client端宣称本身的初始序列号是J,Server端宣称本身的初始序列号是K,可是创建链接后的数据包却各自中初始序列号+1开始,这是由于SYN请求自己须要占用一个序列号 
 
 
数据传输(总结)

     Client --> 置PSH标志,置ACK标志 序列号 = 55555, 确认号 = 22222,数据包长度 = 11 ---> Server

     Client <-- 置ACK标志,序列号 = 22222, 确认号 = 55566 (=55555 + 11),数据包长度 = 0 <--- Server

     Client <-- 置PSH标志,置ACK标志 序列号 = 22223, 确认号 = 55566,数据包长度 = 22 <--- Server

     Client --> 置ACK标志,序列号 = 55566, 确认号 = 22244(=22222+22),数据包长度 = 0 ---> Server
相关文章
相关标签/搜索