1、七层参考模型及IP讲解
2、TCP三次握手讲解
3、TCP四次挥手讲解及抓包分析
4、DHCP协议讲解及抓包分析
5、静态综合实验讲解
7、静态路由讲解
8、RIP路由信息协议讲解
9、动态路由协议讲解
10、抓包进行分析RIP以及OSPF的包
11、动态路由OSPF配置综合实验讲解
12、Vlan虚拟局域网技术讲解
13、ACL访问控制列表讲解
14、NAT技术讲解
15、网络综合实验讲解
全称即为Transmission Control Protocol
上一篇文章我们理论上的介绍了TCP三次握手,那么这篇我们将进行实操,利用wireshark抓包工具进行获取TCP的包来分析其过程。
关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户端到服务端的数据传送,然后客户端等待服务器的确认。包含终止标志位FIN=1,序列号seq=u。
同时,主机A发送FIN包后,进入终止等待状态
服务器收到这个FIN包后,它会回一个ACK,确定号ack为收到的序号加1,即ack=u+1
这时服务器B进入close-wait状态
关闭服务器到客户端的连接,发送一个FIN给客户端
由第二次握手之后,TCP服务器进程就通知高层应用进程因而从A到B的连接释放了。此时是“半关闭”状态。也就是主机A不可以发送给B,但是主机B可以发送给主机A。
所以此时,B没有数据报要发送给A了,其应用程序就会通知TCP释放连接,然后发送给A连接释放报文段。
客户端收到FIN后,并发回一个ACK报文确认,并将确定序号ack设置为收到序号加一,即ack=w+1
然后如果此时主机A进行确认的话,进入time-wait
此时TCP连接还没有进行释放掉,然后经过时间等待计时器是设置的2MSL后,A才进入close状态
原因:
MSL也就是最大报文生存时间,它是任何报文在网络上存在的最长时间,而超过这个时间报文将被丢弃。 《TCP/IP详解》得知:
它(MSL)是任何报文段被丢弃前在网络中的最大生存时间。
RFC793中规定MSL为2min,实际应用中常用30s、1min、2min等
第四次挥手时,客户端发送给服务器的ACK有可能丢失,TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果Server没有收到ACK,就会重发FIN,如果Client在2*MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止Server没有收到ACK而不断重发FIN。。
首先我们先认识这个抓包工具:
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
Ethereal是全世界最广泛的网络封包分析软件之一。
首先我是用ensp华为模拟器配合wireshark获取到TCP的包。
获取思想:通过ENSP模拟器上搭建模拟客户端访问网站的过程,由此抓包得到TCP建立连接的三次握手过程以及四次挥手过程。
我们将用到一个Client模拟客户端以及HTTP服务器来模拟服务端。
拓扑图如上
客户端的ip(即Client)为192.168.1.1/24
(即子网掩码为255.255.255.0)
服务端的ip(即HTTP服务器)为192.1688.1.2/24
(即子网掩码为255.255.255.0)
客户端输入服务器的地址来模拟访问网站即服务器的过程
在此之前已将接口上的接口wireshark打开。
接着我们展示wireshark所抓取到的TCP包里面的内容:
首先我们任意打开一个数据包:
我们先看最上面一行,即为Time,Source,Destination以及Protocol和Length,Info
Time: 它是从抓取的第一帧开始计算的时间,单位为纳秒,第一帧标记0.000000
Source: 源IP地址,一般情况下是IPv4、IPv6或者以太网地址
Destination: 目标IP地址:一般情况下是IPv4、IPv6或者以太网地址
Protocol: IP数据包,以太网的帧,TCP分组所使用的协议,比如:TCP,HTTP,TDS,DNS等
Length: 数据帧的长度,单位为字节
以上为默认显示的信息,当然我们也可以根据需要进行更改。
接下来我们看数据包所包含的所有信息。
帧Frame 27指的是发送的数据块,这个所抓取的帧的序号为27;
以及它所抓取的字节数与传送的字节数相同且都为58字节。
打开Frame信息,如下图所示:
Interface id:0即为接口id为0;
Encapsulation type: Ethernet (1): 封装类型为以太网。
Arrival Time: Jan 1, 1970 19:37:40.859000000 中国标准时间到达时间,值为Jan 1
1970 19:37:40.859000000秒
[Time shift for this packet: 0.000000000 seconds]: 此数据包的时移时间。
Epoch Time:41860.859000000 seconds: 此数据包的纪元时间。
[Time delta from previous captured frame: 0.656000000 seconds]: 此包与前一帧的时间间隔
[Time delta from previous captured frame: 0.656000000 seconds]: 此包与前一帧的时间间隔。
[Time since reference or first frame: 35.594000000 seconds]: 此包与第一帧的时间间隔。
Frame Number: 27: 帧序号。
Frame Length: 58 bytes (464 bits): 帧长度。
Capture Length: 54 bytes (432 bits): 捕获字节长度。
[Frame is marked: False]: 此帧是否被做了标记。
[Frame is ignored: False]: 此帧是否被忽略。
[Protocols in frame: eth:ethertype:ip:tcp]: 此帧内封装了协议层次结构。
[Coloring Rule Name: HTTP]: 着色标记的协议名称。
[Coloring Rule String: http || tcp.port == 80 || http2]: 着色规则显示的字符串。
以太网有限局域网技术,为数据链路层。包含了源MAC地址与目标MAC地址。
Destination: HuaweiTe_35:50:15(54:89:98:35:50:15) 目的MAC地址(物理地址)。
Source: HuaweiTe_06:41:a1(54:89:98:06:41:a1): 源MAC地址(物理地址)。
Type: IPv4 (0x0800): 使用IPv4协议。
Internet Protocol Version 4就是IPv4的全称,为IPv4协议,网际协议,为网络层。
包含了源IP地址与目标IP地址。
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.1.2: IPv4协议、源IP地址和目的IP地址。
0100 … = Version: 4: IP协议版本为4。
… 0101 = Header Length: 20 bytes (5): 包头长度为20字节。
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT): 差分服务字段。
Total Length: 44: IP包总长度为40字节。
Identification: 0x000b(11): 标识字段。
Flags: 0x00: 标记字段。
Fragment Offset: 0: 分段偏移量。
Time to Live: 255: 生存周期TTL为255。
Protocol: TCP (6): 此包内封装的上层协议为TCP(6)。
Header Checksum: 0x386d [validation disabled]: 头部数据的校验和。
[Header checksum status: Unverified]: 头部数据校验状态。
Source: 192.168.1.1: 源IP地址。
Destination: 192.168.1.2: 目的IP地址。
第四行前三个即为TCP的全称:Transmission Control Protocol
也就包含了源端口:2051,目标端口为80,序列号为0。
Source Port: 2051: 源端口号。
Destination Port: 80: 目的端口号。
[Stream index: 1]: 流指数。
[TCP Segment Len: 0]: TCP段长度。
Sequence Number: 0 (relative sequence number): 序列号(相对序列号)
Acknowledgment Number: 0 : 确认号。
Header Length: 24 bytes: 头部长度。
Flags: 0x002 (SYN): TCP标记字段。
Window size vlaue:8192 窗口大小的值。
[Calculated window size: 8192]: 计算窗口大小。
Checksum: 0x686a [unverified]: TCP数据段的校验和。
[Checksum Status: Unverified]: 校验和状态为未验证。
Urgent Pointer: 0: 紧急指针。
首先我们来回顾下TCP的三次握手:
当客户端发出SYN连接请求后,等待服务器应答SYN,回复ACK,这样来防止产生错误的连接,、TCP使用的流量控制协议是可变大小的滑动窗口协议。
第一次握手:建立连接时,客户端发送SYN包并且包含初始序列号seq=x到服务器,然后进入SYN_SEND状态,等待接收服务器的确认包。
第二次握手:服务器收到SYN包,确认客户的SYN以及ack=x+1(对连接进行确认),同时也送一个SYN包含它的seq=y,即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入Established状态。
补充:ACK:为TCP报文首部中的“ACK字段”,为1时该报文为确认报文段
ack:是TCP报文段首部中“确认号字段”的具体数值。
其中:ack=x+1:服务器希望客户端下次发来的报文段的第一个数据字节为序号x+1的字节;
ack=y+1:客户端希望服务器下次发来的报文段的第一个数据字节为序号y+1的字节。
上图的红方框便展示的TCP的三次握手的TCP包,下面我们将依次进行介绍:
由上一篇我们可以知道,客户端访问服务器之前,用的如果是TCP传输层协议,那么在他们相互传输数据之前,首先进行TCP三次握手来建立连接。
主机A(也就是客户端)先送一个SYN=1的数据段,连接请求包,TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=0;
服务器A回复标识了SYN=1,ACK=1的数据段,此数据段的序列号seq=0,确认序列号为主机A的序列号加1(ack=1),以此作为对主机A的SYN报文的确认。
主机A发送一个标识了ACK=1的数据段,此数据段的序列号seq=1,确认序列号为服务器A的序列号加1(ack=1),以此作为对服务器A的SYN报文段的确认。
下面我们来看TCP四次挥手的数据包,由于想要断开连接,第一步就是客户端首先发送一个FIN,然后由服务端进行确认,所以我们的第一个包里面必须包含FIN。
接下来依次来看各个数据包:
客户端A想终止连接,于是发送一个标识了FIN=1,ACK=1的数据段,序列号为seq=158,ack=308。FIN=1的作用就是用来释放连接的,表明主机A数据已经发送完毕,要求释放连接。
主机A回应一个标识了ACK=1的数据段,序列号为seq=308,确认序号为ack=159,作为对服务器A的FIN报文的确认。
主机A想终止连接,于是向服务器A发送一个标识了FIN=1,ACK=1的数据段,序列号为seq=308,确认序列号为ack=309。表明主机A数据已经发送完毕,要求释放连接。
服务器A回应一个标识了ACK=1的数据段,序列号为seq=159,确认序号为ack=309,作为对主机A的FIN报文的确认。