三次握手:目的是同步连接双方的序列号和确认号 并交换 TCP窗口大小信息。

理论上跟通话一样: a: 你听的到吗?  b: 我能听到。只需要两次就可以了,但建立连接阶段不是双向即时通信的,且最终的目的是为了建立安全稳定的连接。所以需要三次握手。

三次握手最终要达到的目的是,客户端以及服务端都知道自己以及对方发送接收正常,这样的机制才是健康安全的。

第一次握手:客户端给服务器发送了消息

解析:客户端发送了 SYN = 1,以及 seq = 1给服务端,这个过程结束后服务端知道了一件事情: 我自己的接收正常,客户端那边的发送正常。(这时候的客户端并不能确认自己的发送正常)

   seq = x相当于是一个暗号,客户端发完后就进入了等待发送状态(发送预启动)

第二次握手:服务端接收到了客户端的消息后作出反馈

解析:服务端返回给客户端的信息里:把刚才客户端发过来的 SYN = 1,以及 seq这个暗号 进行加1 得到ack = x+1,然后再发送一套自己的东西,ACK = 1, seq = Y.

客户端收到了 ack = x+1,明白了确实服务器收到了我刚才的那个请求,暗号是对的。并且也记下了服务器的那套东西, ACK以及seq

这个过程下来,客户可以确认:我的发送正常,接收也正常,服务器那边的接收正常,发送正常。(服务端那边还不能确认自己的发送正常),服务端进入等待接收状态(或者说是接收预启动)

第三次握手:客户端发送消息给服务端

解析: 客户端把之前收到的服务端发送过来的两个字段返回给服务端,并把那个暗号+1.

服务端可以做出总结:我之前发的服务端确实收到了,我的发送正常,客户端能收到我的消息并返回给我,那客户端的发送接收功能也正常。(第一次握手时候,服务端确认了自己的发送正常及客户端的发送正常)

至此: 客户端以及服务端都确认了,自己的发送接收正常,对方的发送接收也正常。结束,建立起tcp连接。双方由预启动状态正式开始工作。

总结:为什么要有三次握手:这个保证了即时性、有效性,假设一种场景:客服端给服务端发送的消息经历了太空漫游,网络延迟等,导致很久之后服务端才接收到。

    如果是客户端请求了,服务端接收到了请求就直接建立起tcp连接,这样服务端就会处在一个等待客户端请求端的状态(联想到了古代时期一妇女收到了战场上夫君的书信,然后天天桥头望夫归,信是几个月前军队寄       出来的,男人早已战死QAQ)。这种状态浪费了服务器的资源。

四次挥手:断开tcp连接的机制,防止对方话还没说完就挂电话了。。。

第一次挥手:客户端发送了报文给服务端,客户端进入了预关闭状态,表明自己没有啥话说了。

第二次挥手:服务端告诉客户端,我知道了。同时把暗号进行加1,返回给客服端。

第三次挥手:服务端继续告诉客户端,我也没啥话说了,那咱们挂电话吧? 服务端进入准备挂电话状态。

第四次挥手:客服端收到了服务端发的消息,确认对方也没有话交代了,且准备挂电话了。然后客户端说:好,那挂吧。

      服务端收到消息后,挂断电话(服务器进入关闭状态),客户端听到嘟嘟,知道对方挂电话了,于是自己也进入关闭状态。

      (原理是,客户端发出消息后,几毫秒之后没有接收到服务端的任何消息,就知道服务端是进入关闭状态了,于是自己也这样)

总结:为什么要四次挥手,客户端告知服务端:我没啥话说了。服务端回复客户端:我知道你没话说了。这两步走完后,不可能立马就挂的,

    万一服务端还有话说呢? 于是接下来,服务端需要通知客户端:我也没话说了,要不先挂了?下次再说?。这是第三步挥手。

   最后,客户端收到了服务端的消息,并说:好的,那挂了吧,下次再说。于是服务端挂电话,然后客户端也挂电话。TCP断开连接。

