当前位置: 首页 > news >正文

面试最常问的tcp三次握手策略

前端小伙伴找工作的时候是不是常常被问到http的tcp三次握手策略是怎么建立的啊。

看到篇文章以后在面试这块就不用怕了?

其实TCP/IP按层分的话,分为4层,分别是

1 应用层

2 传输层

3 网络层

4 链路层

关于这4层分别是什么,在这就不多说了,今天咱们只看 传输层(TCP协议层)。

tcp作为传输层它主要提供了一下功能,

  • 提供了可靠的字节流服务
  • 确保数据能够到达目标

1、TCP提供的可靠字节流服务。

1.1 、所谓的字节流服务,简单的理解就是身为传输层的tcp协议,能够把传输比较大的数据进行分块处理,按序号分块处理成网络传输的小单位。其实就是为了方便传输。

比较官方店的解释为:”为了方便传输,将大的数据分割成以报文段为单位的数据包进行管理“

1.2 、可靠的传输服务,简单的理解为tcp协议能够把大数据包已经分割成报文为单位的数据包准确可靠传给对方。

总结上面1.1、1.2得知tcp协议为了容易传送数据才把数据分割,而且tcp协议能够确认数据最终是否送达到对方。

2、确保数据能够到达目标

tcp的三次?就是马上就要浮出真面目。

为了确保数据能后无误的送达目标处,tcp协议采用面试关常问的三次握手(three-way-handshaking)策略,用于tcp协议把数据包送出去后,tcp不会对传送的后的情况置之不理,它一定会向对方确认是否成功送达。

先简单的理解一下三次握手机制,简单的例子比如咱们大家是不是都在支付宝或者微信上面进行过转账啊,比如我有一个好朋友赵鑫,赵鑫打电话给我借钱,我得知这个消息后,要给他转钱,我选择在微信上面给他转账了。

我把钱转给他以后,接着就给他发了一条信息”我把2000元已经转给你了,你注意查收一下“,

赵鑫看到信息以后就会回复:’钱收到了,下个月还你‘等这类的话

我看到信息后回复:’收到,好的‘

转账加信息回复就是简单描述三次握手,接下来我们看看在tcp层怎么实现的

在握手的过程中使用了tcp的标志(flag)-SYN(synchronize,使.....同步)和ACK(acknowledgement,承认、确认)。

发送端在数据包发送以后,首先发送一个带SYC(synchronize)标志的数据包给对方,接收端收到后,回传一个带有SYN(synchronize)/ACK(acknowledgement)标志的数据包已传达接收端的确认信息。发送端在回传一个带有ACK标志的数据包,代表”握手结束“,

若在握手中某个阶段莫名中断,tcp协议会再次以相同的顺序发送相同的数据包

除了上述的三次握手,tcp协议还有其他各种手段来确保通信的可靠性




转载于:https://juejin.im/post/5c233b8cf265da611a47e755

相关文章:

  • 电子邮件加密:PGP 和S/MIME加密的区别
  • 4.2Python数据类型(2)之布尔类型
  • 新年购机首选,全能旗舰华为Mate 20 X让你大胆出去high!
  • 一次 Java 内存泄漏排查过程,涨姿势
  • git删除忽略文件.idea
  • 分块⑨题
  • Django admin 后台管理
  • 完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android...
  • 使用javascript连接mqtt协议(自动重连问题)
  • serde
  • 设计模式的学习(10)策略模式
  • RabbitMQ 发布订阅
  • json对象 按key排序
  • 蜂鸟运单系统架构及实现
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JSDuck 与 AngularJS 融合技巧
  • ReactNativeweexDeviceOne对比
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 分类模型——Logistics Regression
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 深度学习中的信息论知识详解
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 小程序开发中的那些坑
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 06-01 点餐小程序前台界面搭建
  • 容器镜像
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)(1.9) MSP (version 4.2)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (过滤器)Filter和(监听器)listener
  • (一)为什么要选择C++
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)linux下的时间函数使用
  • ***通过什么方式***网吧
  • .htaccess配置常用技巧
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET 材料检测系统崩溃分析
  • .Net 垃圾回收机制原理(二)
  • .net 提取注释生成API文档 帮助文档
  • .NET 中 GetProcess 相关方法的性能
  • .Net组件程序设计之线程、并发管理(一)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .project文件
  • 。Net下Windows服务程序开发疑惑