《tcp三次握手建立连接过程》由会员分享,可在线阅读,更多相关《tcp三次握手建立连接过程(4页珍藏版)》请在金锄头文库上搜索。
1、TCP协议三次握手过程分析TCP(TransmissionControlProtocol)传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机)ACK(acknowledgement确认)PSH(push传送)FIN(finish结束)RST(reset重置)URG(urgent紧急)Sequeneenumber(顺序号码)Acknowledgenumber(确认号码)霁ml3*1SendACKAC-K=*IfirarwACK第一次握手:主机A发送位码为syn=1,随机产生seq
2、number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;第二次握手:主机B收到请求后要确认联机信息,向A发送acknumber=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包第三次握手:主机A收到后检查acknumber是否正确,即第一次发送的seqnumber+1,以及位码ack是否为1,若正确,主机A会再发送acknumber=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。完成三次握手,主机A与主机B开始传送数据。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一
3、个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.实例:IP192.168.1.116.3337192.168.1.123.7788:S362654483
4、6:3626544836IP192.168.1.123.7788192.168.1.116.3337:S1739326486:1739326486ack3626544837IP192.168.1.116.3337192.168.1.123.7788:ack1739326487,ack1第一次握手:192.168.1.116发送位码syn=1,随机产生seqnumber=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.1
5、16发送acknumber=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;第三次握手:192.168.1.116收到后检查acknumber是否正确,即第一次发送的seqnumber+1,以及位码ack是否为1,若正确,192.168.1.116会再发送acknumber=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。实例2(sniffer截获的TCP包):L!FF45kUVVV.L1丁1Vla-152169.1.5-1.giiet.116ih2lSl.Z19645Bfl7132L&
6、9111G2E.lbE.22192L691.sshuy.guet.112_L69_i_.L芋上Itd1.5-zh-sy.ue-t.1IG9KbTguetszhwygmet-&di.i152tifi01.cptpCFcpfTTrJdL-d日TJ-&55G50&r?rNiivkwkv&ru=iwrn!jahbcrl_risaV-vJU.1_D-80E-21.15SNSEt!=2U162710IEH*=aFIJi=6Eb35AzCi诃5北41_兀怡4必签D-ZDEOS5-2D4J9ACEi-Z&J54.Gft06?MIH-L74?D-200055-17E17ACKk776E.32243WIM-lG4
7、d9C-21J5S-30S1!UiCK-21316271iE-i77769LE-D-flDS-2LJ5ACK-95=4767TTOBlWSErSs匚Fort-IliSGETfFTTF/1.,D=苗応匚“沁-Cl心1?:畀4話77|T=3:如第一行,为第一步握手,主机(192.168.1.5)发送一个SYN为1的请求包,在这个时候会随机的生成一个SEQ(213162710)的序号,并等待远程主机(SZHXY.GUET.EDU.CN)回应;之后如第五行(阴影部分),远程主机(SZHXY.GUET.EDU.CN)收到SYN为1的请求包后,表示同意请求(既然是请求那么SYN必为1),那么就发送一个AC
8、K=SEQ+1(213162711)的包,表示已经收到(192.168.1.5)的包,希望它发送下一个包,也就是SEQ+1的意思,同时自己也产生一个随机的序号seq(994767769为了区分上个SEQ故用小写表示,注意这个是远程主机产生的,与192.168.1.5没有关系),回应给(192.168.1.5);最后,也就是第三次握手,192.168.1.5最后发一个包,这个包主要是确定远程主机(SZHXY.GUET.EDU.CN)发的第一个包已经收到,所以SYN=0,ACK=seq+1(994767770),如第六行。到此三步握手完毕,为什么要产生SEQ呢?这也就是三步之后要做的事情,怎么说呢,TCP包是运输数据的,数据有长又短,数据超过了一个包所能运输的时候就要分几次运输,众所周知网络存在着延迟,原本按理说应该按顺序到达这样方便组织,打个比方,一个卡车运一批货物,但是这批货物太多,运不完要3架车来运,人们都会认为现到目的地的是先开的,但是由于公路机某些意外,第一架车在后面了,人们就无法知道谁第一个开车的,这时候就需要在车厢标号,如1,2,3;这样不管发生什么状况都能分辨出来了,序号的作用也如此。当然,这只是简单的模式,复杂的还要涉及数据包分片和偏移。