目前最详细的tcp三次握手跟四次挥手详解

  闲来无事,整理下以前的笔记,发现当初学习时做的关于tcp三次握手跟四次挥手的笔记挺详细的。开博三年以来,都是向广大博友源源汲取,而未曾奉献一字一语,实感惭愧,博主始终坚信,应该怀有感恩之心,当自己弱小时,你从他人以及这个社会学得知识,待自己有能力时,应该去反哺这个社会,受人于好反之以更多人好,应该有达则兼济天下这个觉悟,这样世界才会变成美好的人间嘛。说了这么多,让我们言归正传,开始这次的主题。

  以下涉及的有关部分内容或者图片有的来自网络,如有侵权还请联系博主。

  关于tcp三次握手跟四次挥手,很多学网络和计算机的人应该都熟悉,但是有的只是一知半解,当然这里说的一知半解只是相对于初学者以及像博主这种菜鸟,大神就另当别论了,要想彻底搞清楚tcp三次握手跟四次挥手,首先要弄清楚的是网络体系结构,这对于我们更好的理解tcp三次握手跟四次挥手有重大意义,下面就让我们一一道来。

.OSI与TCP/IP体系结构模型:

     

  功能:采用分层的思想,每一层向上层提供服务,同时使用下层提供的服务

  1.物理层:为数据端设备提供原始比特流的传输的通路

       例如:网络通信的数据传输介质,由电缆与设备共同构成

       常见:主要设备有中继器,集线器,网线,HUB等

 

  2.数据链路层:在通信的实体间建立数据链路链接

    例如:将数据分帧,并处理流控制,物理地址寻址,重发等

    常见:网卡,网桥,二层交换机(协议解析只会解析到数据链路层)

 

  3.网络层:实现点到点的传输,为数据在结点之间传输创建逻辑链路,并分组转发数据

        例如:对子网间的数据包进行路由选择

        常见:路由器(只能解析网络层),多层交换机,防火墙

 

  4.传输层:提供应用进程之间的逻辑通信,实现端到端的传输,最重要的是端口port,port决定将数据交给那一个进程

    例如:建立连接,处理数据包错误,数据包次序

    常见:TCP, UDP, 进程,端口(socket)

 

  5.会话层:建立端连接并提供访问验证和会话管理(SESSION)

    例如:使用校验点可以使会话在通信失效时从校验点恢复通信

    常见:服务器验证用户登录,断点续传

 

  6.表示层:提供数据格式转换服务

    例如:解密与加密,图片解码和编码,数据的压缩和解压缩

    常见:URL加密,口令加密,图片编解码

 

  7.应用层:访问网络服务的接口

    例如:为操作系统或网络应用程序提供访问网络服务的接口

    常见:Telnet, FTP, HTTP, SNMP, DNS等。 

.Wireshark抓包图解 (TCP三次握手四次挥手详解): 

 (一)前导

    wireshark抓到的包与对应的协议层如下图所示:

            

    1. Frame:物理层的数据帧概况

    2. Ethernet II:数据链路层以太网帧头部信息

    3. Internet Protocol Version 4:互联网层IP包头部信息

    4. Transmission Control Protocol:传输层的数据段头部信息,此处是TCP

    5. Hypertext Transfer Protocol:应用层的信息,此处是HTTP协议

 (二)TCP协议

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

    TCP的特点有:

   1. TCP是面向连接的运输层协议

   2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的

   3. TCP提供可靠交付的服务

   4. TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。

   5. 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅是一连串的         无结构的字节流

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

  

   1. 源端口号:数据发起者的端口号,16bit

   2. 目的端口号:数据接收者的端口号,16bit

   3. 序号:32bit的序列号,由发送方使用

   4. 确认序号:32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认序号应当是上次已成功收到数据         字节序号加1。

   5. 首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。一般首部长度为20字节。

   6. 保留:6bit, 均为0

   7. 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。

   8. 确认比特ACK:ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。

   9. 推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。

   10. 复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。

   11. 同步比特SYN:在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连         接。

   12. 终止比特FIN:FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。

   13. 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。

   14. 检验和:该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证。

   15. 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。

   16. 选项:长度可变,最长可达40字节

  wireshark捕获到的TCP包中的每个字段如下图所示:

   

 (三)TCP三次握手

   下图是tcp三次握手的基本示意图:

   

   三次握手包:

    

   第一次握手:

         客户端向服务器发送链接请求包,发送SYN报文并置发送初始序号为0(seq=0) 

   

   第二次握手:

         服务器收到客户端发过来报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设           置初始序号 Y=0,即Seq=0,将确认序号设置为客户的序列号加1,即X+1 = 0+1=1, 也就是Ack=1如下图:

   

   第三次握手:

         客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=               1)。以及标志位ACK是否为1。若正确,客户端再次发送确认包,ACK标志位为1,SYN标 志位为0。确认序号(Acknowledgeme         nt Number)=Y+1=0+1=1,发送序号为X+1=1。服务器收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。

   

 (四)tcp四次挥手

   

   第一次挥手:

         客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为X=393,确认序号为          Z=355。

   

   第二次挥手:

         服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即X=X+1=394。序号为收到的确认序号=           Z=355。

    

   第三次挥手:

         服务器关闭与客户端的连接,发送一个FIN和ACK。标志位FIN和ACK置为1,序号为Y=355,确认序号为X=394。

   

   第四次挥手:

         客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=356。序号为收到的          确认序号X=394。

   

   希望对刚接触的学习者有所帮助,如有问题欢迎大家指出,共同交流学习,创作不易,转载还请注明出处!

posted @ 2019-07-30 11:33  拂袖红尘梦  阅读(442)  评论(0编辑  收藏  举报