TCP为什么需要三次握手和四次挥手

网上已经有很多解释了,就不瞎说了,Mark一些链接作为自己的学习笔记吧。
学习参考链接1
学习参考链接2
学习参考链接3
学习参考链接4

为什么要3次握手
  • 防止已过期的连接请求报文突然又传送到服务器,因而产生错误。

    Client发生一个请求连接报文可能因为网络延迟等原因,没有送达到server中。但是当这个client的请求报文送达到server时,如果没有三次握手的话,server就会直接发数据可client,这样会导致server资源的浪费。

  • 这个问题的本质是, 信道不可靠。

    信道不可靠,但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足”在不可靠信道上可靠地传输信息”这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了.”。

为什么要4次挥手?
  • 确保数据能够完成传输。

    关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不属于个人计算机范围的是,计算机应用基础模拟试卷2

一、1.单项选择题单项选择题每小题1分。在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑。未涂、错涂或多涂均无分。0. 个人计算机属于A.小巨型机B.小型计算机C.微型计算机D&#xf…

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图,容易难度:中地图,中等难度:大地图,困难难度: 四、完整代码链接总结 前言 这是一个Python实验作业,内容如下: 题目要求&am…

解决Ubuntu14.04在外接显示器不能指定问题的最佳分辨率

通常这种情况发生。在System Settings -> display 你会发现多出了一个 unknown display。这往往是因为你使用质量低劣的视频电缆,例如,几美元VGA线。解决方案有2,质量好的一个改变钢带(有磁场干扰)VGA线…

基础练习 - 数值交换

题目 1 声明两个变量:int n1 10,n2 20,要求将两个变量叫唤,最后输出n1为20,n2为10. (扩展*: 不使用第三个变量如何交换) 解决方案 基本方法 private static void BasicMethod(){int n1 10;int n2 20;Console.WriteLine("n1…

python计算圆的面积

用Python创建一个脚本,要求: 能计算半径为2的圆的面积保留10位小数可以直接执行 #!/usr/bin/env python3 import math print("Area is:{:.10f}".format(math.pi*4))计算圆的面积要用到pi,所以我们引用模块math

Visual Studio 配色方案

字体:Fixedsys Excelsior 字体大小:12 配色方案:http://studiostyles.info 导入步骤: 工具->导入和导出设置->导入选定的环境设置->否,仅导入新设置->“浏览”->下载的vssetings文件->完成。 转载于…

昆明学院计算机专业在哪个校区,昆明学院有几个校区及校区地址

昆明学院有几个校区及校区地址2017-06-19 11:15:56文/韩竞仪最近有很多考生和家长咨询小编,昆明学院有几个校区,今年新生会被分配到哪个校区?哪个校区好?等相关问题,下面小编统一回复一下考生们的问题。昆明学院有3个校区,分别是…

python列表总结

列表方法append():在列表末尾添加元素列表方法insert():在列表任意位置插入元素,a.insert(0,1),在列表的0号位置插入元素1.列表方法count(s):返回s在列表中出现的次数列表方法remove(s):移除列表中的第一个…

Swift基本语法

Swift基本语法 原文:Swift基本语法Swift基本语法 简介 1.什么是Swift Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕” 跟Objective-C一样,可以用于开发iOS、Mac应用程序 苹果从2010年7月开始设计Swift语…

2018华工计算机应用基础作业,计算机应用基础平时作业2019

计算机应用基础平时作业2019Tag内容描述:1、1.简述启动控制面板的常用方法。(至少列出三种) 答:常用打开控制面板的方法:1)点开始,选择控制面板打开;2)打开我的电脑,选择控制面板;3)点开始运行&…

计算机系统组织结构,第4章 操作系统计算机组织结构.ppt

第4章 操作系统计算机组织结构第4章 计算机组织结构 前言 操作系统提供了抽象以简化对硬件的使用,单线程是冯?诺依曼计算机的操作抽象,如果理解了一个冯?诺依曼计算机是如何执行程序的,就能理解进程背后的知识,对操作系统的深入…

Solution 19: Fibonacci数列

问题描述 求Fibonacci数列的第n项。Fibonacci数列为1,1,2,3,5,... 解决思路 (1) 递归,指数级时间复杂度; (2) 循环,O(n)时间复杂度; (3) 矩阵乘法,O(logn)时间复杂度; (4) 公式法,O(1)时间复杂度…

boost::unordered_map 和 std::map 的效率 与 内存比较

例子链接:http://blog.csdn.net/gamecreating/article/details/7698719 结论: unordered_map 查找效率快五倍,插入更快,节省一定内存。如果没有必要排序的话,尽量使用 hash_map(unordered_map 就是 boost 里面的 hash_map 实现)。…

软件可靠性指标mtbf测试评估,软件可靠性评估.pdf

软件可靠性评估软件可靠性工程基础——软件可靠性评估北京航空航天大学可靠性与系统工程学院目的 理解什么是软件可靠性评估,基本原理 掌握和应用典型的软件可靠性模型 了解比较软件可靠性模型的主要方法 理解稳定使用阶段的软件可靠性评估 理解增长测试中…

模型和控制器-起步阶段

MVVM简介 针对客户端应用开发AngularJS吸收了传统的MVC基本原则。MVC(Model-View-Controll)设计模式针对不同的人可能意味不同的东西 ,AngularJS并不执行传统意义上的MVC,更接近于MVVM。 MVVM模式是Model-View-ViewMode模式的简称。由视图(View)、视图模型(ViewMode…

Apache开启Gzip压缩

1. 编辑Apache的httpd.conf文件 vim /etc/httpd/conf/httpd.conf 2. 开启mod_deflate.so模块 LoadModule deflate_module modules/mod_deflate.so 3. 对该模块进行配置 # ShiftG到最下一行添加如下内容<IfModule mod_deflate.c> # 压缩等级 9 DeflateCompressionLevel 9 …

计算机的网络与结构,计算机结构与组成29-网络.ppt

计算机结构与组成29-网络CS61C L221 Performance ? UC Regents I/O Review I/O gives computers their 5 senses I/O speed range is 12.5-million to one Differences in processor and I/O speed ? synchronize with I/O devices before use Polling works, but expensive …

Canvas动画 位图缓存提高效率和对应的内存问题

对一个矢量图动画&#xff0c;开启位图缓存能大大提高运行效率。所谓开启位图缓存&#xff0c;其实要自己动手&#xff0c;先创建一个临时canvas&#xff0c;然后把矢量图绘制到这个canvas上&#xff0c;到了实际绘制时&#xff0c;直接把这个临时canvas拷贝到真正canvas上。而…

ASP.NET MVC 学习第一天

今天开始第一天学习asp.net mvc&#xff0c;写的不是很好&#xff0c;高手不要喷&#xff0c;希望大家能一起进步学习。 好了&#xff0c;开始学习 新建项目&#xff0c;选择mvc 4应用程序 接下来选择基本&#xff0c;视图引擎当然要选择Razor&#xff0c;如果在选择aspx那我们…

python提取字符串中的数字

字符串存储在string.txt中&#xff0c;将字符串中的数字提取出来&#xff0c;组成心得字符串&#xff0c;并打印输出。 #!/usr/bin/env python3 fileopen(/home/user/string.txt) file_contextfile.read() i0 string while i < len(file_context):if file_context[i].isdig…