TCP三次握手和四次挥手

三次握手

TCP是运输层的协议,所以该协议为了保证运输的准确性。然后进行三次握手。

SYN(确认发送到接收):同步序列编号,是TCP/IP建立连接时使用的握手信息。

ACK(确认接收到发送):确认字符,表示发来的数据已经确认无误。

既然是传输的TCP报文,那么我们来看看TCP报文长什么样子!

第一次客户端发送:客户机发起连接请求,将SYN(同步序列编号)位设置为1,同时客户端选择了一个初始序列号x,并存在TCP报文段的序号中。

第二次服务端发送:服务端接收到该报文后,会为其分配TCP缓存和变量(这使得TCP容易受到SYN洪泛攻击的拒绝服务攻击),服务端会返回一个报文到客户端,其中SYN标志号为1,ack置1,确认号设置为x+1。然后并选一个自己的初始序列号y,放置到序号字段中。

第三次客户端发送:客户端收到服务端发来的报文后,客户端也要给该链接分配缓存和变量,然后再次发送一个确认报文给服务端,其中SYN置0,ack置1,将确认号设置为y+1,另外该报文段是可以携带数据:

为什么是三次握手

三次握手的目的是建立可靠的通信信道,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

为什么要传回SYN

接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信号信息确实就是你所发送的信号。

传SYN,为什么还要传ACK

双方通信无误必须是两者互相发送信息都无误。传了SYN,证明发送端发到接收方的通道没有问题,但是接收端到发送端的通道还需要ACK信号来进行验证。

第三次握手失败后,怎么办

如果第三次失败,过了超时计时器,服务端会重新发第二次的报文,要求客户端重传第三次报文,默认是5次,如果默认次数到了,还没有的话。服务端就关闭连接。

知道SYN攻击吗?如何防范?

SYN洪泛攻击就是利用第一次握手报文,服务器会为客户端请求分配缓存,那么黑客就可以利用假的ip疯狂去建立TCP连接,服务器会不断缓存,把服务器的连接资源消耗完。

服务器有SYN Cookie进行有效防御。当第一次报文来的时候,不给缓存,然后把第二次报文发给你客户端,客户端返回第三次报文的时候,检查无误,才建立具有套接字的全开的连接。但是有个缺点,第三次握手失败后,因为没有缓存,所以会重新三次握手。

四次挥手

第一次发报文:客户端发起连接释放的请求,设置FIN为1,序号会随机算出u;发送完毕后,客户端进入FIN-WAIT-1状态。

第二次发送报文:服务端接收到FIN报文后,会返回一个ACK报文,将ACK设置1,确认号为u+1;表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务端会进入CLOSE-WAIT状态,客户端接受到这个确认包之后,进入FIN-WAIT-2状态,等待服务器端关闭连接

第三次报文:服务端准备好进行关闭时,想客户端发送一个结束连接请求,FIN置为1;发送完毕后,服务端进入LAST-ACK状态,等待来自客户端的最后一个ACK;

第四次报文:客户端收到第三次报文,知道服务器已经准备好关闭,客户端发送一个确认包,并进入TIME-WAIT状态,等待可能出现的要求重传的ACK报文;服务端收到这个确认包后,关闭连接,进入CLOSE状态;

客户端等待了某个固定时间之后(2倍最大段周期),没有收到服务器的ACK,认为服务端已经正常关闭,于是自己也关闭连接,进入CLOSE状态。

四次挥手重要的是TIME-WAIT状态,为什么需要这个状态呢?

要确保服务器是否收到了我们的ACK报文,如果没有收到的话,服务器会重新发FIN报文给客户端,那么客户端再次收到FIN报文之后,就知道之前的ACK报文丢失了,就会再次发送ACK报文。

为什么握手只要三次,挥手要四次

关键在于中间两步。

当客户端发了第一次报文的时候,服务端先告诉客户端你那边的关闭请求我收到了。但是我这边还有一些资源,你等等我。 然后当服务端传完资源后,在发一个FIN报文,说我这边有可以关闭了。所以这里会多一次服务端准备好关闭的流程。

