Arp报文分析:
Arp 报文格式:三层:Frame、Ethernet、Address Resolution Protocol 协议类型:IP 先在DOC命令窗口下:ping 10.16.134.66
网关的ARP:
Arp请求:
Arp应答:
目的主机:
Arp请求:
Arp响应:
分析:
当主机10.16.134.62向主机10.16.134.66发送时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。
如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到目标IP地址,主机A就会在网络上发送一个广播,此时,主机A发送的帧包含:sender MAC address( 本机的MAC地址),sender IP address(本机IP地址),目标主机B的target MAC address(全部为空)target IP address(目标主机的IP地址)。
这表示向同一网段内的所有主机发出这样的询问:“我是10.16.134.62,我的MAC是"c8:3a:35:d3:cf:41".请问IP地址为10.16.134.66的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“10.16.134.66的MAC地址是c8:3a:35:d3:77:1d”。
这样,主机A就知道了主机B的MAC 地址,它就可以向主机B发送信息了。
同时A和B还同时都更新了自己的ARP缓存表(因为A在询问的时候把自己的IP和MAC地址一起告诉了B),下次A再向主机B或者B向A发送信息时,直接从各自的ARP缓存表里查找就可以了。
ARP缓存表采用了老化机制(即设置了生存时间TTL),在一段时间内(一般15到20分钟)如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
(注:此时arp缓存表中已经删除了10.16.134.66 的MAC 地址)
TCP报文分析:
TCP三次握手:
分析:第一次握手,客户端端口:4831,服务器端口:21 [SYN ] seq=0,len=0,说明客户端向服务器发出连接请求,表明传送数据时,第一个数据字节序号为0,窗口大小为8192(Win=8192)窗口个数为2(WS=2)
第二次握手,服务器端口:21 客户端口:4831 [SYN ACK] Ack=1 seq:0说明服务器同意连接请求,发送确认,窗口大小为16384(window size:16384) ,自己选择的序号为0
第三次握手:客户端端口:4831 服务器端口:21 [ACK] seq:1 Ack:1 说明客户端收到此报文后向服务器发出确认,连接建立成功。
Source port:ftp Ack:1服务器端收到确认后也通知FTP层的应用进程,连接已经成功建立。
数据连接的建立:
分析:服务器(59.77.139.88)使用20端口向客户端(10.12.10.57)的4837端口发送连接请求,建立一条数据连接来传送数据(主动模式)
分析:客户端(10.12.10.57)随机产生两个端口4841和9081,客户端首先使用和主动连接模式相同的方法和服务器建立命令连接。
当需要传送数据时,客户端(10.12.10.57)随机产生两个端口4841和9081,通过命令连接告诉服务器(使用PASV命令,就是在数据连接之前,客户端会向服务器端先发送一个PASV的请求命令)“我要连接您的9081端口,请问是否空闲”,假如恰好该端口空闲,服务器会告诉客户端(报文捕获如下)
能够建立连接(ACK:1),此时数据的连接建立(被动模式)。
数据连接:
分析:由服务器端通过20端口向客户端发送数据连接请求。
客户端同意连接请求ACK:1,此时数据连接成功
以下是下载数据时数据连接的释放过程:
(注:上传数据时,是由客户端先提出释放申请)
TCP四次挥手:
分析:第一次挥手Port(主动模式),客户端端口:2565 服务器端口:21(控制连接)[FIN,ACK] seq:38,Ack:130(捎带确认,表示前面的已经正确接收)说明客户端发送释放连接请求,等待服务器的确认。
第二次挥手Port(主动模式),服务器端口:21 客户端口:2565 [ACK] Ack:39 (即:Ack=seq+1) seq=130(这个报文自己的序号) TCP服务器进程通知高层应用进程,此时,客户端到服务器的连接断开,TCP连接出于半断开的状态,服务器发送的数据,客户端仍然接收。
第三次挥手Port(主动模式),服务器端口:21 客户端口:2565 [FIN ACK] ACK:39 seq:130 说明服务器已经没有要发送的数据了,通知客户端释放连接。
第四次挥手Port(主动模式),客户端口:2565 服务器端口:21 [ACK] ACK:131(即:ACK=SEQ+1) 说明客户端同意释放连接。
此时完成连接的释放过程。
HTTP报文分析:
Tcp 的三次握手(前面已经描述它的工作原理了),和FTP不同的是HTTP服务器的端口号为:80(下面是Http的报文)
第一次握手,数据报文结构(4层:Frame、Ethernet、Transmission Control Protocol),协议为:TCP
第二次握手
第三次握手:
通知上层(HTTP)连接建立成功:
数据报文结构(5层:Frame、Ethernet、Transmission Control Protocol、Hypertext Transfer Protocol),协议为:HTTP (该层用到了传输层的TCP协议)
以下是应用层对传输层创建的端口的使用:
Http的四次挥手(工作原理和FTP的类似):
ICMP报文分析:
我在10.16.134.63主机的DOC命令窗口下,ping –l 4000 10.16.134.62 ,然后在10.16.134.62捕获到如下报文(选择ID相同的分片进行重组):
分片1:数据部分1480 bytes, 帧长为1500(数据部分+20字节的头部)Fragment offxet:0,即片偏移为0,Flag:1,说明下面还有分片。
分片2:数据部分1480 bytes, 帧长为1500(数据部分+20字节的头部)Fragment offxet:1480,即片偏移为1480,Flag:1,说明下面还有分片。
11 /
11
分片3:数据部分1048 bytes, 帧长为1068(数据部分+20字节的头部) Fragment offxet:2960,即片偏移为2960,Flag :0,说明这是最后一个分片。
验证:Data(4000 bytes)=2960+1048-8=4000(bytes)
总结: 协议是工作在应用层的,TCP 协议工作在传输层,的控制连接和数据的传送都是通过TCP 建立连接的端口号进行传送的。
通过这次的报文捕捉,彻底的证明了,传输层为应用层提供服务的。