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

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

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

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

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

     

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

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

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

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

 

  2.数据链路层:在通讯的实体间创建数据链路连接操作系统

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

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

 

  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。

   

   但愿对刚接触的学习者有所帮助,若有问题欢迎你们指出,共同交流学习,创做不易,转载还请注明出处!

相关文章
相关标签/搜索