实验目的:

1、通过Wireshark抓取和分析TCP和Telnet分组。

2、掌握TCP和Telnet的工作原理。

实验拓扑:​

实验原理:

1、TCP简介:TCP< Transmission Control Protocol ,传输控制协议>,提供面向连接的可靠传输服务,属于OSI七层模型的传输层协议,是TCP/IP协议栈中非常重要的协议。常用的基于TCP的协议有HTTP、FTP、TELNET等。

2、Telnet简介:Telnet协议即远程登录协议,可以为网络管理员提供非常方便的网管服务。只需要在服务器或网络设备上开启Telnet服务,便可以在本地远程访问服务器或网络设备,实现远程网管。Telnet协议基于TCP协议,采用端口号23,并采用明文传输。本实验通过验证TCP的三次握手、可靠传输、四次挥手功能。

实验步骤:

1、通过GNS3搭建实验拓扑,采用其中R1模拟TELNET客户端,R2模拟TELNET服务端,将设备初始化,并开启接口配置IP地址,如下:

R1(config)#int f0/0

R1(config-if)#no shutdown

R1(config-if)#ip address 12.1.1.1 255.255.255.0

 

R2(config)#int f0/0

R2(config-if)#no shutdown

R2(config-if)#ip add 12.1.1.2 255.255.255.0

2、在R1和R2上开启wireshark抓包,并且在R2上部署TELNET服务,如下:

R2(config)#username ccna secret cisco

R2(config)#line vty 0 15

R2(config-line)#login local

3、在R1上远程登录R2,如下:

R1#telnet 12.1.1.2

Trying 12.1.1.2 ... Open

User Access Verification

 

Username: ccna

Password:

R2>

4、可以看到,此时R1已经登录进来R2了,在R2上输入一些命令,例如查看版本号并退出<此处是为了验证TELNET的明文传输和TCP的四次关闭>,如下:

R2>show version

Cisco IOS Software, 3600 Software (C3640-JK9O3S-M), Version 12.4(7a), RELEASE SOFTWARE (fc3)

Technical Support: http://www.cisco.com/techsupport

Copyright (c) 1986-2006 by Cisco Systems, Inc.

Compiled Mon 24-Apr-06 23:37 by ssearch

 

……中间部分省略……

Configuration register is 0x2102

R2> exit

[Connection to 12.1.1.2 closed by foreign host]

R1#

5、打开Wireshark,查看TCP和TELNET分组,如下:

 (1)以下分析TCP报文头部和三次握手原理,打开三次握手的第一个分组,如下:

以下列表对TCP头部的字段进行详细解读:

字段

解释

Source port

源端口,客户端端口随机生成

Destination port

目的端口,TELNET服务端端口为23

Sequence number

序列号,标识本地发送给通信接收方的第几个分组

Acknowledgment number

确认号,标识本地接收到第几个分组,可靠情况下,确认号等于序列号加上数据包长度

Header length

头部长度,标识TCP头部长度

Flags

标志位,标识数据包的状态

Window size value

窗口大小,用于实现滑动窗口

Checksum

校验和,标识此数据包是否完整或被修改

可以看到,三次握手的第一个分组, SYN位<同步位>打开,即表示客户端发起服务请求。打开三次握手的第二个TCP分组,如下:

可以看到,第二个分组中,确认位从0变成1,表示服务端接收服务请求。于此同时,由于通信是双向的,服务端也对客户端发起SYN同步请求,让其开启源端口,用于双向通信。打开三次握手的第三个TCP分组,如下:

可以看到,此时客户端也向服务端返回确认位。

(2)以下验证TCP的可靠传输功能和TELNET的明文传输机制,点击TELNET分组,直到有明文数据出现,如下:

此处可以看到,R1向R2发送字符,所以TELNET协议中有字符【c】出现,序列号为25,确认号为67,长度为1,再点击下面的分组,如下:

此处R2对R1上次的数据包进行确认,序列号为67,确认号为26,长度为1,再点击下面的分组,如下:

此处R1再次向R2发送,【c】字符,序列号为26,确认号为68,长度为1,再点击下面分组,如下:

R2再次对R1进行确认,序列号为68,序列号为27,长度为1,再点击下面分组,如下:

此时R1向R2发送字符【n】,序列号为27,确认号为69,长度为1,以此类推……我们可以看到,本次接收者的确认号每次都等于上次接收者的序列号加上数据包长度,即Ack(n)=Seq(n-1)+Len,此为可靠传输下的结果,若数据包丢弃,则Ack(n)<Seq(n-1)+Len,由此我们可以验证TCP的可靠更新机制。另外,整个过程中,TELNET远程登录的信息全部可以通过抓包查看,即便是密码!所以在网络安全要求比较高的情况下,建议采用SSH协议来代替TELNET协议。

(3)以下验证TCP的四次挥手过程,如下:

打开四次挥手的第一个分组=>

可以看到,此时R2向R1发送FIN结束位,告知对方可以关闭其服务端口。打开四次挥手的第二个分组=>

R1向R2发送ACK确认位,表示同意结束本服务端口。四次挥手的第三和第四个分组是相反的过程,则是R1告知R2可以关闭服务端口,R2同意关闭,此处不再抓包。通过TCP四次挥手,可以关闭会话连接,节省设备资源消耗。此实验完成。