一:三次握手

三次的握手的过程是:

1.由发起方HostA向被叫方HostB发出请求报文段,此时首部中的同步位SYN=1,同时选择一个序列号seq=x。TCP规定,SYN报文(即SYN=1的报文段)不能携带数据,但要消耗一个序列号。这时,TCP客户端进程进入SYN-SENT(同步已发送)状态。

2.HostB收到连接请求报文后,如同意建立连接,则向HostA发送确认。在确认报文段中应把SYN和ACK都置为1,确认号是ack=x+1,同时也为自己选择一个序列号seq=y。请注意这个报文段也不能携带任何数据,但同样要消耗一个序列号。这时TCP服务器进程进入SYN-REVD(同步收到)状态。

3.TCP客户端收到HostB的确认后,还要向HostB给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。

此时SYN的值为0(待会从抓的报文中也可以看出)。TCP规定ACK的报文段可以携带数据。但如果不携带数据则不消耗序列号,在这种情况下,下一个数据报文段的序号仍是seq=x+1。整个过程如图所示。

三次握手第一步:

三次握手第二步:

三次握手第三步:

二:为什么要三次握手

书上、播客中找了好多三次握手的理由,但是解释都不是特别的清楚明白,问了身边搞网络工程师的同学,推荐了一本

《路由交换术》,这是同学参加华三公司考试时用的教科书,里面对三次握手的解释比较清楚。

三:四次分手

四次分手的过程是:

1.A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接A把连接释放报文段首部的FIN置1, 其序号seq = u , 它等于前面己传送过的数据的最后一个字节的序号加1,这时A进入FIN-WAIT- 1 (终止等待 1)状态 , 等待B的确认请注意 , TCP规定 , FIN报文段即使不携带数据 ,它也消耗掉一个序号

2.B收到连接释放报文段后即发出确认,确认号是ack=u + 1,而这个报文段自己的序号 是v, 等于B前面己传送过的数据的最后一个字节的序号加1然后B就进入CLOSE-WAIT( 关闭等待 )状态 。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭 ( half-close )状态 ,即A己经没有数据要发送了,但B若发送数据 , A仍要接收 。也就是说 ,从B到A这个方向的连接并未关闭。这个状态可能会持续一些时间。A收到来自B的确认后 ,就进入FIN-WAIT-2(终止等待2)状态, 等待B发出的连接释放报文段 。

3.若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN = 1, 现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次己发送过的确认号 ack= u+1,这时B就进入LAST-ACK(最后确认)状态,等待A的确认。

4.A在收到B的连接释放报文段后,必须对此发出确认。在确认报文段中把ACK置1, 确认号ack = w + 1, 而自己的序号是seq = u + 1(根据TCP标准,前面发送过的FIN报文段要消耗一个序号 )。然后进入到TIME-WAIT( 时间等待)状态。请注意,现在TCP连接 还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer) 设置的时间2MSL后,A才进入到CLOSED状态。时间MSL叫做最长报文段寿命(Maxium Segment Lifetime)RFC793 建议设为2分钟。但这完全是从工程上来考虑,对于现在的网络 ,MSL = 2分钟可能太长了 一些。因此TCP允许不同的实现可根据具体情况使用更小的MSL值。因此,从A进入到TIME-WAIT状态后, 要经过4分钟才能进入到CLOSED状态,才能开始建立下一个新的连接。当A撤销相应的传输控制块TCB后, 就结束了这次的TCP连接。 整个过程如图所示。

四次分手第一步:

四次分手第二步:

四次分手第三步:

四次分手第四步:

四:客户端、服务端整个过程

客户端整个过程如图。

服务端整个过程如图。

抓包分析TCP的三次握手和四次分手的更多相关文章

  1. 抓包分析TCP的三次握手和四次握手

    问题描写叙述: 在上一篇<怎样对Android设备进行抓包>中提到了,server的开发者须要我bug重现然后提供抓包给他们分析.所以抓好包自己也试着分析了一下.发现里面全是一些TCP协议 ...

  2. linux下使用tcpdump抓包分析tcp的三次握手

    首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...

  3. 基于wireshark抓包分析TCP的三次握手

    1. TCP的三次握手 在TCP/IP协议通讯过程中,采用三次握手建立连接,从而保证连接的安全可靠. 所有基于TCP的通信都需要以两台主机的握手开始.这个握手过程主要是希望能达到以下不同的目的.[1] ...

  4. 简析TCP的三次握手与四次分手【转】

    转自 简析TCP的三次握手与四次分手 | 果冻想http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文 ...

  5. 007_wireshark分析TCP的三次握手和四次断开

    要想进行抓包分析,必须先了解TCP的原理.这里介绍了TCP的建立连接的三次握手和断开连接的四次握手. 一.前言:介绍三次握手之前,先介绍TCP层的几个FLAGS字段,这个字段有如下的几种标示 SYN表 ...

  6. TCP之二:TCP的三次握手与四次分手

    一.TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础 ...

  7. 简析TCP的三次握手与四次分手

    TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也 ...

  8. 【转载】简析TCP的三次握手与四次分手

    最近在补习HTTP协议相关知识点,看到这篇讲得不错,所以转载收藏一下,同时也分享给大家.原文地址:http://www.jellythink.com/archives/705,版权归原作者所有. TC ...

  9. 大杂烩 -- 简析TCP的三次握手与四次分手

    基础大杂烩 -- 目录 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - ...

随机推荐

  1. 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...

  2. iOS开发——UI_swift篇&UITableView实现索引功能

    UITableView实现索引功能     关于UItableView的索引在平时项目中所见不多,最多的就是跟联系人有关的界面,虽然如此,但是作为一个swift开发的程序必须知道的一个技术点,所以今天 ...

  3. Arrays.sort(new String[]{"aaa"}); 排序方法

    private static void mergeSort(Object[] src, Object[] dest, int low, int high, int off) { int length ...

  4. int a[5]={}, &a+1与(int*)a+1的区别

    #include <iostream> #include <typeinfo> using namespace std; int main() { int b, *pb; ch ...

  5. Javascript-获取URL请求参数

    function getUrlParam(){    var param = [], hash;    var url = window.location.href;//获取网页的url     va ...

  6. Windows Service 之 详解(一)

    一.Windows 服务简介 Windows 服务是可以在系统启动时自动打开的(不需要任何人登录计算机)的程序. 1.适合创建Windows 服务的场景: [1] 在没有用户交互操作的情况下运行程序: ...

  7. 使用NumberPicker定制自己喜欢的Date&TimePicker

    1.NumberPicker简介: NumberPicker是Android3.0之后引入的一个控件,主要功能是用于选择一组预定义好数字的控件. 该控件主要需要指导一个用于监听当前value变化的li ...

  8. python(5)–datetime模块

    1. datatime.date.today()     当前日期 >>> import datetime >>> datetime.date.today() da ...

  9. ie6/7/8中span右浮动折行问题的解决方案

    浮动标准: W3C CSS 2.1 规范文档里对于浮动元素与非浮动行内元素相邻时的情况有如下解释.以下是关键段落: A floated box is shifted to the left or ri ...

  10. hdu 2709 Sumsets

    Sumsets Time Limit: 6000/2000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Total S ...