乐于分享
好东西不私藏

网络抓包神器wireshark软件-TCP三次握手

网络抓包神器wireshark软件-TCP三次握手

TCP是一种面向连接的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,发送后会启动一个定时器,然后另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。

我们耳熟能详的就是建立连接是通过TCP三次握手,释放连接通过TCP四次挥手。

TCP的特点:

  1. TCP是面向连接的运输层协议。
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  3. TCP提供可靠交付的服务。
  4. TCP提供全双工通信。数据在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
  5. 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但应用程序交下来的数据仅仅是一连串的无结构的字节流。

TCP报文首部,如下图所示:

具体详情如下:

  • 源端口号:数据发起者的端口号,16bit
  • 目的端口号:数据接收者的端口号,16bit
  • 序号:32bit的序列号,由发送方使用
  • 确认序号:32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认序号应当是上次已成功收到数据字节序号加1。
  • 首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。一般首部长度为20字节。
  • 保留:6bit, 均为0
  • 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。
  • 确认比特ACK:ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。
  • 推送比特PSH:当发送端PSH=1时,接收端尽快地交付给应用进程。
  • 复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
  • 同步比特SYN:在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
  • 终止比特FIN:FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
  • 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
  • 检验和:该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证。
  • 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
  • 选项:长度可变,最长可达40字节

wireshark捕获到的TCP包中的每个字段如下图所示(图片来自baidu搜索):

TCP三次握手

TCP建立连接时,会有三次握手过程,具体过程如下图所示,wireshark截获到了三次握手的三个数据包,第四个包才是应用的数据包。

三次握手的原理如下所示:

接下来我们通过抓包的方式来进行分析:

第一次握手:客户端向服务器发送连接请求包,标志位SYN(同步序号)置为1,序号为X=0

第二次握手:服务器收到客户端发过来报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Y=0,将确认序号(Acknowledgement Number)设置为客户的序列号加1,如下图:

第三次握手:客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=1)。以及标志位ACK是否为1。若正确,客户端再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号(Acknowledgement Number)=Y+1=0+1=1,发送序号为X+1=1。

服务器收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。

在wireshark中看到的过程为:

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 网络抓包神器wireshark软件-TCP三次握手

猜你喜欢

  • 暂无文章