TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程: 
1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。 
2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。 
3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。 
TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收

TCP Client
Flags
TCP Server
1 Send SYN (seq=x)
----SYN--->
SYN Received
2 SYN/ACK Received
<---SYN/ACK----
Send SYN (seq=y), ACK (x+1)
3 Send ACK (y+1)
----ACK--->
ACK Received, Connection Established
w: ISN (Initial Sequence Number) of the Client
x: ISN of the Server
  • TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。

如果采用两次的话,会出现下面这种情况。 
比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机; 
于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。 
传完东西后,断开。

结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。

  • 三次握手改成仅需要两次握手,死锁是可能发生

考虑计算机A和B之间的通信,假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑A是否收到自己的连接请求分组。在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。而A在发出的分组超时后,重复发送同样的分组。这样就形成了死锁

http://blog.csdn.net/w616589292/article/details/50956158

最新文章

  1. iOS 关于PCH文件(全局文件)的介绍
  2. SQLite学习笔记(九)&amp;&amp;pager模块
  3. JMeter学习(二)录制脚本
  4. ArcGIS实现在线与线交叉处打断线(批量)
  5. Linux是如何管理内存的
  6. 【玩转Ubuntu】02. Ubuntu上搭建Android开发环境
  7. the least common multiplier
  8. UVa 353 - Pesky Palindromes
  9. Lambda&amp;Java多核编程-5-函数式接口与function包
  10. Mongodb启动&amp;关闭
  11. 数据结构与算法(C/C++版)【串】
  12. [Educational Codeforces Round#22]
  13. Java类的继承与方法调用的一个小问题
  14. Wordpress 后台更改网址
  15. 机器学习中的规则化范数(L0, L1, L2, 核范数)
  16. linux free 理解
  17. canvas基础一
  18. wap尝试调取app(网易新闻为例)
  19. js toSting方法实现
  20. C++复习11.函数的高级特性

热门文章

  1. Spring常用工具类(ApplicationContextAware、DisposableBean、InitializingBean)
  2. js 鼠标坐标
  3. js课程 1-2 js概念
  4. 【u213&&t037】修剪花卉
  5. js如何实现页面跳转(大全)
  6. HashTable 解决碰撞(冲突)的方法 —— 分离链接法(separate chaining)
  7. JavaScript调用ATL COM(二)
  8. 【u119】中位数
  9. ScrollView嵌套ListView问题
  10. ORACLE中死锁