我们众元教育的老师上课的时候会仔细讲一些ARP和TCP建立连接的过程,这个是最常用的,所以特意做了一些整理,还有实验相关的,方便大家复习~
ARP工作原理
地址解析协议ARP主要是用来将已知的IP地址解析为MAC地址协议。
就是我知道你的IP地址,但是我不知道你的MAC地址时,可以用这个协议知道MAC地址,就像我们点给别人买东西只知道收件人电话,不知道收货地址一样。
ARP工作如图所示:
由上图所示,HostA知道HostB的IP地址,但不知道其对应MAC地址,工作过程如下:
(1) 网络设备一般都一个ARP缓存,用来存放IP地址与对应MAC地址的映射关系。在发送数据之前,主机HostA会先查找自己的ARP缓存表,查看是否存在HostB的ARP表项,发现不存在。
(2) 于是HostA广播发送ARP请求报文,该网络中所有主机包括网关都会收到此报文。
其发送的ARP数据包格式如下所示:
Hardware Type表示硬件地址类型,一般为以太网;
Protocol Type表示三层协议地址类型,一般为IP;
Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节;
Operation Code指定了ARP报文的类型,包括ARP Request和ARP Reply;
Source Hardware Address指的是发送ARP报文的设备MAC地址;
Source Protocol Address指的是发送ARP报文的设备IP地址;
Destination Hardware Address指的是接收者MAC地址,在ARP Request报文中,该字段值为0;
Destination Protocol Address指的是接收者的IP地址。
(3)其发送的ARP Request包会封装在以太帧里,以太帧的帧头源MAC地址为HostA的MAC地址,因为不知道主机HostB的地址,所以以太帧的目标MAC地址是广播地址FF-FF-FF-FF-FF-FF。
(4)ARP Request包里面也有发送端的MAC地址、IP地址和目标端的MAC地址、IP地址,因为发送ARP Request包时是不知道目标端MAC地址的所以ARP Request包里面的目标MAC地址为0,ARP报文类型为Request。
(5)网络中所有主机收到ARP Request报文后,会检查报文里面的目的端IP地址是不是自己,不是则抛弃报文不响应。是自己则将报文中的发送端MAC地址和IP地址记录到自己的ARP缓存表里面,然后单播发送ARP Reply报文给HostA。
(6)ARP Reply报文里面发送端IP地址和MAC地址都是自己的,接收端IP地址和MAC地址都是HostA的,ARP报文类型为Reply。
(7)主机HostA收到主机HostB的ARP Reply包,会检查主机IP地址与MAC地址是否与报文的目的端是一样的,不一样则抛弃,用于则会记录发送端的MAC地址和IP地址。
(2)于是双方都有的相应的IP地址与MAC地址映射,可以直接通信。
验证:
设备1 IP地址:192.168.1.19 MAC:vivoXXXXX
设备2 IP地址:192.1681.29 MAC:30:XXXXXXX
(1)在设备上使用ping命令测试使用Wireshark抓包软件对ARP数据包进行数据抓包,ARP Request包发送如图所示:
(2)由方框可知,在数据帧头部中,源MAC地址是设备的MAC地址,目标MAC地址是广播地址FF-FF-FF-FF-FF-FF。由圆框可知,在ARP报文中发送端IP地址和MAC地址都是PC1的,目标MAC值为0,目标IP地址为192.168.1.29.
(3)ARP Reply数据包回应如图所示:
由方框可知,在数据帧头部,源MAC地址为设备2和目标MAC地址为设备1;
由圆框可知,在ARP Repla包中,发送端IP地址和MAC地址都为设备2,接收端IP地址和目标地址都为设备1.可知发送ARP Reply包是单播的。
(4)验证成功。
TCP工作原理
TCP是一种面向连接的端到端协议。是可靠的,也就是说在传输过程中,会检查数据包是否正确完整的发送给目标主机,若没有会进行重传等一些操作。
TCP头部是封装在IP数据包里面的,具体内容如图所示:
这里解释一些常用的一些字段:
源端口号:源主机的应用程序使用的端口号。
目的端口号:目的主机的应用程序使用的端口号
序列号:用于标识从发送端发出的不同的TCP数据段的序号。数据段在网络中传输时,它们的顺序可能会发生变化;接收端依据此序列号,便可按照正确的顺序重组数据。
确认序列号seq:用于标识接收端确认收到的数据段。确认序列号为成功收到的数据序列号加1。
头部长度:表示头部占32bit字的数目,它能表达的TCP头部最大长度为60字节。
标志位:
URG(紧急): 为1时表明紧急指针字段有效。
ACK(确认):为1时表明确认号字段有效。
PSH(推送):为1时接收方应尽快将这个报文段交给应用层。
RST(复位):为1时表明TCP连接出现故障必须重建连接。
SYN(同步):在连接建立时用来同步序号。
FIN (终止): 为1时表明发送端数据发送完毕要求释放连接。
校验和:校验整个TCP报文段,包括TCP头部和TCP数据。该值由发送端计算和记录并由接收端进行验证。
在TCP需要与对方建立连接时,有3个步骤(3次握手),如图:
由上图可知,TCP建立连接的三个步骤为:
(1) 第一步,主机A向服务器发送同步序号SYN=1,且生成seq=a(a的值是随机的)请求建立连接,简称第一次握手;
(2) 第二步,服务器A收到主机A的SYN=1,了解到主机A的连接请求,回复ACK number=a+1,SYN=1,ACK=1,并seq=b(b的值是随机生成的),简称第二次握手;
(3) 第三步,主机A收到后检查ACK是否正确,也就是说seq的值是否为a+1,ACK是否为1,若是正确的,主机A发送ACK number=b+1,seq=a+1,ACK=1,表明确认建立连接,简称第三次握手。
这样讲的话就比较书面话,下面就是我们的老师叫我用抓包的方法去验证这个过程的.从本地主机访问百度的TCP握手,如下图所示:
由上图方框可知,
第一步,本地192.168.1.19给目标112.80.248.76发送SYN=1,其seq=1021…96
第二步,目标主机向本地主机回复了SYN=1,ACK=1,其seq=10…66,ack=1021…97(上一次的seq+1)。
第三步,本地主机给目标主机发送ACK=1,seq=1021…97(第一次发送的seq+1),ack=10…67(上一次seq+1),建立连接。
在TCP需要与对方释放连接时,有四个步骤(4次挥手),如图:
由上图可知,TCP释放连接的四个步骤为:
(1) 第一步,主机A进程发出连接释放报文,并通知发送数据,发送终止符FIN=1,seq=a(等于前面等于前面已经传送过来的数据的最后一个字节的序号加1),ack=b
(2) 第二步,服务器A收到释放报文,发出确认报文ACK=1,ack =a+1,seq=b(b为自己的序列号)。
(3) 第三步,服务器A将最后的数据发送完毕后,向主机A发送连接释放报文,FIN=1,ACK=a+1,seq=b
(4) 第四步,主机A收到服务器A的连接释放报文后,发出确认,ACK=1,ack=b+1,双方释放连接成功。
四次挥手也抓个包验证一下,访问本地FTP服务器过程,断开连接信息如图:
由上图方框可知,
第一步,本地192.168.1.19给目标192.1681.24发送FIN=1,ACK=1,其seq=96XX45,ack=11XX51.
第二步,目标主机向本地主机回复了ACK=1,其seq=11XX51,ack=96XX46
第三步,目标主机给本地主机发送FIN=1,ACK=1,seq= 11XX51, ack=96XX46
第四步,本地主机给目标主机回复了ACK=1,seq=96XX46,ack= 11XX52.
最后,双方释放连接成功。
其过程其实是一样的,推出访问网站,等一会就可以看见四次挥手了。好多理论学起来麻烦,一做实验就很直观了,所以在讲课的时候都会做实验,看数据,然后用抓包验证一些。
另外精心整理了一些【TCP/ARP–实验技术文档/视频案例分析/抓包软件模拟】,来进一步巩固你的基础;
如果大家想要上面的学习资料,私信 “ 学习 ” 即可免费领取哦!