详解TCP三次握手

 实验环境

PC上打开抓包工具后使用telnet登陆1.1.1.1

TCP的报文里有一个编码字段,也有的教材叫标志字段,里面包含了如下6位

URG(Urgent):紧急位,为1时表示该数据包为紧急封包,要求高优先处理

ACK(Acknowledge):确认位,只有在第一个报文的时候才会为0

PSH(Push Function):急迫位,为1时表示直接推送给上层程序,例子:如果是telnet数据包,在读取TCP报文的时候,检测急迫位为1后不会再看后面的字段就直接交给应用层的telnet

RST(Reset):重置位,为1的时候表示重新建立TCP连接

SYN(Synchronous):同步位,为1时表示发送端希望双方建立同步连接

FIN(Finish):结束位,为1时表示结束传送,通知对方结束,但是还要等待对方回应

TCP报文格式,请注意:CISCO新版PPT的RESV是3bit,旧版是6bit,其他3位,cisco包含到了code bit字段里,分别是NS,CWR,ECE

TCP三次握手不仅仅是看能不能建立连接,里面还协商了一些参数如,Windows size窗口大小,最大段长度

TCP建立三次握手报文时假如发送者的Sequence number为x,则回复者的Acknowledge number=x+1

TCP数据传输时的发送者的Acknowledge number=接收者的Sequence number

TCP报文里的发送者的下一个序列号=接收者的确认号.

抓到的第一个报文,源是我PC,目标为R1,源端口随机生成,目标端口23是telnet,初始数据包的序列号随机生成,第一次握手,所以SYN同步位的灯亮着为1,由于文章的第一张图上传时丢失了,这个数据包是用工具生成的,所以会有一段”下一个序列号”,可以忽视它,

 

第二个源为R1,目标为PC,回复的第一个数据包的序列号随机生成,确认号为第一个数据包的序列号+1

标志字段里的ACK和SYN都亮着,为1,用来确定第一次的握手成功和再同步一次

抓到的第3个数据包,PC回应R1的数据包,确认号为上一个数据包的序列号+1,由于第3次握手只有一个ACK是用来确认,所以这里序列号没变,到此三次握手结束.

第4个数据包,这时候就正式开始发送telnet数据了,注意这里多了一个:下一个序列号,由于上一个数据包PC的回复的,所以这里的源始R1

序列号和确认号是由他们上个数据包确认后的,由于是telnet数据包,所以这里急迫位是为1的.

第5个数据包,源是PC,目标R1,上一个数据包的下一个序列号=这个数据包的确认号,上一个数据包的确认号=这个数据包的序列号,到此全部结束,4次断开以后再说.如有错误欢迎指正.

 

转载:残泪’s Blog Cisco H3C Juniper CCNA CCNP CCIE-关注互联网-关注网络安全

你可能感兴趣的:(tcp)