网上有非常多文章讲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半关闭的概念。

最新文章

  1. S1293和S2220KTV项目结束
  2. 以forin的方式遍历数组时进行删除操作的注意点
  3. mac os 基本命令
  4. linux网站目录及Apache权限的设置
  5. C语言中static变量详解
  6. Java线程同步_1
  7. CodeForces 7C Line
  8. 华为荣耀6PLUS 秒杀苹果
  9. js performance
  10. 控制寄存器 CR*
  11. 转载---SuperMap GIS 9D SP1学习视频播单
  12. Tomcat系列(4)——Tomcat 组件及架构详细部分
  13. Latex "Error: File ended while scanning use of \@xdblarge"
  14. django中如何实现分页功能
  15. Error creating bean
  16. mysql下载和安装
  17. return在try...except...finally...中的表现
  18. Grafana 监控系统是否重启
  19. NGUI实现的一套不同大小 Item 的循环滚动代码
  20. Win7下npm命令Error: ENOENT问题解决

热门文章

  1. springMVC通过ajax传递参数list对象或传递数组对象到后台
  2. java 钩子方法
  3. Android 继承framelayout,实现ScrollView 和 HorizontalScrollView 的效果
  4. 学习笔记:Vue——组件和Prop
  5. Python 极简教程(十)集合 set
  6. COGS——C66. [HAOI2004模拟] 数列问题
  7. 三星Galaxy Tab S2上市,压制苹果之心凸显
  8. 每日技术总结:Yarn和Npm大PK
  9. (转)kvm虚拟机中,如何给子系统更换光盘
  10. POJ 2886 Who Gets the Most Candies?(线段树·约瑟夫环)