闲来无事,整理下以前的笔记,发现当初学习时做的关于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。
希望对刚接触的学习者有所帮助,如有问题欢迎大家指出,共同交流学习,创作不易,转载还请注明出处!