TCP是什么
     TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。
      TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) 
 
TCP的三次握手
      第一次握手:客户端向服务器发送请求报文,这时报文首部中的同部位SYN=1,并生成一个随机序列值seq=n。客户端进入syn-sent(同步已发送)状态,等待服务器确认
      第二次握手:TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号ACK=n+1,同时自己也随机生成一个seq=m,此时服务器进入SYN-RCVD(同步收到)状态。
      第三次握手:TCP客户端进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=m+1,
 
 
TCP的三次握手抓包
      使用nc -l localhost 8088 监听8088端口 
      客户端使用nc -v localhost 8088 连接8088端口
      再开个终端使用 tcpdump -i lo -vv -nnn tcp port 8088 抓包8088 端口tcp连接 
 
      抓包数据
为什么需要三次握手
        端口 client发送了一个请求连接的报文,但是网络不好,这个请求没有立即达到服务端,客户端没有收到服务器的确认消息后,任务该请求报文已失效了,但是过了一会之后server收到报文,还是会像client发送确认的报文,表示同意连接。如果这里不用三次握手,那么只要server发出确认报文,新的连接就
建立了,但其实这个请求client已经任务失效了,不会理睬server的确认信息,也不会像服务器发出确认的请求,但是server的请求已经建立了,并一直等待client的数据,这样会浪费server的资源,采用三次握手就是为了防止这种情况的发生,server会因为收不到确认的报文,而不会建立连接。
        举个列子:就好比找工作的时候,你通过手机问面试官,我能去面试吗,面试官说可以,你收到面试官的确认,然后你在确认面试时间,那就可以愉快的去面试了。
 
四次挥手
        第一次挥手:TCP client发送一个FIN ,用来关闭到服务端的连接,client进入FIN_WAIT_1状态
            client进程发出连接释放报文,并且停止发送数据。释放报文首部,FIN=1,其序列号为seq=x
        第二次挥手:TCP server 收到FIN 后,发送一个ACK 确认,server进入CLOSE_WAIT状态,客户端收到ACK后会进入FIN_WAIT_2状态
            这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受
        第三次挥手:TCP server 发送一个FIN,用来关闭server到client的连接,server进入LAST_ACK状态。
             服务器将最后的数据发送完毕
        第四次挥手:TCP client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,server进入CLOSED状态    
             TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态
 
四次挥手抓包
        开个终端使用 tcpdump   -vv -nnn tcp port 80 端口tcp连接
        再另一个终端里面使用curl www.baidu.com 
        抓包数据 
 
 
为什么需要四次挥手
       终端为了确保数据能够完全输出,关闭连接时,当收到主动方的FIN报文通知时,它仅仅表示主动方是没有数据需要发送了,但是被动方可能还需要发送数据,所以不会马上关闭SOCKET。于是被动方只发送ACK确认报文,继续发送一些数据给主动方,然后再发送FIN报文,此时就可以关闭连接了
 
一次网页访问的抓包

TCP 三次握手与四次挥手的更多相关文章

  1. TCP三次握手及四次挥手详细图解

    TCP三次握手及四次挥手详细图解 Andrew Huangbluedrum@163.com    相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不 ...

  2. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

  3. 应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题

    重要性:必考 一.TCP与UDP的优缺点 ①TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供 ...

  4. 【HTTP协议】---TCP三次握手和四次挥手

    TCP三次握手和四次挥手 首先我们知道HTTP协议通常承载于TCP协议之上,HTTPS承载于TLS或SSL协议层之上 通过上面这张图我们能够知道.     在Http工作之前,Web浏览器通过网络和W ...

  5. 网络通信 --> TCP三次握手和四次挥手

    TCP三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 一.TCP报文格式 如下图: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发 ...

  6. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

  7. TCP‘三次握手’和‘四次挥手’(通俗易懂)

      概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通 ...

  8. 【转】TCP三次握手和四次挥手全过程及为什么要三次握手解答

    TCP三次握手和四次挥手的全过程   TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种表示: SYN(synchronous建立连接) ...

  9. [ 转载 ] Tcp三次握手和四次挥手详解

    #TCP的报头: 源端口号:表示发送端端口号,字段长为16位.目标端口号:表示接收端口号,字段长为16位.序列号:表示发送数据的位置,字段长为32位.每发送一次数据,就累加一次该数据字节数的大小.注意 ...

  10. 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手

    网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...

随机推荐

  1. 大数据之Linux服务器集群搭建

    之前写过一篇关于Linux服务器系统的安装与网关的配置,那么现在我们要进一步的搭建多台Linux服务器集群. 关于单台服务器的系统搭建配置就不在赘述了,详情见https://www.cnblogs.c ...

  2. 原生js 复制内容到剪切板

    代码: function copyHandle(content){ let copy = (e)=>{ e.preventDefault() e.clipboardData.setData('t ...

  3. Hadoop HDFS 源码解析记录

    版权说明: 本文章版权归本人及博客园共同所有,转载请标明原文出处( https://www.cnblogs.com/mikevictor07/p/12047502.html ),以下内容为个人理解,仅 ...

  4. 大数据学习笔记——Linux基本知识及指令(理论部分)

    Linux学习笔记整理 上一篇博客中,我们详细地整理了如何从0部署一套Linux操作系统,那么这一篇就承接上篇文章,我们仔细地把Linux的一些基础知识以及常用指令(包括一小部分高级命令)做一个梳理, ...

  5. 开启html元素的编辑模式contenteditable="true"

    开启html元素的编辑模式contenteditable="true"

  6. 基于WCF 的远程数据库服务访问技术

    原文出处:http://www.lw80.cn/shuji/jsjlw/13588Htm.Htm摘要:本文介绍了使用WCF 建立和运行面向服务(SOA)的数据库服务的系统结构和技术要素,分析了WCF ...

  7. 《Java Spring框架》Spring切面(AOP)配置详解

    1.  Spring 基本概念 AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2 ...

  8. 原创 Hive left join 技巧总结

    根据工作中经验总结出来   left  join  常用的  使用注意点:    A     Left    join   B    on   A.id =  B.id 第一种情况: 如果 A 表  ...

  9. .Net Core控制台&EFCore连接Mysql

    在用惯了Asp.Net Core提供的基架后,反过来想一想,貌似忘记了控制台如何去连接数据库了,因此,写一篇文章来借此巩固下并以后再来回顾时,加快步骤. 1.新建一个.Net Core控制台,然后安装 ...

  10. Sql: Oracle paging

    --书分类目录kind --涂聚文 Geovin Du create table geovindu.BookKindList ( BookKindID INT PRIMARY KEY, BookKin ...