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

原创 2016年09月20日 20:20:54

前言

昨天晚上被一位师傅问到了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协议中的三次握手和四次挥手(图解)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的。 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接...
  • whuslei
  • whuslei
  • 2011年08月07日 20:43
  • 623764

通俗理解TCP/IP协议三次握手与四次分手流程

三次握手流程 客户端发个请求“开门呐,我要进来”给服务器服务器发个“进来吧,我去给你开门”给客户端客户端有很客气的发个“谢谢,我要进来了”给服务器 四次挥手流程 客户端发个“时间不早...
  • Special23
  • Special23
  • 2017年01月06日 14:07
  • 1459

TCP/IP三次握手详解

TCP握手协议  在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服...
  • metasearch
  • metasearch
  • 2008年03月04日 18:25
  • 13116

TCP/IP协议、报文格式、三次握手协议

强调内容桥接网络,手动选择桥接到网卡。第一次:客户端-服务器,SYN包, seq = j。 第二次:服务器-客户端,SYN、ACK包,ack = 客户端的seq + 1,seq = k。 ...
  • jjdujiang
  • jjdujiang
  • 2016年03月17日 15:19
  • 238

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

一、TCP报文格式 图1 TCP报文格式上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 ...
  • Jungle_hello
  • Jungle_hello
  • 2016年05月20日 23:10
  • 4888

wifi四次握手协议

首先看一下wifi的工作原理,密钥交换 wpa必须先要获得密钥,然后才能进行基于字典的爆破; 第一次握手AP–>STA,PMK已经预设好了,这个AP时候发送一个随机产生的nOnce1数...
  • qq_33936481
  • qq_33936481
  • 2016年05月01日 10:17
  • 3812

浅析TCP/IP三次握手机制的安全性.pdf

  • 2014年06月24日 20:54
  • 141KB
  • 下载

TCP三次握手详解及释放连接过程

TCP头部: 其中 ACK   SYN  序号  这三个部分在以下会用到,它们的介绍也在下面。 暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立...
  • oney139
  • oney139
  • 2012年10月23日 19:15
  • 92884

TCP/IP 七层网络模型 三次握手

1、概念        Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet...
  • u011936381
  • u011936381
  • 2013年09月04日 12:20
  • 3472

tcp/ip 3次握手与4次分手

建立TCP连接步骤(如上图3次握手): 1.服务器必须准备好接受外来的连接。这是通过调用socket、bind和listen函数来完成,称为被动打开; 2.客户通过调用connect进行主动打开。...
  • tujiaw
  • tujiaw
  • 2012年07月05日 23:41
  • 2100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP/IP协议三次握手和四次挥手大白话解说
举报原因:
原因补充:

(最多只允许输入30个字)