一、TCP报文格式

在了解三次握手和四次挥手之前,先知道TCP报文内部包含了哪些东西。

1 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,这里连接意思是:双方需要内保存对方信息(例如:IP,Port…)

2 报文主要段的意思

序号:表示发送的数据字节流,确保TCP传输有序,对每个字节编号

确认序号:发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1。只有ACK=1时才有效。

ACK:确认序号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认序号信息

SYN:连接请求序号标志,用于建立连接,SYN=1表示请求连接

FIN:结束标志,用于释放连接,为1表示关闭本方数据流

二、“三次握手”

2.1 三次握手过程

建立TCP连接时,需要客户端和服务器共发送3个包。

• 第一次:客户端发送初始序号x和syn=1请求标志

• 第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1

• 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1

2.2 三次握手过程分析:

• 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x

• 第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y

• 第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1

上面分析过程可以看出,握手两次达不到让双方都得出自己、对方的接收、发送能力都正常的结论的。

三、 “四次挥手”

3.1 四次挥手过程

• 第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态

• 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态

• 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)

• 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。

3.2四次挥手过程分析

• 第一次:客户端请求断开FIN,seq=u

• 第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v

• 第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1

• 第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1

四、其他问题

4.1为什么三次握手和四次挥手?

• 三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里

• 四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送。

4.2为什么客户端最后还要等待2MSL?

• 客户端需要保证最后一次发送的ACK报文到服务器,如果服务器未收到,可以请求客户端重发,这样客户端还有时间再发,重启2MSL计时。

TCP 三次握手四次挥手相关推荐

  1. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手

    感谢牛客网网友提供的面试经验! 1. 解释一下TCP三次握手四次挥手 图片来源于微信公众号:码农求职小助手 答: 嗯(稍作思考)- 三次握手简单来说,在数据传输开始前: 第一次握手:客户端向服务端发送 ...

  2. [计算机网络][总结][常见问题][TCP][三次握手][四次挥手]

    TCP三次握手 四次挥手 三次握手 目的:保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误.主要防止资源的浪费. 具体过程:当客户端发出第一个连接请求报文段时并没有丢 ...

  3. TCP三次握手四次挥手(图解)

    <TCP-IP协议栈概略图与TCP三次握手四次挥手> 目录 1 TCP过程详解 1.1 三次握手 1.2 四次挥手 2 使用tcpdump分析三次握手的过程 2.1 tcpdump抓包和t ...

  4. TCP三次握手四次挥手过程及其中的状态量

    网上看到过一些有关TCP三次握手四次挥手的过程,觉得有必要总结一下了,对于了解TCP的过程还是有帮助的 1.变量含义 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DAT ...

  5. java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)

    文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...

  6. TCP三次握手四次挥手简介

    TCP三次握手四次挥手简介 图解三次握手.四次挥手 建立连接:三次握手 关闭连接:四次挥手 上图传递过程中出现的几个字符(SYN,ACK,FIN,seq,ack)各代表什么意思 SYN,ACK,FIN ...

  7. TCP三次握手四次挥手详解

    TCP三次握手四次挥手 1. TCP报文格式 2. TCP连接需要解决的问题 3. 三次握手 4. 四次挥手 5. 一些补充问题 1. TCP报文格式 在了解三次握手和四次挥手之前,先知道TCP报文内 ...

  8. TCP三次握手四次挥手 TCP/UDP区别

    三次握手 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:  SYN:同步序列编号(Synchronize Sequence Numbe ...

  9. Wireshark验证TCP三次握手四次挥手

    本文介绍如何通过Wireshark抓包工具验证TCP的三次握手四次挥手过程. 首先本地起了一个tomcat服务器,跑了一个简单的基于SpringMVC的rest服务. 打开Wireshark,捕获指定 ...

  10. TCP三次握手四次挥手(三国版)

    TCP的三次握手四次挥手 TCP的三次握手和四次挥手不管是我们自己使用还是面试都是需要掌握的,本文先将原理,然后以三国为例讲个小栗子帮助理解.先来一张图: 标志位 TCP在其协议头中使用大量的标志位或 ...

最新文章

  1. cocos2dx 场景的切换
  2. Git 提交代码之后的几种后悔药
  3. Node工程-构建优秀的Session机制
  4. hbase 学习(十四)Facebook针对hbase的优化方案分析
  5. 计算机控制系统笔记,笔记型计算机的电源控制系统
  6. java mongodb 返回所有field_Python爬虫框架:scrapy爬取知乎关注用户存入mongodb
  7. SourceTree windows版本免注册免登陆使用方法
  8. 张朝阳:知识直播是长久的事情 商业模式将水到渠成
  9. idft重建图像 matlab_你赞成在医疗图像处理领域使用超分辨率重建技术吗?
  10. PHP学习之函数中的全局参数
  11. myeclipse复制的文件代码乱码
  12. 基于ThinkPhp6+Vue+AntDesign前后端分离极速开发平台
  13. 手机禁止安装app,刷机才能恢复
  14. 冯·诺依曼结构及其主要思想【计算机系统基础01】
  15. uva 12325(宝箱, 枚举问题);
  16. 【知识总结】扩展卢卡斯定理(exLucas)
  17. windows 下命令行查看CPU负载
  18. 计算机组成原理实验二:运算器实验
  19. js返回一年中所有的自然周
  20. 2020usnews计算机排名布朗,2020usnews布朗大学排名怎么样?

热门文章

  1. Eclipse 里找不到 Servers 面板的原因和处理办法
  2. SAP Spartacus module 层级结构设计的一种实践
  3. 如何找到 SAP Spartacus 里某个 Component TypeScript 编译后生成的 JavaScript 位置
  4. SAP CRM Fiori 应用的 offline 离线支持开发笔记
  5. 如何通过离线安装的方式让sublime text具有TypeScript语法高亮的功能
  6. wizard generated application - how is detail page rendered
  7. How is target My note application rendered - renderManager
  8. SAP UI5 XML view lifecycle processing - defineMasterHeaderFooter
  9. Cloud for Customer Silverlight UI部分源代码
  10. Appointment在SPRO里的date profile配置