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

TCP/IP三次握手四次挥手

时间:2019-10-26 15:05:44      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:取数据   优先   主机   代表性   状态   校验   选项   第一个   打开   

TCP/IP协议是一个超级复杂而又庞大是东西,以后更需要深入学习,这个文主要记录下三次握手和四次挥手的抓包和简介。

1.TCP/IP

  TCP/IP 是不同的通信协议的大集合。

  是指能够在多个不同网络间实现信息传输的协议族。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议族, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

  TCP/IP协议参考ISO,OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了应用层,传输层,Internet层,网络访问层,四个层次。

2.TCP报头结构,

1.源端口,目标端口,各占16位,可表示2^16个端口

2.序号 报文的序号

3.确认号  确认报文,表示N-1之前的报文已经收到,下次发送报文N 

4.数据偏移(4位,表示首部的长度,所以首部最大长度是60字节),保留字段(6位),URG,ACK,PSH,RST,SYN,FIN(6个标记位),窗口

5.校验,紧急指针。

6,可变选项,填充

TCP报头固定长度占20个字节。

6个标志位

URG: 紧急指针位,当URG=1时,表示紧急指针有效,属于优先级高的数据。快速反应。

ACK: 确认ack,当ACK=1时,确认字段号才有效,建立连接的主机ACK必须为1

PSH: 当PSH=1时,接受端应用程序应该立即读取数据,而不是进入缓冲区。

RST: 当RST=1时,改连接发生严重错误,释放错误,需重新建立连接,RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。

SYN: 建立连接同步,当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在相应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受的报文,只有在前两次握手中SYN才置为1,带SYN标志的TCP报文 段称为同步报文段 。

FIN: 用来结束和释放一个连接,当FIN=1时,通知对面主机表示要结束连接,结束报文段

窗口:用于控流,表示对方发送的数据量,从本报文段 的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继 续传送后面数据,由Window size value * Window size scaling factor (此值在三次握手阶段TCP选项Window scale协商得到)得出此值 。

校验: 检验范围包括首部和数据两部分,提供额外的可靠性。

紧急指针:标记紧急数据在数据字段中的位置 ,指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为零时也可发送紧急数据。

可变选项:最大40个字节,TCP报文首部最大60字节,固定字节20个字节

3.三次握手流程

 

 

 

 技术图片

 

4 三次握手抓包

  软件:Wireshark

  通过本地的虚拟机连接

技术图片

 

 

 三次握手的包,第一个包:

技术图片

 

 

 第二个包

技术图片

 

 

 第三个包

 

 技术图片

 

 

 5. 四次挥手过程

技术图片

四次挥手的三种报文可能
客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时等待接收 服务端的报文,该报文会有三种可能: ? 
只有服务端的ACK ? 只有服务端的FIN ? 基于服务端的ACK,又有FIN ?
 1、只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端 的FIN时,
 回应发送一个ACK,会进入到TIME_WAIT状态, 这个状态会持续 2MSL(TCP报文段在网络中的最大生存时间, RFC 1122标准的建议值是2min). 
 客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务 端在等待超时后会再发送一个FIN给客户端,而客户端知道ACK已丢失 
 2、只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接 收到服务端的ACK时,进入TIME_WAIT状态 ?
 3、同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态 

6. 四次挥手抓包

技术图片

 

 如上,当客户端发送FIN时接收到了服务端的FIN ,ACK ,客户端发送一个ACK,直接进入time_wait状态,等待2msl,关闭连接

 

 

 三次握手四次挥手有限状态机

有限状态机FSM:Finite State Machine 
 ?CLOSED 没有任何连接状态 ?
  LISTEN 侦听状态,等待来自远方TCP端口的连接请求 
  SYN-SENT 在发送连接请求后,等待对方确认 
  SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认 
  ESTABLISHED 代表传输连接建立,双方进入数据传送状态 
  FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认 
  FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭 传输连接请求 
  TIME-WAIT 完成双向传输连接关闭,等待所有分组消失 
  CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认 
  LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失 
  CLOSING 双方同时尝试关闭传输连接,等待对方确。

TCP/IP三次握手四次挥手

标签:取数据   优先   主机   代表性   状态   校验   选项   第一个   打开   

原文地址:https://www.cnblogs.com/dreamfreedom/p/11743143.html

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