网上看到过一些有关TCP三次握手四次挥手的过程,觉得有必要总结一下了,对于了解TCP的过程还是有帮助的

1.变量含义

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。

2.三次握手

第一次握手:主机A发送位码为syn=1,随机产生seq=x的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送(确认号)ack number=x+1,syn=1,ack=1,随机产生seq=y的包;确认号表示希望下次收到的包的序号;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=y+1,ACK=1,SYN=0,seq=x+1,主机B收到后确认seq值与ack=1则连接建立成功。

3.四次挥手

【注意】中断连接端可以是Client端,也可以是Server端。

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

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

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

【问题3】为什么需要三次握手,两次握手可以吗?

以上是知乎上的一个小例子,双方都需要确认自己的收信和发信功能正常才行,而收信功能需要通过接受对方信息得到确认,发信功能需要自己发出信息并且对方回复信息得到确认

  三次握手是为了防止已失效的连接请求再次传送到服务器端。二次握手不可行,因为:(如果采用两次握手,主要的不同在于服务器在发出确认信息的时候就要建立连接了,而如果采用三次握手,服务器在收到客户端的确认信息后才开始建立连接的)

  1如果由于网络不稳定,虽然客户端以前发送的连接请求以到达服务方,但服务方的同意连接的应答未能到达客户端。则客户方要重新发送连接请求,若采用二次握手,服务方收到重传的请求连接后,会以为是新的请求,就会发送同意连接报文,并新开进程提供服务,这样会造成服务方资源的无谓浪费,如果这样的连接过多会造成服务器的崩溃。

  或者下面的解释(两个说的是同一回事,不过出现故障的地方不一样)

  2.client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

 

转载于:https://www.cnblogs.com/Hwan/p/5957054.html

TCP三次握手四次挥手过程及其中的状态量相关推荐

  1. go tcp客户端自动重连_阿里面试: HTTP、HTTPS、TCP/IP、三次握手四次挥手过程?(附全网最具深度讲解)

    前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在阿里面试的时候确实被问到了这个问题,HTTP.HTTPS.TC ...

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

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

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

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

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

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

  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. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手

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

  9. 深入浅出TCP三次握手四次挥手

    每每想起TCP三次握手这个问题,就会陷入如下的困惑: var forget = ? while(forget) {百度/Google } 而重点在于forget永远等于true,无情的消耗着我这颗只有 ...

最新文章

  1. 跟小博老师一起学习数据库 ——SELECT
  2. RTT大牛告诉你,混合微内核是什么?
  3. 【kafka】消费组 死掉 kafka Marking the coordinator dead for group
  4. 随想录(简单的windows驱动代码)
  5. 小白python自学—报错问题汇总(持续更新)
  6. JAVAWeb项目 微型商城项目-------(四)用户注册
  7. wince植入胎压监测_wince设备通过USB连接线上网指南(原创)(测试成功)
  8. java读取dbf数据类型,读取foxpro格式的dbf文件-JSP教程,Java技巧及代码
  9. HDU 5519(Kykneion asma-NNT+CRT)
  10. 多媒体视频技术:视频基础、视频格式、视频应用
  11. 新版个人所得税计算python_用 Python 写个2019年专项扣除新个人所得税计算器
  12. 英语阅读——The confusing pursuit of beauty
  13. 微软晓晓朗读录音工具windows-文字转语音
  14. 216:vue+openlayers 加载GPX数据,导出geojson文件
  15. 01背包问题 动态规划求解方法 动态方程的详细解释 能理解的解释(附python代码)
  16. 哪种一致性哈希算法才是解决分布式缓存问题的王者?
  17. REINFORCE和A2C的异同
  18. 教育教学论坛杂志教育教学论坛杂志社教育教学论坛编辑部2022年第39期目录
  19. F2FS源码分析-5.2 [数据恢复流程] 后滚恢复和Checkpoint的作用与实现
  20. Python 爬虫分析豆瓣 TOP250 之 信息字典 和 马斯洛的锥子

热门文章

  1. win2003 iis上运行asp.net配置
  2. 2.react的diff算法(2020.12.07)
  3. onload、DOMContentLoaded、$(document).ready(fn)、$(document).load(fn)
  4. springMVC异常拦截
  5. 【操作系统】—进程同步和进程互斥
  6. Express简单路由使用
  7. 借给朋友两万块钱,已经两年,每次要钱都各种借口,我该怎么办?
  8. 目前8岁女儿上的课程
  9. 山东省德州市有哪些明星?
  10. 判断力有时候有多么重要?懂得选择多么重要?