TCP的一般工作过程 写在前面:一直以来,很多人对于TCP的工作过程感觉有点难理解,我刚开始接触TCP的时候,也有这种感觉。后来经过一段时间的分析后,逐渐对它有了一点的理解。现在,我就把我的理解注入到一个实例中进行分析! 1 简单介绍 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层通信协议。 面向连接:通信前要建立连接,通信后要拆除连接; 可靠的:它会后续的数据包状态进行跟踪; 字节流:以字节为最小单位的流服务; 2 工作过程 TCP分三个阶段 第一阶段:连接建立(三次握手) 第二阶段:数据传输 第三阶段:连接拆除(四次握手) 具体如何理解以上的三个阶段呢? 3 理解要点 1)编号:是对TCP要传输的数据部分中的字节时行编号,但第一个编号并不是标识第一个字节,而是在0-(2的32次方)之间产生的一个随机数作为第一个编号。 例如: data=5000,ISN=10000。则编号为10001--15000 2)Sequence Number:当前传输的数据中的第一个字节的编号 例如: data=5000,ISN=10000。则编号为10001--15000。但要分5个报文段进行传输,每个报文段传1000字节 seq为: 段1:seq=10001(10001-11000) 段2:seq=11001(11001-12000) 段3:seq=12001(12001-13000) 段4:seq=13001(13001-14000) 段5:seq=14001(14001-15000) 3)ACKn:下一次接收到的报文的第一个字节的编号。 作用:对上已接收到的报文进行确认,并且标识希望接收到的一下报文。 例如: A B 发:seq=10001(10001-11000) 发:ACKn=11001(11000+1希望发到下一个报文的编号从11001开始) 发:seq=11001(11001-12000) 4 实例分析(telnet) 1)简述telnet过程 telnet是基于TCP的23端口的,它的工作过程如下: 打开cmd 输入:telnet 172.16.1.1 //向服务器端发起telnet控制连接,触发TCP连接的建立 三次握手建立TCP连接 //不带任何数据 数据传输过程 //输入telnet的数据包 四次握手断开连接 //不带任何数据 抓到的包大概如下: //前面的3个包为TCP的三次握手过程(SYN置位表明为三次握手) //然后才开始数据的传输 //最后的四个包分为四次握手断开连接过程(FIN置位表明为四次握手) 2)数据包分析过程 //三次握手过程。 //双方都初始化一个序列号,此例中都为0,非0也可以的。 //第三包比较特殊,因为此包中只作确认中,既不带数据(前三个包都不带数据),也不带控制信息(FIN或SYN位为控制信息)。TCP中规定此类包不能占用Sep号。故它可以跟前一个包的序号或后个包的序号相同。 //第三个包也没有SYN置位,因为它只在初始化序号的包只才置位。 //而第二个包开始的包都有ACK置位,只有第一个包才不置位。 //此过程数据传输过程,只摘录前面几个包,后续包的规律也一样; //seq为本次发送的数据中的第一个字节的标号 //ACKn为希望下一次发送的数据中第一个字节的标号 //此处为四次握手断开连接过程 |
|