最后说明:以上内容纯自己手打,内容参考于以下两篇博客后自己做的总结巩固。

     https://blog.csdn.net/zixiaomuwu/article/details/60965466

     https://www.cnblogs.com/shihaochangeworld/p/5770294.html

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

  1. TCP 中的三次握手和四次挥手

    Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...

  2. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手

    [摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...

  3. TCP协议中的三次握手和四次挥手(图解)【转】

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删 ...

  4. TCP/IP协议三次握手和四次挥手大白话解说

    前言 昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧. TCP(Transmi ...

  5. 详解TCP连接的“三次握手”与“四次挥手”(下)

    上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...

  6. 白话解说TCP/IP协议三次握手和四次挥手

    白话解说TCP/IP协议三次握手和四次挥手 1.背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 1.1.问题 有时候聊天的过程中,我的 ...

  7. TCP为什么做三次握手、四次挥手

    TCP 为什么做三次握手.四次挥手? TCP 是为了解决可靠传输出现的.为了实现可靠性,TCP 做了流量控制.拥塞控制,并且在建立.关闭连接前做些机制:三次握手.四次挥手. 三次握手是为了让客户端.服 ...

  8. 真的懂了:TCP协议中的三次握手和四次挥手(关闭连接时, 当收到对方的FIN报文时, 仅仅表示对方不在发送数据了, 但是还能接收数据, 己方也未必全部数据都发送对方了。相当于一开始还没接上话不要紧,后来接上话以后得让人把话讲完)

    一.TCP报文格式 下面是TCP报文格式图: (1) 序号, Seq(Sequence number), 占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2) 确 ...

  9. TCP/IP协议 三次握手与四次挥手

    一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下:        (1)序号 ...

随机推荐

  1. <Android 基础(二十一)> Android 屏幕适配

    基本概念 1. 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕尺寸是指屏幕对角线的长度.单位是英寸,1英寸=2.54厘米 屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1像素点,一般是纵向 ...

  2. Signal & Slot in Qt

    Try your best to provide an mechanism to implement what you want. 1. All is generated by QT Framewor ...

  3. Same Tree 比较两个二叉树是否完全相同

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  4. 理解android中ListFragment和Loader

    一直以来不知Android中Loader怎么用,今天晚上特意花了时间来研究,算是基本上搞明白了,现在把相关的注释和代码发出来,以便笔记和给网友一个参考,错误之处还望大家给我留言,共同进步,这个例子采用 ...

  5. 封装网络请求并在wxml调用

    https://blog.csdn.net/qq_35713752/article/details/78109084 // url:网络请求的url method:网络请求方式 data:请求参数 m ...

  6. [NCH 1, 3]

    Preview: 1. Implement strStr() O(m*n): class Solution { public: int strStr(string haystack,string ne ...

  7. Excel VBA Range对象基本操作应用示例

    [示例01] 赋值给某单元格[示例01-01] Sub test1()Worksheets("Sheet1").Range("A5").Value = 22Ms ...

  8. [翻译] JTBorderDotAnimation

    JTBorderDotAnimation https://github.com/jonathantribouharet/JTBorderDotAnimation JTBorderDotAnimatio ...

  9. iOS设计模式 - 适配器

    iOS设计模式 - 适配器 效果 说明 1. 为了让客户端尽可能的通用,我们使用适配器模式来隔离客户端与外部参数的联系,只让客户端与适配器通信. 2. 本教程实现了适配器模式的类适配器与对象适配器两种 ...

  10. 重装win7系统的过程

    U盘重装系统准备工作: 1.下载一个制作U盘系统的软件,随便哪个都行,把U盘变成系统盘 2.下载镜像,将镜像copy到系统盘内即可(无需解压) 3.进入BIOS系统,将boot进行设置,将U盘设置为第 ...