TCP中的三次握手和四次挥手
三次握手:目的是同步连接双方的序列号和确认号 并交换 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中的三次握手和四次挥手的更多相关文章
- TCP 中的三次握手和四次挥手
Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...
- 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
[摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...
- TCP协议中的三次握手和四次挥手(图解)【转】
建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删 ...
- TCP/IP协议三次握手和四次挥手大白话解说
前言 昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧. TCP(Transmi ...
- 详解TCP连接的“三次握手”与“四次挥手”(下)
上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...
- 白话解说TCP/IP协议三次握手和四次挥手
白话解说TCP/IP协议三次握手和四次挥手 1.背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 1.1.问题 有时候聊天的过程中,我的 ...
- TCP为什么做三次握手、四次挥手
TCP 为什么做三次握手.四次挥手? TCP 是为了解决可靠传输出现的.为了实现可靠性,TCP 做了流量控制.拥塞控制,并且在建立.关闭连接前做些机制:三次握手.四次挥手. 三次握手是为了让客户端.服 ...
- 真的懂了:TCP协议中的三次握手和四次挥手(关闭连接时, 当收到对方的FIN报文时, 仅仅表示对方不在发送数据了, 但是还能接收数据, 己方也未必全部数据都发送对方了。相当于一开始还没接上话不要紧,后来接上话以后得让人把话讲完)
一.TCP报文格式 下面是TCP报文格式图: (1) 序号, Seq(Sequence number), 占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2) 确 ...
- TCP/IP协议 三次握手与四次挥手
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号 ...
随机推荐
- Java面试通关要点【问题汇总篇】
基础篇 基本功: 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说 ...
- Linux-文件目录命令
黑色 代表是普通的文件 蓝色 代表是目录(文件夹) 紫色 代表是图片文件 绿色 代表是可以执行的文件(脚本文件)-->存放linux命令的 红色 代表是压缩文件 clear:清屏pwd:显示当前 ...
- Linux虚拟机将ip改为自定义模式网络
查看当前ip:ifconfig 配置linux的ip地址:vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="dhcp" ...
- Server runtime
spring mvc常用的注解: 个介绍. @Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指 ...
- 省钱小贴士(ECS):教你如何每年省出8w+ 块
随着用户越来越多地使用阿里云的ECS服务,如何用最小的成本来保有ECS,成为用户越来越重要的关注点. 变更点 为了更好的服务客户,ECS团队调整了系统盘的最小容量限制 linux系统 core os调 ...
- FTP(文件传输协议)工作原理
目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...
- 深入剖析php执行原理(2):函数的编译
本文只探讨纯粹的函数,并不包含方法.对于方法,会放到类.对象中一起研究. 想讲清楚在zend vm中,函数如何被正确的编译成op指令.如何发生参数传递.如何模拟调用栈.如何切换作用域等等,的确是一个很 ...
- ECharts 图表设置标记的大小 symbolSize 和获取标记的值
ECharts 是百度出品,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...
- JavaScript的DOM_StyleSheet操作内联或链接样式表
使用 style 属性,仅仅只能获取和设置行内的样式,如果是通过内联<style>或链接<link>提供的样式规则就无可奈何了,使用 getComputedStyle 和cur ...
- MyBatis(3)-映射文件
本次博文有疑问,请先看MyBatis(1)-简单入门 和 MyBatis(2)-全局配置文件! 如在有疑问,请留言或者咨询博主,博主每天都在!谢谢! 映射文件: 主要是在xxxmapper.xml文件 ...