为什么TIME_WAIT状态需要经过2MSL才能转换到CLOSE状态

2MSL是一个发送和一个回复所需要的最大时间。

更多相关计算机网络知识笔记

https://blog.csdn.net/qq_40262372/article/details/113763116

B站视频讲解如何三个月学习JAVA拿到实习Offer:

https://www.bilibili.com/video/BV1dV411t71K

B站,VX关注:万小猿,我们会不断努力更新更多相关的知识笔记

如果想要在学习的道路上和更多的小伙伴们交流讨论

请加Q群:725936761

欢迎每一位小伙伴的加入

我们一起朝着目标加油!冲锋陷阵!

三次握手四次挥手必掌握,看了绝对不吃亏!相关推荐

  1. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义:       这里 ...

  2. ssh协议是osi_TCP/IP协议和三次握手四次挥手

    计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...

  3. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

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

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

  5. tcp 二次握手时延_一篇搞懂TCP的三次握手 四次挥手

    TCP的三次握手四次挥手,估计大家都听过.但是真的能把每一步说明白的人比较少.我还记得在之前面试的时候被面试官一顿问,然后一脸懵B... 都是大学没好好上课 ,这篇文章就跟大家讲讲到底这三握四挥是在搞 ...

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

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

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

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

  8. linux 查看握手时间,实战:tcpdump抓包分析三次握手四次挥手

    本文档以实战的形式介绍tcpdump抓包分析三次握手四次挥手的过程. 执行tcpdump命令 tcpdump -n -i ens32 host 192.168.10.10 and 42.186.113 ...

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

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

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

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

最新文章

  1. AI一分钟|阿里云解释故障原因:触发了一个未知代码Bug;清华蝉联ISC18超算竞赛总冠军...
  2. 10所“双一流”入选!一批国家自然科学基金立项名单公示
  3. [01分数规划]【学习笔记】
  4. java vtd-xml_在java中使用vtd-xml获取xml中的属性文本
  5. git checkout 单个文件_git 如何回退单个文件
  6. GARFIELD@10-07-2004
  7. 将数据导入excel表格
  8. Disruptor内存消息队列简单使用
  9. wordpress用cdn_如何为WordPress创建自己的自托管CDN
  10. 在mysql数据库中创建Oracle数据库中的scott用户表
  11. Linux中vi/vim编辑器的常用命令
  12. postman脚本文件存放的地址
  13. 网站跳出率(Bounce Rate)
  14. Typora使用技巧
  15. 杭州电子科技大学程序设计竞赛(2016’12)
  16. 电子商务H5游戏推荐:创意h5消消乐案例模板
  17. 【汇正财经】证券市场的基本功能有哪些?
  18. 笔记本电脑终于可以待机了
  19. RX 6500 XT和rtx3050 哪个好
  20. 三色求组合。从5个红球、5个蓝球、5个白球中任意取出8个球作为一组,要求每组中可以没有白球,但必须有红球和蓝球。 输出各种可能的取球组合。

热门文章

  1. 计算机算法设计与分析第三章答案,《计算机算法设计与分析》第三章动态规划法.ppt...
  2. oracle表修改语句怎么写,Oracle修改表结构语句
  3. 怎么制作铁闸门_咖啡师养成记 | 教你做一杯合格的拿铁咖啡
  4. linux异步事件框架,基于Cortex-M系列CPU的异步事件驱动中间件
  5. java 静态存储区_Java中的堆内存、栈内存、静态存储区
  6. 高斯混合模型聚类_高斯混合模型的解释及Python实现
  7. 服务器迁移虚拟化实施方案,服务器虚拟化项目P2V实施及迁移方案v8(31页)DOC
  8. tkinter 中给某个文本加上滚动条_python中wx模块的具体使用方法
  9. epoll监听文件_epoll
  10. java调用一个外部url_java 从程序内部调用外部url/接口