理解TCP为什么需要进行三次握手(白话)(转载)

原文地址:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html#comment_tip

首先简单介绍一下TCP三次握手

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。

通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。

三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。

 

    但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我们举一个现实生活中两个人进行语言沟通的例子来模拟三次握手。

第一次对话:

   老婆让甲出去打酱油,半路碰到一个朋友乙,甲问了一句:哥们你吃饭了么?

结果乙带着耳机听歌呢,根本没听到,没反应。甲心里想:跟你说话也没个音,不跟你说了,沟通失败。说明乙接受不到甲传过来的信息的情况下沟通肯定是失败的。

如果乙听到了甲说的话,那么第一次对话成功,接下来进行第二次对话。

第二次对话:

   乙听到了甲说的话,但是他是老外,中文不好,不知道甲说的啥意思也不知道怎样回答,于是随便回答了一句学过的中文 :我去厕所了。甲一听立刻笑喷了,“去厕所吃饭”?道不同不相为谋,离你远点吧,沟通失败。说明乙无法做出正确应答的情况下沟通失败。

如果乙听到了甲的话,做出了正确的应答,并且还进行了反问:我吃饭了,你呢?那么第二次握手成功。

通过前两次对话证明了乙能够听懂甲说的话,并且能做出正确的应答。接下来进行第三次对话。

第三次对话:

甲刚和乙打了个招呼,突然老婆喊他,“你个死鬼,打个酱油咋这么半天,看我回家咋收拾你”,甲是个妻管严,听完吓得二话不说就跑回家了,把乙自己晾那了。乙心想:这什么人啊,得,我也回家吧,沟通失败。说明甲无法做出应答的情况下沟通失败。

如果甲也做出了正确的应答:我也吃了。那么第三次对话成功,两人已经建立起了顺畅的沟通渠道,接下来开始持续的聊天。

通过第二次和第三次的对话证明了甲能够听懂乙说的话,并且能做出正确的应答。

可见,两个人进行有效的语言沟通,这三次对话的过程是必须的。

同理对于TCP为什么需要进行三次握手我们可以一样的理解:

为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。

 

         以上是转载的全文。原文作者的总结很精彩。我的理解是:为了保证双工必需保证服务器端和客户端都能够发送和接收信息。

转载于:https://www.cnblogs.com/NeilHappy/archive/2012/11/06/2756756.html

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

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

相关文章

mysql 免费前端_MySQL

MySQL这是一个关系型数据库,存在表的概念。结构数据库可以存放多张表,每个表可以存放多个字段,每个字段可以存放多个记录。DOS命令操作数据库PHPstudy使用终端打开数据库第一步:设置-->MySQL工具-->MySQL命令行;…

linux下无法umount移动设备

linux下无法umount移动设备,提示:device is busy,那可以试试这个指令fuser 列出占用设备的进程 fuser -m -v /usb/ 杀掉占用设备的进程,-i是每个进程询问一下。 fuser -m -v -i -k /usb/转载于:https://blog.51cto.com/wapcn/706…

惊了!日本街头出现透明公厕,竟有人排队抢着上!

全世界只有3.14 % 的人关注了爆炸吧知识最近在日本一个公园内,一间透明的厕所火了!厕所为什么是透明的?如何保证私密性?还是一个装置艺术,在哗众取宠?相信你跟我有一样的疑问。其实啊,这是日本财…

Gitflow branch与Docker image tag命名冲突怎么办?

谷歌还是比必应要好用一点。在前公司,我根据主流的git flow 给团队搭建了一套devops流程,运行在 docker & k8s上。在现代devops流程中,一般推荐使用git分支名或者git tag作为镜像的tag名。在实际操作中, 我遇到了一个流程阻塞…

ubuntu 安装 php

按照 Unofficial Ubuntu 6.06 (Dapper Drake) Linux Starter Guide的步骤来 一、安装Apache2 sudo apt-get install apache2 然后在Firefox中打开: http://localhost/ 提示成功 安装完毕后,接下来就要启动Apache了 如果只是用于本地开发,加强安全性&…

测试你的Python 水平----6

为什么80%的码农都做不了架构师?>>> 1、问:简述python中unicode和utf-8的关系?常用的函数有哪些?答:unicode是一个字符编码集合,定义每个字符的唯一编码;utf-8则是unicode的一种实现…

mySQL微信小程序的div_做一个微信小程序的完整流程

一. 引言最近在和朋友探讨开发一个小程序,都说近一两年是小程序快速发展的一年,不懂技术的人,大部分零售店面都开始想做一个小程序帮助推广销售。虽然小程序技术门槛没那么高,但自己独立做一个小程序还是需要了解的内容比较多的。…

970页绝版资料!初高中数学与竞赛知识点+方法技巧,由苏步青当顾问,众多一线名师共同编写!...

