1.TCP三次握手和四次挥手过程发生在TCP的"连接管理机制"中

2.先介绍一下在三次握手和四次挥手过程中需要用到的三个标志位:

SYN: 请求建立连接; 双方都需要建立连接

ACK: 确认数据是否收到. (收到发送1, 没收到发送0)

FIN: 结束标志位.(携带这个标志位, 置为1表示关闭当前的连接)

一般发送数据的称为客户端, 接收数据的称为服务端, 但是没有绝对的称呼

3.建立连接的请求(3次握手的过程)

当客户端向服务端发送请求数据时, 客户端的数据会携带SYN标志位, 请求与服务端建立连接;  而此时只能表示客户端向服务端发送了建立连接的请求, 但是并不知道服务端是否愿意与客户端建立连接.

此时服务端会向客户端发送一个携带ACK标志位的回复, 表示服务端答应与客户端建立连接. 等于就是给客户端一个回复"我答应你啦"

到这里, 只完成了客户端到服务端所建立的单向连接; 服务端到客户端还没有建立链接呢

因此, 服务端也会发送一个携带SYN标志位的数据给客户端, 请求与客户端建立连接;

这时候有两个标志位(一个是ACK,一个是SYN)都要去客户端那里, 为了提高效率, 于是ACK就可以搭个顺风车跟着SYN一起回客户端那里(这里体现了TCP另一个机制: 捎带应答机制), 表示服务端发送数据时可以将两个标志位合并在一起将数据发送给客户端

当客户端收到了来自服务端的" 带着ACK标志位的回复 "以及" 带着SYN标志位的请求 "时, 对于确认建立连接的回复就收下啦, 不再做处理;  而对于建立连接的请求, 同样的, 则会发送一个携带ACK标志位的进行确认, 表示愿意和服务端建立连接

此时, 已建立连接(三次握手过程结束)

4. 关闭连接的请求(四次挥手过程)

当客户端想要关闭和服务端的连接时, 会发送一个携带FIN关闭连接的请求给服务端, 当服务端接收到这个请求时, 答应关闭连接时, 会发送一个携带ACK标志位的数据给客户端进行确认, 表示收到了客户端想要关闭连接的请求;

但是这个关闭连接的请求仍然是客户端单方面发送给服务端的, 表示客户端到服务端已经关闭, 此时还需要服务端向客户端发送关闭连接的请求, 才能彻底关闭.

因此服务端向客户端发送携带一个FIN标志位关闭连接的请求,  同样客户端收到了这个关闭连接的请求后会向服务端发送携带一个ACK标志位的回复, 表示确认收到了服务端关闭连接的请求, 来进行双方的关闭.

以上, 已关闭连接(四次挥手过程结束)

5. TCP建立连接握手为什么是3次?为什么可以合并, 捎带应答把数据一起发送过去? 而为什么关闭连接挥手的过程是4次?为什么不能合并呢?

对于3次握手建立连接中, ACK和SYN可以合并, 是因为ACK和SYN在建立连接时是同一个数据包发送过去的, 都在一个报文里面, 可以合并, 将两个标志位都置为1即可

对于4次挥手关闭连接中, 是不能将ACK和FIN同时置为1的, 因为一个是操作系统内进行关闭的, 自己程序控制不了. 而另一个是用户进程自己调用close方法自动关闭的.  两个部分不是一个主体完成, 两个部分无法合并

6. 为什么需要四次挥手?

MSL是TCP报文里面最大生存时间, 它是任何报文段被丢弃前在网络内的最长时间

四次挥手, 就是客户端和服务端分别释放连接的过程.

客户端在发送完最后一次确认之后, 还要等待2MSL的时间

主要有两个原因, 一个是为了让服务端能够按照正常步骤进入CLOSED状态, 二是为了防止已经失效的请求连接报文出现在下次连接中.

解释:

