TCP三次握手与四次挥手

原创 2013年12月04日 15:25:10
本文主要讲述的是
1、面试官在问到TCP/IP三次握手原理,以及为什么要三次握手,两次握手带来的不利后果。
2、面试官问TCP/IP四次挥手原理,为什么要四次挥手。

TCP/IP三次握手原理:

首先,给张图片,建立TCP/IP三次握手的直观印象。
                                   

每次握手(发送数据请求或应答)时,发送的数据为TCP报文,TCP段包含了源/目的地址,端口号,初始序号,滑动窗口大小,窗口 扩大因子,最大报文段长度等。还有一些标志位:

(1)SYN:同步序号
(2)ACK:应答回复
(3)RST:复位连接,消除旧有的同步序号
(4)PSH:尽可能的将数据送往接收进程
(5)FIN:发送方完成数据发送
(6)URG
从图中,可以看出三次握手的基本步骤是:
第一次握手:客户端向服务器端发送连接请求包SYN(syn=j),等待服务器回应;
第二次握手:服务器端收到客户端连接请求包SYN(syn=j)后,将客户端的请求包SYN(syn=j)放入到自己的未连接队列,此时服务器需要发送两个包给客户端;
  (1)向客户端发送确认自己收到其连接请求的确认包ACK(ack=j+1),向客户端表明已知道了其连接请求
  (2)向客户端发送连接询问请求包SYN(syn=k),询问客户端是否已经准备好建立连接,进行数据通信;
  即在第二次握手时服务器向客户端发送ACK(ack=j+1)和SYN(syn=k)包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的ACK(ack=j+1)和SYN(syn=k)包后,知道了服务器同意建立连接,此时需要发送连接已建立的消息给服务器;
  向服务器发送连接建立的确认包ACK(ack=k+1),回应服务器的SYN(syn=k)告诉服务器,我们之间已经建立了连接,可以进行数据通信。
  ACK(ack=k+1)包发送完毕,服务器收到后,此时服务器与客户端进入ESTABLISHED状态,开始进行数据传送。 

为什么不能只两次握手?

有了三次握手的详细步骤,就可以分析为什么需要三次握手而不是两次握手了。
三次握手的目的:消除旧有连接请求的SYN消息对新连接的干扰,同步连接双方的序列号和确认号并交换TCP 窗口大小信息。
设想:如果只有两次握手,那么第二次握手后服务器只向客户端发送ACK包,此时客户端与服务器端建立连接。在这种握手规则下: 
假设:如果发送网络阻塞,由于TCP/IP协议定时重传机制,B向A发送了两次SYN请求,分别是x1和x2,且因为阻塞原因,导致x1连接请求和x2连接请求的TCP窗口大小和数据报文长度不一致,如果最终x1达到A,x2丢失,此时A同B建立了x1的连接,这个时候,因为AB已经连接,B无法知道是请求x1还是请求x2同B连接,如果B默认是最近的请求x2同A建立了连接,此时B开始向A发送数据,数据报文长度为x2定义的长度,窗口大小为x2定义的大小,而A建立的连接是x1,其数据包长度大小为x1,TCP窗口大小为x1定义,这就会导致A处理数据时出错。
很显然,如果A接收到B的请求后,A向B发送SYN请求y3(y3的窗口大小和数据报长度等信息为x1所定义),确认了连接建立的窗口大小和数据报长度为x1所定义,A再次确认回答建立x1连接,然后开始相互传送数据,那么就不会导致数据处理出错了。

TCP/IP释放连接需四次挥手

先看图,直观的了解下:
                                 
需四次挥手原因:由于TCP的半关闭特性,TCP连接时双全工(即数据在两个方向上能同时传递),因此,每个方向必须单独的进行关闭。这个原则就是:当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向上的连接。当一端收到一个FIN后,它必须通知应用层另一端已经终止了那个方向的数据传送。即收到一个FIN意味着在这一方向上没有数据流动了。
目的:保证服务器与客户端都能完全的接受对方发送的数据。
假设客户机A向服务器B请求释放TCP/IP连接,则:
第一次挥手:主机A向主机B发送FIN包;A告诉B,我(A)发送给你(B)的数据大小是N,我发送完毕,请求断开A->B的连接。
第二次挥手:主机B收到了A发送的FIN包,并向主机A发送ACK包;B回答A,是的,我总共收到了你发给我N大小的数据,A->B的连接关闭。
第三次挥手:主机B向主机A发送FIN包;B告诉A,我(B)发送给你(A)的数据大小是M,我发送完毕,请求断开B->A的连接。
第四次挥手:主机A收到了B发送的FIN包,并向主机B发送ACK包;A回答B,是的,我收到了你发送给我的M大小的数据,B->A的连接关闭。

参考:1、http://linux.chinaunix.net/techdoc/net/2009/06/15/1118762.shtml

   2、http://zhmy.michael.blog.163.com/blog/static/8615787920111030115535226/

          3、http://blog.csdn.net/dotnetpig/article/details/6776999

          4、http://www.cnblogs.com/obama/p/3292335.html

TCP三次握手-四次挥手详解.doc

  • 2013年03月28日 20:10
  • 92KB
  • 下载

TCP三次握手,四次挥手的过程

  • 2015年09月29日 22:12
  • 69KB
  • 下载

TCP--三次握手四次挥手

假设现在有主机A运行的是TCP客户程序,主机B运行的是TCP服务器程序,最初两台机器都是关闭状态,现在主机A主动打开,而主机B被动打开,如图: 这里就不详细讲述其具体过程,只研究其为什么是三次握...

TCP三次握手四次挥手详解

  • 2011年12月30日 17:03
  • 119KB
  • 下载

TCP连接的建立(三次握手)和释放(四次挥手)

所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。   三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和...

TCP的三次握手(建立连接)和四次挥手(关闭连接)

参照: http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF http://hi.baidu.com/raycomer/item/...

Tcp三次握手以及四次挥手,简短版(图文)

建立TCP需要三次握手才能建立。整个过程如下图所示: TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接...
  • nmgzywd
  • nmgzywd
  • 2014年12月29日 10:46
  • 272

TCP 三次握手建立连接,四次挥手断开连接,图解详细分析

继文章  http://blog.csdn.net/simonchi/article/details/41722511   之后,我觉得有必要来详细的说一下TCP的三次握手和四次挥手的过程,帮助大家理...

C++菜鳥的成長之路(4)——TCP三次握手、四次揮手

Yo Guys!老狗我又來了!今天想給大家介紹的是一位浪漫的詩人——TCP。說他是一位浪漫的詩人,並不是沒有道理的。徐志摩的《再別康橋》中寫到:“我輕輕的走了,正如我輕輕的來,我輕輕的揮手,作別西天的...

TCP通信----三次握手与四次挥手状态转换

一、TCP与TCP报文格式:首先让我们或了解或巩固一下TCP协议的基本概念。1、TCP协议:TCP即传输控制协议(Transmission Control Protocol),是面向连接的运输层协议,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP三次握手与四次挥手
举报原因:
原因补充:

(最多只允许输入30个字)