全世界只有3.14 % 的人关注了爆炸吧知如何才能学好数学?我国著名数学家苏步青先生曾说:"要学好数学,方法不外乎打好基础,多做习题,多加思索和分析”。为了帮助大家学好数学,今天,超模君要给…

Mysql不同存储引擎的表转换方法

Mysql不同存储引擎的表转换方法 1、Alter table 直接修改表的存储引擎,但是这样会导致大量的系统开销,Mysql为此要执行一个就表向新表的逐行复制。在此期间,转换操作可能会占用服务器的所有I/O处理能力。转换表之后,原先引擎的特殊…

使用WTMPlus快速搭建发卡网

快点关注我们吧作者介绍不倔强的草莓,从事互联网乞讨行业多年,深入了解乞讨业务。开发过草莓要饭网等系统。对互联网乞讨的运营有一定经验。什么是WTM框架?WTM框架是一款.NET平台下的开源快速开发框架,可以快速、灵活、高效的开发一个基于.NE…

LINUX IRC使用

上班第一件事就是使用IRC,如果系统没有,可以用yum install xchat安装一个(yum不能用的请看其他资料),完成后打开IRC,前面昵称用户名等自己填就可以,然后networks中添加一个服务器,如…

使用js代码将HTML Table导出为Excel

使用js代码将HTML Table导出为Excel的方法&#xff1a; 直接上源码 <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <script type"text/javascript" language"javascript"&…

mysql老叶博客_MySQL binlog后面的编号最大是多大?【老叶茶馆公众号】

MySQL binlog后面的编号最大是多大&#xff1f;具体文章请关注微信公众号&#xff1a;izhishuedu 【知数堂】 知数堂版权所有。这里我就不啰嗦了&#xff0c;直接上贴代码&#xff1a;版本&#xff1a;5.7.18mysql-5.7.18/sql/binlog.cc 大约在3310行开始&#xff1a;MAX_LOG_…

如何优雅的当海王……

1 这车怪有个性的▼2 这个胡律师要火啊▼3 被拦下的教师节礼物……▼4 老公”偷情“的证据▼5 这船快得很&#xff0c;沉得快▼6 别耽误孩子&#xff0c;让孩子去跑马拉松吧▼7 这是要电脑养蛊&#xff1f;▼你点的每个赞&#xff0c;我都认真当成了喜欢

Linux Command Line 解析

处理模型 Linux kernel 的启动包括很多组件的初始化和相关配置&#xff0c;这些配置参数一般是通过command line 进行配置的。在进行后续分析之前&#xff0c;先来理解一下command line 的处理模型&#xff1a; 要处理的对象是一个字符串&#xff0c;其中包含了各种配置信息&am…

COSCon'21 参会指南 你想要的这里都有

“ 点击蓝字 / 关注我们 ”| 作者&#xff1a;袁睿斌| 编辑&#xff1a;Corrie| 设计&#xff1a;宋传琪开源社寄语2021年的10月&#xff0c;第六届中国开源年会&#xff08;COSCon21&#xff09;再一次如期召开了。今年的开源寄语&#xff0c;我们能够想到是三个关键词&#x…

Eclipse设定文件的默认打开方式

之前在eclipse中安装了androrid开发环境所有的xml打开发现下面只剩一下选择&#xff0c;原来maven的依赖查询都没有了。 解决方法&#xff1a; 1.最终解决方法 设置默认打开方式为MAVEN POM Editor。 菜单&#xff1a;Window -> Preferences -> General -> Editors -&…

mysql tdh_socket_thread_num_TDH_Socket的一些性能对比数据

workming&#xff1a;请教一下&#xff0c;Spark On YARN总会失败&#xff0c;信息如下&#xff1a;||2014-01-03 16:14:06,675 WARN [main] yarn.ApplicationMaster (Logging.scala:logWarning(60)) - Failed to connect to driver at namenode1:3039, retrying ...||2014-01-…

ios下划线变量:为什么变量前要加下划线才有用?

先看一段代码。 复制代码 appdelegate.h property (weak) IBOutlet NSMatrix *StockType;property (weak) IBOutlet NSMatrix *market; appdelegate.m NSCell *st[market selectedCell]; 编译时&#xff0c;总是提示&#xff0c;找不到market变量&#xff0c;但是StockType却没…

为什么说减速带是脑残的设计?

全世界只有3.14 % 的人关注了爆炸吧知识开车的谁没有压过减速带啊&#xff0c;当你以较高车速通过它时&#xff0c;剧烈振动会带给你强烈的刺激&#xff0c;有时候胃都感觉不舒服&#xff0c;加强你的不安全疑虑&#xff0c;促使你减速行驶。简单来说&#xff0c;就是“顶你起来…