专栏首页coding个人笔记HTTP之TCP三次握手及四次挥手

HTTP之TCP三次握手及四次挥手

TCP协议应该所有开发人员都听过,至于有没有搞清楚就不知道了。今天分享一下自己理解的思路。

TCP协议是传输层的协议,除了TCP协议之外,应用层还是UDP协议。相对比,UDP协议不可靠,TCP丢包之后会重新传输,UDP不会,而且UDP是无序的。两者之间还是有很多区别的,UDP也有自己的优点,比如传输速度快。现在大部分都是由TCP协议。

先明白TCP协议作用:

为了在不可靠的网络上提供可靠的端到端字的传输协议,网络的结构、带宽、延迟、数据包大小和其他参数等都有很大的不同,TCP的作用是能够动态地适应网络的这些不同,拥有面对各种故障时的健壮性。而且对应的数据包如果已丢失,TCP将会被进行重传。简单记忆就是保证数据通信的完整性和可靠性,防止丢包。

TCP三次握手:

三次握手主要的目的是为了确认两个应用层都具备收和发的能力。

第一次握手,发送方发送SYN=1、SEQ=X,证明了发送方能发数据;

第二次握手,接收方发送SYN=1、ACK=X+1、SEQ=Y,ACK确保了接收方能收数据,SYN确保了接收方能发数据;

第三次握手,接收方发送ACK=Y+1、SEQ=Z,证明了发送方能接收。

所以这就是为什么需要三次握手而不是两次四次五次,大于三次浪费,少于三次不能保证双方同时具备收和发。

当然,三次握手的SYN、ACK、SEQ都有深层次的解释和意义,比如数据包的组装、慢启动等,自己觉得不需要去了解那么深。三次握手还有一个作用,就是节省服务器的开销,如果三次握手中间有一个是失败的,那么服务器就不会一直等待,浪费性能,而是直接关闭这个连接。

TCP四次挥手:

跟三次握手差不多,也是为了让发送方和接收方知道数据状态。

第一次挥手,发送方发送FIN告诉接收方发送完毕,要关闭传输;

第二次挥手,接收方发送ACK=FIN+1告诉发送方知道发完了;

第三次挥手,接受方发送FIN告诉发送方,接收完了,要关闭数据传输;

第四次挥手,发送方发送ACK告诉接收方知道了。

四次挥手其实不单单只有FIN和ACK,还有其他的数据包,比如STN和SEQ等。这边只是以FIN和ACK为主介绍一下。那为什么需要四次呢?因为当发送方告诉接收方发完了的时候,接收方还有可能没接收完消息,所以只能先回复一部分,告诉发送方已经收到发完了的消息了。当消息完全接收完毕之后,才会告诉发送方已经接收完了。

这只是三次握手和四次挥手,TCP协议是非常复杂的,什么对应的状态、报文、数据分类、传输技术、滑动窗口协议、超时重传SACK方法等。这边只是分享了最简单的三次握手和四次挥手,而且连这两个部分都只是简单的介绍。

(完)

本文分享自微信公众号 - coding个人笔记(gh_2ce38b49dae1),作者:wade

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ES6之函数的扩展

    正常情况下没有问题,但是要是a是0或者是false等会被转换成Boolean类型false的时候就会出错。ES6对参数的默认值允许直接设置:

    wade
  • 哔哩哔哩开源的flvjs

    之前有分享过rtmp和m3u8的直播,后来才有了哔哩哔哩开源的flvjs做,于是就出现了ios不兼容的问题。

    wade
  • webpack(4.8.3)总结之二

    开发环境(development)和生产环境(production)的构建目标差异很大。在开发环境中,我们需要具有强大的、具有实时重新加载(live reloa...

    wade
  • 毕业之后,这些年薪50万+的90后程序员经历了什么?

    如果说薪资是检验一家公司对你认可的标准,那么年纪轻轻就能达到年薪 50 万+,一定程度上说明了公司对他创造的价值的认可。

    程序员宝库
  • Java 11正式发布,新特性解读

    北京时间 9 月 26 日,Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本,非常值得关注。你可以点击以下...

    纯洁的微笑
  • CCF考试——201604-4游戏

      小明在玩一个电脑游戏,游戏在一个n×m的方格图上进行,小明控制的角色开始的时候站在第一行第一列,目标是前往第n行第m列。   方格图上有一些方格是始终...

    AI那点小事
  • 【每日一题】1442[蓝桥杯][历届试题]打印十字图

    继续给大家来一个蓝桥杯的真题,想练就能成大神! 请看题: 问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: ..$$$$$...

    编程范 源代码公司
  • JS引擎是如何工作的?从调用堆栈到Promise

    有没有想过浏览器如何读取和运行JS代码? 这看起来很神奇,我们可以通过浏览器提供的控制台来了解背后的一些原理。

    Fundebug
  • Django视图、传参和forms验证操作

    • 在settings.py文件中通过ROOT_URLCONF指定根级url的配置

    砸漏
  • python字符串类型

    字符串长度 >>> a = 'hello python'>>> len(a)12 字符串取值从0开始 >>> a[0]'h' >>> a[1]'e' >>> a...

    零月

扫码关注云+社区

领取腾讯云代金券