关于TCP的三次握手,有很多朋友还在疑惑为什么是三次,而不是两次,LZ想了一下用一个例子来说明最好。

场景:
办公室有一名前台(服务器),若干业务员(fork出来的进程)
客户(客户端)
 
为什么我们说三次握手才是有保障的,才是稳定的,我们看一下,如果是一次握手

客户(打电话给前台): 喂,你好!  (一次握手)

然后传送文件过去。

(如果前台没有人,你文件传送过去也没人处理啊。。。)

 
如果是两次握手

客户(打电话给前台):喂,你好!(第一次握手)

前台: 你好!请问什么事情?(第二次握手)

然后客户直接传送文件过去。

几秒钟后,前台:你好!请问你哪位,什么事情?(服务器超时重发SYN+ACK)

又几秒钟后,前台:你好!请问你哪位,什么事情?(服务器超时重发SYN+ACK)

。。。

半分钟后,前台:那个瓜娃子,骚扰嗦!(挂掉电话)(服务器重发次数达到,不再重发)

(OK,客户传送过去的文件还是没有人处理。。。)

 我们再来看三次握手

客户(打电话给前台):喂,你好!(第一次握手)

前台: 你好!请问什么事情?(第二次握手)

客户:我是XXX,你接收传真处理一下。(第三次握手)

然后客户传送文件过去。

前台安排业务员去拿好传真,处理完并与客户直接沟通。(fork一个独立进程与客户端交互)

业务员接手与该客户的联系,并处理客户的各种请求。

前台继续等待其他客户打来电话。(服务器程序继续阻塞等待其他连接请求)

(OK,公司一片和谐,各司其职,客户的需求马上得到处理)

通过LZ以上的描述,大家应该知道为什么是三次握手,而不是两次握手了吧,不仅仅客户端要确认服务器端能连接,服务器也要确保与客户端能连接,这样才能是有效的连接。

用一个小的例子来说明为什么TCP采用三次握手才能保证连接成功的更多相关文章

  1. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  2. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  3. MVVM模式的一个小例子

    使用SilverLight.WPF也有很长时间了,但是知道Binding.Command的基本用法,对于原理性的东西,一直没有深究.如果让我自己建一个MVVM模式的项目,感觉还是无从下手,最近写了一个 ...

  4. 关于SVN配置文件的一个小例子

    1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于工作日志,原先采用邮件方式发给经理,但是这种方式 ...

  5. 使用Trinity拼接以及分析差异表达一个小例子

    使用Trinity拼接以及分析差异表达一个小例子  2017-06-12 09:42:47     293     0     0 Trinity 将测序数据分为许多独立的de Brujin grap ...

  6. TCP编程的一个小例子

    TCP程序的服务器端与客户端的流程图 例子:服务器端等待客户端连接,若连接成功,则用户可以通过客户端向服务器端发送任意字符串,服务器端在收到字符串后,输出相关信息,在把接受到的字符串重新发生给客户端. ...

  7. 关于ExpandableListView的一个小例子

    喜欢显示好友QQ那样的列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到an ...

  8. Web Api系列教程第2季(OData篇)(一)——OData简介和一个小应用

    第一季的链接以及系列导航:http://www.cnblogs.com/fzrain/p/3490137.html 在这里,首先要感谢Taiseer Joudeh不断的为我们带来最新的技术分享,楼主对 ...

  9. 【开源一个小工具】一键将网页内容推送到Kindle

    最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...

随机推荐

  1. Android 将Android项目打包成aar文件

    参考资料:https://blog.csdn.net/csdn_mm/article/details/78364444

  2. UEditor如何读取数据库信息?

    你用的什么语言,服务器端生成的时候,直接写在里面就可以了啊,比如 <textarea name="content" cols="800" rows=&qu ...

  3. JavaScript进阶【一】JavaScript模块化开发的基础知识

    //模块化的最初写法 //1.最初写法 //下面的m1和m2就组成了一个模块 //缺点:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系. f ...

  4. ELO kernels 记录

    these kernel for discuss how to handle outliers in target values. 一:Ashish Gupta: 在16年6月到18年8月,激活卡的人 ...

  5. ZOJ 3874 Permutation Graph (分治NTT优化DP)

    题面:vjudge传送门 ZOJ传送门 题目大意:给你一个排列,如果两个数构成了逆序对,就在他们之间连一条无向边,这样很多数会构成一个联通块.现在给出联通块内点的编号,求所有可能的排列数 推来推去容易 ...

  6. InfoSYS-20170114

    1.描述Spring的事务机制 2.描述并发脏数据,如何避免 3.如何防止同一个请求重复提交(重复付款) 4.如何监控程序性能 5.CPU过高说明什么问题 通常是程序中有死循环, 参考 http:// ...

  7. FFMPEG 音频转换命令

    音频转换: .转换amr到mp3: ffmpeg -i shenhuxi.amr amr2mp3.mp3 .转换amr到wav: ffmpeg -acodec libamr_nb -i shenhux ...

  8. properties 乱码问题

    File --> Others Settings --> Default Settings

  9. C#中的Dynamic

    dynamic dyn = (dynamic)1; int j = (int)dyn; 可以看到1被强制转换成dynamic,然后又被强制转换回int. 然而dynamic可以隐式的转换成任何类型,并 ...

  10. spring的几个重要类和接口

    1.datasource接口是javax.sql包下的接口,不是spring,是javax.sql下的 datasource接口有个重要的方法getConnection()方法 Connection ...