一、实验目的:
1、通过wireshark进行TCP报文抓包,分析TCP连接的三次握手以及关闭TCP
2、利用wireshark分析ICMP报文
3、利用ping测试网络联通性:1)ping 本机回环地址
2)ping本机ip地址
3)ping 网关ip
4)ping 远程ip
通过这几项可以检查网络是不是通的,以及如果不通,网络的问题出在哪熟悉ping的参数的使用;
4、traceroute测试,同理(3)
二、实验原理
1、TCP握手协议
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV 状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
还要再发送一次确认是为了,防止已失效的连接请求报文段突然又传到了B,因而产生错误。
已失效的报文段:正常情况下:A发出连接请求,但因为丢失了,故而不能收到B的确认。
于是A重新发出请求,然后收到确认,建立连接,数据传输完毕后,释放连接,A发了2个,一个丢掉,一个到达,没有“已失效的报文段”
但是,某种情况下,A的第一个在某个节点滞留了,延误到达,本来这是一个早已失效的报文段,但是在A发送第二个,并且得到B的回应,建立了连接以后,这个报文段竟然到达了,于是B就认为,A又发送了一个新的请求,于是发送确认报文段,同意建立连接,假若没有三次的握手,那么这个连接就建立起来了(有一个请求和一个回应),此时,A收到B的确认,但A知道自己并没有发送建立连接的请求,因为不会理睬B的这个确认,于是呢,A也不会发送任何数据,而B呢却以为新的连接建立了起来,一直等待A发送数据给自己,此时B 的资源就被白白浪费了。
但是采用三次握手的话,A就不发送确认,那么B由于收不到确认,也就知道并没有要求建立连接。
三、实验过程
1、TCP连接
Seq=1,ack=3136
Seq=3136,ack=209
Seq=209,ack=6056
2、关闭TCP
B收到连接释放报文段后就立即发送确认,然后就进入close-wait状态,此时TCP 服务器进程就通知高层应用进程,因而从A到B的连接就释放了。
此时是“半关闭”状态。
即A不可以发送给B,但是B可以发送给A。
此时,若B没有数据报要发送给A了,其应用进程就通知TCP释放连接,然后发送给A连接释放报文段,并等待确认。
A发送确认后,进入time-wait,注意,此时TCP连接还没有释放掉,然后经过时间等待计时器设置的2MSL后,A才进入到close状态。
为什么要等待呢?
①、为了保证A发送的最后一个ACK报文段能够到达B。
即最后这个确认报文段很有可能丢失,那么B会超时重传,然后A再一次确认,同时启动2MSL计时器,如此下去。
如果没有等待时间,发送完确认报文段就立即释放连接的话,B就无法重传了(连接已被释放,任何数据都不能出传了),因而也就收不到确认,就无法按照步骤进入CLOSE状态,即必须收到确认才能close。
②、防止“已失效的连接请求报文段”出现在连接中。
经过2MSL,那些在这个连接持续的时间内,产生的所有报文段就可以都从网络中消失。
即在这个连接释放的过程中会有一些无效的报文段滞留在楼阁结点,但是呢,经过2MSL这些无效报文段就肯定可以发送到目的地,不会滞留在网络中。
这样的话,在下一个连接中就不会出现上一个连接遗留下来的请求报文段了。
可以看出:B结束TCP连接的时间比A早一点,因为B收到确认就断开连接了,
而A还得等待2MSL.
如图四个黑体数据是TCP断开链路的情况
(1)如图可见源地址61.135.169.105向目的地址49.123.81.137发送数据,seq=20520。
(2)目的地址49.123.81.137向源地址61.135.169.105回复,seq=1067,ack=19080.
(3)目的地址49.123.81.137向源地址61.135.169.105再次发送回复,seq=1067,ack=19080.
(4)源地址61.135.169.105向目的地址49.123.81.137发送数据,seq=19080。
3、ICMP 报文分析
ICMP 报文分析
(一)报文格式
(1)请求应答报文对
请求与应答报文对可分为回应请求与应答报文、路由器请求与通告报文、时间戳请求与应答报文和地址掩码请求与应答报文。
下图为一组回应请求与应答报文:
请求报文:
类型为8,表示回应请求报文,传递的ping命令通常用于测试信宿的可到达性。
应答报文:
类型为0,表示回应应答报文。
比较这组报文对,其标识符和序列号是一样的,且数据部分也是一样的
(2)差错报告
1.下图为一个UDP数据报错误引发的信宿不可达报告:
报告类型为3,代码为3,说明产生信宿不可达报文的原因可能是端口不可达。
在ICMP报文的数据部分封装了出错数据报的部分信息。
本例中封装了出错的IP数据报首部和该IP数据报封装的UDP首部和一部分数据段产生信宿不可达报文的原因还有可能是网络不可达、主机不可达和协议不可达等。
其代码分别为0、1、2。
如下图是主机不可达:
下图为一个ICMP请求超时引发的数据报超时报告:
报告类型为11,代码为0,说明是路由器TTL超时。
该报文由路由器222.95.16.1产生,并且路由器丢弃了引起出错的报文,因为该报文的TTL为1。
1、ping测试网络联通性
(1)使用Ping检查连通性有六个步骤:
1. 使用ipconfig /all观察本地网络设置是否正确;
2. Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好;
3. Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;
4. Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;
5.Ping本地DNS地址,这样做是为了检查DNS是否能够将IP地址解析。
6.Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。
正常情况下,当你使用Ping命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些Ping命令出现运行故障,它也可以指明到何处去查找问题。
从上面可以看出:127.0.0.1就是本地的循环地址,从上面可以看的出,pc机一连发了四个ICMP回送请求报文,并且得到了这个回送回答报文,其中Minimum=0ms以及最大及平均均为0ms,这说明是能够ping的通的,说明TCP/IP 协议是工作正常的,否则TCP/IP就不正常,需要重新设置TCP/IP协议
(2)
,从上面可以看的出,pc机一连发了四个ICMP回送请求报文,并且得到了这个回送回答报文,其中Minimum=96ms以及最大及平均均为165ms,这说明是能够ping的通的,说明TCP/IP协议是工作正常的,否则TCP/IP就不正常,需要重新设置TCP/IP协议
(3) ping命令来判断一条链路的好坏
如在运行窗口中输入:ping 后回车,显示数字"bytes=32"表示ICMP报文中有32个字节的测试数据,"time=4ms"是往返时间。
Sent 发送多个秒包、Received 收到多个回应包、Lost 丢弃了多少个Minmum 最小值、MAXimun 最大值、Average 平均值。
所在图上来看,来回只用了4MS 时间,lost =0 即是丢包数为0,网络状态相当良好。
如图,任意输入一个IP地址
当任意输入一个IP地址,这地址不存在,但是发送数据包时,由于连接不了链路,于是就返回“请求超时”,四个数据包都丢失
4、traceroute测试(1)本地回环
(2)本机IP地址
(3)远程IP
该诊断实用程序通过向目的地发送具有不同生存时间(TL) 的Internet 控制信息协议(CMP)回应报文,以确定至目的地的路由。
路径上的每个路由器都要在转发该ICMP 回应报文之前将其TTL 值至少减1,因此TTL是有效的跳转计数。
当报文的TTL 值减少到0 时,路由器向源系统发回ICMP 超时信息。
通过发送TTL 为1的第一个回应报文并且在随后的发送中每次将TTL 值加1,直到目标响应或达到最大TTL 值,Tracert
可以确定路由。
通过检查中间路由器发发回的ICMP 超时(ime Exceeded)
信息,可以确定路由器。
注意,有些路由器“安静”地丢弃生存时间(TLS) 过期的报文并且对tracert 无效。