TCP/IP协议三次握手和四次挥手大白话解说

TCP/IP协议三次握手和四次挥手大白话解说

前言

昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧。

TCP(Transmission Control Protocol)网络传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,数据传输前建立连接的工作要经过三次握手,数据传输后断开连接的工作要经过四次挥手。

工作过程

TCP标志位:

TCP共有6个标志位,分别是:

  • SYN(synchronous),建立联机。
  • ACK(acknowledgement),确认。
  • PSH(push),传输。
  • FIN(finish),结束。
  • RST(reset),重置。
  • URG(urgent),紧急。

图解三次握手和四次挥手的过程:

三次握手建立连接阐述:

第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。

第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。

第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。

到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。

四次挥手断开连接阐述:

第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。

第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。

第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。

第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因),默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。

到此为止双方整个通信过程就此终结。这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。

问题:

1.为什么断开链接的时候客户端设置的定时器时间等待要2MSL(两个通信报文的最大时间)? 
这个问题也很好理解,当客户端最终告诉服务器端断开确认的时候,他不知道自己的发出的指令是否能准确的一次性被服务器接收。假如服务器没有接收到(这已经耗费了一个报文的最大通信时间了),服务器端将会重新发起一个结束通话的指令(FIN)到客户端,客户端又接收到了服务器发来的结束通信指令将继续给服务器进行一个确认,有人会说那要是客户端发出的确认信息服务端没收到,而服务端重发的断开指令客户端也没收到怎么办,说实话我也无奈,遇到这种情况咱们干脆认为网确实不行了。

2.为什么建立连接要三次握手而断开连接要四次挥手? 
说起这个,打一个比喻,目前祖国正在高速发展高铁,建立连接的过程正如上海到北京打通一条高铁线,TCP通信过程是一个全双工模式,即在这条高铁线上要有两个轨道,即能从上海发车到北京又能从北京发车到上海,甚至两边可以同时发车。所以断开连接前提就是要保证两条轨道都没有车,然后双方才能各自发起断开动作。

双方各自工作流程图:

客户端工作流程: 
 
注意:在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

服务器端工作流程: 

附加

SYN网络攻击:

原理: 
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。

检测: 
SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了。windows下打开cmd,输入命令:”netstat -n -p TCP“,查看是否有大量的”SYN_RECEIVED“状态。

以下图片是表明正常的。 

参考:TCP/IP协议三次握手和四次挥手大白话解说

原文地址:https://www.cnblogs.com/aspirant/p/8884765.html

时间: 2025-01-01 09:02:56

TCP/IP协议三次握手和四次挥手大白话解说的相关文章

TCP/IP协议 三次握手与四次挥手

一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下:        (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.        (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.        (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含

TCP/IP协议三次握手与四次挥手

一.标志位和序号 seq序号 :发送方随机生成的 ack确认序号:ack=seq+1 标志位ACK=1时确认序号有效 SYN标志位:发起一个新连接 ACK标志位:确认序号有效 FIN标志位:断开连接 二.三次握手 三次握手是客户端与服务端建立一个TCP连接时,需要客户端和服务端发送三个包建立连接的过程 (1)第一次握手 客户端将SYN置为1,随机产生一个seq序号=J,将该数据包发送给服务端,客户端此时状态为SYN_SEND (2)第二次握手 服务端收到客户端发送的数据包由SYN=1知道客户端要

TCP/IP协议三次握手与四次握手流程解析

原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图 上图中有几个字段需要重点介绍下:   (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.   (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.   (3)标志位:共6个,即URG.ACK.PSH.RST

TCP/IP协议三次握手与四次握手流程解析(转)

一.TCP报文格式 下面是TCP报文格式图: 上图中有几个字段需要重点介绍下:  (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.  (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.  (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含义如下:  (A)URG:紧急指针(urgent pointer)有效.  (B)ACK:确认序号有效.  (C)PSH:

转 TCP/IP的三次握手与四次挥手详解

TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通知对方要释放此连接(四次挥手). 认识TCP标志位 tcp标志位有6种标示: SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) 图解TCP与UDP的三次握

关于TCP/IP的三次握手和四次挥手解释

TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge nu

TCP/IP协议之三次握手与四次挥手

大纲 一.IP Header 二.TCP Header 三.三次握手过程 四.四次挥手过程 五.TCP Finite State Machine 一.IP Header 二.TCP Header 三.三次握手过程 三次握手过程详解: ①第一次握手:客户端向服务器端发送连接请求包,标志位SYN(同步序号)置为1,产生序列号为X=0 ②第二次握手:服务器端收到客户端发过来报文,由SYN=1知道客户端要求建立联机.于是向客户端发送一个SYN和ACK都置为1的TCP报文,设置自己的初始序列号Y=0,将确

TCP/IP协议三次握手与四次握手流程

(1)第一次握手:Client将标志位SYN设置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认.(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态.(3)第三次握手:Client收到确认后,检查ack是否为x+1,A

TCP/IP的三次握手和四次挥手

TCP协议的三次握手过程 1.建立连接时,客户端向服务器发送SYN包,并产生一个顺序号码seq number=k,等待服务器确认. 2.服务器受到请求后,确认联机信息后,向客户端发送确认码ack=k+1,SYN包,并产生一个顺序号码seq number=q. 3.客户端受到确认信息后,检查确认码ack是否正确,若正确,向服务器发送确认码ack number=q+1,并产生一个顺序号码seq number =p 服务器收到并确认后,建立连接. TCP协议的四次挥手