TCP三次握手和四次握手最直接的理解
网上有非常多文章讲TCP为什么建立连接时须要三次握手,关闭连接时须要四次握手。讲了非常多原理。反而让非常多人难以理解。
事实上仅仅有一句话:TCP连接是两个端点之间的事。因为TCP连接是可靠连接,所以无论是建立连接还是关闭连接,须要两个端点都要发送请求和收到确认
其次要理解TCP的通道是全双工的。是能够读和写数据的,理解这个之后就明确了为什么关闭连接时须要四次握手。
首先讲三次握手。建立连接时不涉及到读写通道,仅仅是两个端点的请求和确认。要记住是两个端点之间的,两个端点是平等的关系。
从client的角度来说,它仅仅须要发送一个请求syn,然后收到ack就能知道连接是能够建立的
从server端的角度。它也仅仅须要发送一个请求syn,然后收到ack就能知道连接是能够建立的
所以建立连接时最少仅仅须要三次握手就可以,即server端收到clientsyn,之后向client发送ack的同一时候携带上自己的syn。这样就仅仅须要三次握手就能使两方都发生syn和都收到ack.
当然你自己设计的时候也能够使用4次或者很多其它的握手,可是最少3次就可以

关闭连接时也还是两个端点都要发送请求和收到确认。可是关闭连接时涉及到两个端点的读写通道的事。
从client的角度来说,它发送一个关闭请求FIn,然后收到ack就知道能够关闭连接的
从server的角度来说。它发送一个关闭请求Fin,然后收到ack就知道能够关闭连接的
可是因为是读和写通道,所以server端在收到client的关闭Fin时,可能还在往client发送消息,所以仅仅能先发送ack确认client客户关闭写通道,这时候服务端不能使用通过一消息发送它的关闭Fin。仅仅能过会等它自己写完了,才干又一次发送一个关闭请求的Fin。
所以比建立连接时多了一次握手,关闭连接时最少须要4次握手。理解了为什么须要4次握手之后。就不难理解TCP半关闭的概念。
TCP三次握手和四次握手最直接的理解的更多相关文章
- TCP/IP协议三次握手与四次握手流程解析
原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...
- TCP/IP协议三次握手与四次握手流程解析(转载及总结)
原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详 ...
- TCP:三次握手、四次握手、backlog及其他
TCP是什么 首先看一下OSI七层模型: 然后数据从应用层发下来,会在每一层都加上头部信息进行封装,然后再发送到数据接收端,这个基本的流程中每个数据都会经过数据的封装和解封的过程,流程如下图所示: 在 ...
- TCP/IP协议三次握手与四次握手
TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式 上图中有几个 ...
- 抓包分析TCP的三次握手和四次握手
问题描写叙述: 在上一篇<怎样对Android设备进行抓包>中提到了,server的开发者须要我bug重现然后提供抓包给他们分析.所以抓好包自己也试着分析了一下.发现里面全是一些TCP协议 ...
- 三次握手、四次握手、backlog
TCP:三次握手.四次握手.backlog及其他 TCP是什么 首先看一下OSI七层模型: 然后数据从应用层发下来,会在每一层都加上头部信息进行封装,然后再发送到数据接收端,这个基本的流程中每个数 ...
- tcp三次握手和四次握手
建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...
- TCP/IP 三次握手和四次握手
三次握手建立连接: 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己 ...
- TCP/IP具体解释--三次握手和四次握手 Dos攻击
TCP连接的状态图 TCP建立连接的三次握手过程,以及关闭连接的四次握手过程 贴一个telnet建立连接,断开连接的使用wireshark捕获的packet截图. 1.建立连接协议(三次握手) (1) ...
- TCP/IP协议三次握手与四次握手流程解析(转)
一.TCP报文格式 下面是TCP报文格式图: 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标 ...
随机推荐
- 读书笔记-Java设计模式
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Java的封装性很好,拿访问控制符来讲,没有权限的类或方法是不能访问的.如public,都可访问:p ...
- 鸟哥的Linux私房菜-----16、程序与资源管理
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- TextView-shadow 阴影实现
直接上代码 1)实现普通效果 <TextView android:layout_width="match_parent" android:layout_height=&quo ...
- android studio执行 Information:Gradle tasks [:app:assembleDebug]失败处理
Error:Execution failed for task ‘:app:mergeDebugResources’. > Some file crunching failed, see log ...
- VC++ 6.0 BUG BUG BUG BUG BUG
http://blog.163.com/amao831@126/blog/#m=0 我经常在的VC++6.0中 定义某个类的对象时 再用.访问或者->访问时不自动弹出他的成员函数或者成员变量 最 ...
- 学习笔记:mpvue开发小程序——入门
接下来可能要开发一个小程序,同事推荐使用mpvue,那么我提前熟悉下. 官网地址:http://mpvue.com/ 1.快速上手 http://mpvue.com/mpvue/quickstart/ ...
- IOS蓝牙项目总结
常见的蓝牙标准有2.0和4.0. 特点 2.0 1.适用于数据量比较大得传输,比如音乐.语音2.IOS开发中,要求设备是经过MFI认证 4.0 1.适用于实时性比较高的数据传输,比如遥控类的鼠标. ...
- 10.10 android输入系统_APP获得并处理输入事件流程
APP对fd/InputChannel的注册过程: new WindowInputEventReceiver extends InputEventReceiver//InputEventReceive ...
- mysql快速入门 分类: B6_MYSQL 2015-04-28 14:31 284人阅读 评论(0) 收藏
debian方式: apt-get install mysql-server-5.5 mysql -u root -p redhat安装方式 一.下载并解压 $ wget http://cdn ...
- 【a101】高精度实数加法
Time Limit: 1 second Memory Limit: 2 MB 问题描述 给出两个高精度正实数(可以含有小数点或没有),最长200位,字符串读入 求它们的和,小数部分末尾的0要舍去. ...