(1) 由于客户端最后一个ACK可能会丢失. 这样服务端就无法正常进入CLOSED状态. 于是服务端会重传请求释放的报文, 而此时客户端如果已经关闭了, 那就收不到服务端的重传请求, 就会导致服务端不能正常释放. 而如果客户端还在等待时间内, 就会收到服务端的重传, 然后进行应答, 这样服务端就可以进入CLOSED状态了.

(2) 在这2MSL等待时间里, 本次连接的所有报文都已经从网络中消失, 从而不会出现在下次连接中

网络 -- TCP三次握手和四次挥手相关推荐

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

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

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

    转自即时通讯网:http://www.52im.net/ 1.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道"三次"和&quo ...

  3. 【java网络编程】TCP三次握手、四次挥手,常见Socket通信BIO

    网络编程,网络通信 内容管理 TCP三次握手,四次挥手 TCP 建立连接 --- 三次握手 TCP断开 ---- 四次挥手 java网络IO BIO 同步阻塞 Socket通信模型 BIO网络通信De ...

  4. Node 学习八、通信之 01 网络通信基本原理、网络层次模型、数据封装与解封装、TCP三次握手与四次挥手

    网络通信基本原理 网络通信(或通讯)模型和通讯协议(常见的 HTTP.TCP/IP.FTP等)解决的本质问题就是主机与主机之间的网络通信. 下面以最基本的两台主机之间的通信开始,慢慢认识网络通信模型和 ...

  5. 硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

    来自:小林coding 每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 T ...

  6. 握手失败_拜托了,看完这篇别再问我什么是TCP三次握手和四次挥手

    TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 三次握手如何建立连接? 三次握手建立链接 从图中可以清楚的看到, ...

  7. TCP 三次握手 和 四次挥手

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

  8. TCP三次握手、四次挥手、socket,tcp,http三者之间的区别和原理

    接着上一篇文章叙述: TCP/IP连接(在互联网的通信中,永远是客户端主动连接到服务端): 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协 ...

  9. 计算机网络学习笔记(七)——传输层、TCP三次握手、四次挥手、TCP流量控制、大总结

    文章目录 前言 概念 一.传输层概述 二.传输层问题 三.端到端寻址 四.TCP三次握手和四次挥手 (一)三次握手建立连接 (二)四次挥手拆除连接 五.带拥塞的TCP流量控制 六.传输层实例 计网大总 ...

最新文章

  1. 为什么 Linux 需要虚拟内存
  2. yum 安装redis默认目录_Centos7 安装redis 详细步骤
  3. 关于举办第十五届全国大学生 智能汽车竞赛的通知
  4. ​模型优化漫谈:BERT的初始标准差为什么是0.02?
  5. 命名实体识别 实体抽取_您的公司为什么要关心命名实体的识别
  6. 全球知名大学课件下载地址汇总
  7. Leetcode--174. 地下城游戏
  8. 基于弹性计算的AI推理
  9. java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题
  10. Maven实战从入门到精通(全)
  11. c语言中的三角函数公式,tan三角函数公式有哪些
  12. 广州博森科技有限公司外汇自动交易软件,免费下载试用
  13. 工厂选择设备问题matlab,dsp实验一 常见问题教程
  14. ASP.NET MVC Flash 在线拍照
  15. 45个实用的前端开发工具汇总
  16. C++一本通题库1005
  17. 远程视频监控:MJPG-Streamer
  18. Excel 宏录制与VBA编程 —— 3、第一个VBA弹窗代码(附视频)
  19. (5)Flink-并行度parallelism、插槽slot
  20. Android(一)win10配置java环境、安装Android studio

热门文章

  1. 数据分析师培训哪家好?
  2. 如何跨网段搜索网络摄像机
  3. 算法四:跳楼梯问题2
  4. 智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》
  5. 实现窗口动漫人物眼睛跟随鼠标滚动
  6. Sencha Touch
  7. android pie mi 3 tab,三星的旗舰平板电脑Galaxy Tab S4正在更新到Android 9.0 Pie
  8. Android平台蓝牙相关名词缩写
  9. GUI怎么能缺少列表, LVGL『List列表控件』介绍
  10. 数学建模—投资组合问题