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半关闭的概念。
最新文章
- S1293和S2220KTV项目结束
- 以forin的方式遍历数组时进行删除操作的注意点
- mac os 基本命令
- linux网站目录及Apache权限的设置
- C语言中static变量详解
- Java线程同步_1
- CodeForces 7C Line
- 华为荣耀6PLUS 秒杀苹果
- js performance
- 控制寄存器 CR*
- 转载---SuperMap GIS 9D SP1学习视频播单
- Tomcat系列(4)——Tomcat 组件及架构详细部分
- Latex ";Error: File ended while scanning use of \@xdblarge";
- django中如何实现分页功能
- Error creating bean
- mysql下载和安装
- return在try...except...finally...中的表现
- Grafana 监控系统是否重启
- NGUI实现的一套不同大小 Item 的循环滚动代码
- Win7下npm命令Error: ENOENT问题解决
热门文章
- springMVC通过ajax传递参数list对象或传递数组对象到后台
- java 钩子方法
- Android 继承framelayout,实现ScrollView 和 HorizontalScrollView 的效果
- 学习笔记:Vue——组件和Prop
- Python 极简教程(十)集合 set
- COGS——C66. [HAOI2004模拟] 数列问题
- 三星Galaxy Tab S2上市,压制苹果之心凸显
- 每日技术总结:Yarn和Npm大PK
- (转)kvm虚拟机中,如何给子系统更换光盘
- POJ 2886 Who Gets the Most Candies?(线段树&;#183;约瑟夫环)