1 IP数据包格式
2 ICMP协议介绍
3 ARP协议介绍
4 ARP攻击原理
网络层的功能:
1定义了基于IP协议的逻地址(ipv4 ipv6)
2连接不同的媒介类型
3选择数据通过网络的最佳路径
一.IP数据包格式
1.IP版本字段:该字段包含的是IP版本号,4bit。目前IP的版本为4(即ipv4)表示为0100.
2.首部长度:该字段用于表示IP数据包头长度,4bit(不包括数据)。IP数据包头最短为20字节,但是其长度是可变的,具体长度取决于选项字段的长度.
3.优先级与服务类型:该字段用于表示数据包的优先级和服务类型,8bit. 通过在数据包中划分一定的优先级,用于实现QOS(服务质量)的要求。
4.总长度:该字段指示整个IP数据包的长度,16bit。最长65535字节,包括包头和数据。
5.标识符:用于表示IP数据包的标识符,16bit。当IP对上层数据进行分片时,它将给所有的分片分配一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误的重组。
6.标志:标志字段,3bit。对当前的包不能进行分片(当该包从一个以太网发送到另一个以太网时),或当一个包被分片后用以指示在一系列的分片中,最后一个分片是否已经发出。
7.段偏移量:该字段表示段偏移量,13bit。段偏移量中包含的信息是指一个分片序列中如何将各分片重新连接起来。
8.TTL:该字段用于表示ip数据包的生命周期,8bit。一个数据包每经过一个路由器,TTL将减去1.当TTL的值为0时,该数据包将被丢弃。可以防止一个数据包在网络中无限循环的转发下去。
通过TTL的返回值确定系统类型:1.win 128左右 2.linux 64左右
9.协议号:协议字段,8bit。该字段用以指示在IP数据包中封装的是哪一个协议,是TCP还是UDP,TCP协议号是6,UDP协议号为17.
10.首部校验和:该字段用于表示校验和,16bit。接收方和网关用来校验数据有没有被改动过。
11.源IP地址:用于表示数据包的源地址,32bit。
12.目标IP地址:用于表示数据包的目的地址,32bit。
13.可选项:选项字段根据实际情况可变长,可以和IP一起使用的选项有多个。例如,可以输入创建该数据包的时间等。在可选项之后,就是上层数据。
14.最底层:数据
二.ICMP协议:用来在网络设备间传递各种差错和控制信息,对收集各种网络信息,诊断和排除各种网络故障等方面起着至关重要的作用
1.ICMP是一个“错误侦测与回馈机制”
2.通过IP数据包封装
3.用来发送错误和控制消息
ICMP协议的封装
1.ICMP协议属于网络层协议
2.ICMP数据封装过程
若ping不通:1.ping自己127.0.0.1硬件网卡
2.看双方地址是否有问题
3.看网关是否有问题
4.防火墙策略是否有问题
ping的格式:ping 空格 ip地址【选项】
功能:ping
ping是网络设备,windows,unix和linux平台的上的一个命令,其实是一个小巧而实用的应用程序,该应用基于ICMP协议,ping常用于探测到达目的节点的网络可达性
ping命令参数:
-t 参数会一直不停的执行ping 1.调试故障或需进行持续连通性测试时使用
2.Ctrl+C可以中断命令
(ping -t +ip地址 ctrl+c停止)
-a参数可以显示主机名称
-l 参数可以设定ping包的大小:1.单位为字节 2.可用于简单测试通信质量(ping -l指定包的大小1600.2000)+ip地址)
-w超时等待时间 (ping -w指等待时间默认2秒 +ip地址)-n 指定的次数 (ping 指定的次数+ip地址)
冲突域:两台设备同时发送发送消息时,互相干扰,那他们就处于一个冲突域
广播域:一台设备发送广播,能收到消息的机器都是在同意广播域
交换机的所有端口默认在同一个广播域里
路由器的每一个端口都是一个独立的广播域
ARP协议概述
1.局域网中主机的通信:ip地址与mac地址
2.将一个已知的IP地址解析成MAC地址:1.pc1发送数据给pc2,查看缓存没有pc2的mac地址
2.pc1发送arp请求消息(广播)
3.所有主机收到ARP请求消息,pc2回复ARP应答(单播),其他主机丢弃
4.pc1将pc2的MAC地址保存到缓存中,发送数据
ARP攻击原理
1.欺骗其他所有计算机
2.欺骗被攻击计算机
ARP攻击:ARP发送的时ARP应答,但是ARP应答中的MAC虚假地址,所以在其他主机想要进行通信时,会将目的MAC地址段设置成此虚假MAC地址导致无法正常通信
ARP欺骗的原理和ARP攻击基本相同,但是效果不一样,ARP攻击最终的结果是导致网络中断,而欺骗的最终结果是使得流量通过自身达到监控或控制目的
TCP协议
1.tcp是面向连接的,可靠的进程到进程通信的协议
2.tcp提供全双工服务,即数据可在同一时间双向传输
3.tcp报文段:tcp将若干个字节构成一个分组,叫报文段;tcp报文段封装在ip数据报中
TCP报文段
序号:发送端为每个字节进行编号,便于接收端正确重组
确认号:用于确认发送端的信息
窗口大小:用于说明本地可接收数据段的数目,窗口大小是可变的
首部长度URG=1:表示TCP报文段首部长度,共4位。由于tcp头部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长,它指出tcp报文段的数据起始处距离tcp报文段的起始处有多远,该字段的单位是32位,4位二进制最大表示15,所以数据偏移也就是头层皮、首部最大60字节
控制位
URG(紧急位):表示本报文段中发送的数据是否包含紧急数据,后面的紧急指针字段,只有当确认报文段URG=1时才有效
ACK(确认位):表示是否前面确认号字段是否有效,只有当ACK=1时,前面的确认号字段才有效,tcp规定,连接建立后,ACK必须为1,带ACK标志的tcp报文段为确认报文段
PSH(急切位):提示接收端应用程序应立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。
RST(重置位):如果收到rst=1的报文,说明与主机的连接出现了严重错误,必须释放连接,然后再重新建立连接
SYN(同步位):在建立连接时使用,用来同步序号,当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段:当SYN=1,ACK=1时,表示对方同意建立连接了,SYN=1,说明这是一个请求建立连接或同意建立连接的报文,只有在前两次握手中SYN才置为1,带SYN标志的tcp报文段称为同步报文段
FIN(断开位):表示通知对方端要关闭连接,标记数据是否发送完毕,如果FIN=1.即告诉对方,我的数据已经发送完毕,你可以释放连接,带FIN标志的tcp报文段为结束报文段
窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面的数据
校验和:提供额外的可靠性紧急指针,标记紧急数据在数据字段中的位置
选项部分:其最大长度可根据tcp首部长度进行推算,tcp首部长度用4位表示,选项部分最长为(2^4-1)*4-20=40字节
三次握手:TCP建立连接的过程
三次握手原理:1.客户端向服务器发送SYN同步请求,请求服务器建立连接 2.服务器收到此SYN请求后,针对客户端的SYN同步请求进行ACK响应的同时也会发送一个SYN同步请求个客户端 3.当客户端接收到服务器发来的SYN同步请求时,会给与一个ACK响应。
为什么要三次握手:因为TCP是可靠的传输层协议,他在传输数据前会建立双向数据通信通道,保证双向数据传输通道没有问题时才会发送数据,起到保护数据的作用。
第一次握手,客户端发送同步报文到服务端,客户端知道自己有发送数据能力,不知道服务端是否有发送、接受数据能力。
第二次握手,服务端收到同步报文,并回复确认同步报文,此时,服务端知道自己有接收、发送数据能力,并且客服端有发送数据能力,但不知道客户端是否有接收数据能力。
第三次握手,当客户端收到确认同步报文后,知道服务端具备发送、接收能力,也知道自己具备,但是服务端只知道客户端具备发送能力,还不知道也有接收能力,所以需要发送确认报文,告诉服务端自己具备接收能力。
第一步:当客户端向服务器发送请求连接的报文时:seq的序列号=x(x随机),SYN=1(表示发送连接请求)
第二步:服务器收到客户端发来的请求报文后,同意建立连接,则向客户端发送确认报文:seq序列号=y(这时服务器也会产生一个序列号y,和客户端序列号不相关),ack确认号=x+1(表示确认收到客户端的请求),ACK=1(表示这是一条确认请求),SYN=1(同时也发送一个建立连接的请求)
第三步:客户端进程收到服务端进程确认后,还要向服务端给出确认,然后连接建立成功:seq=x+1(这是客户端的序号为1),ack确认号=y+1(表示确认收到服务器的连接请求),ACK=1(表示这是确认报文)
四次段开:TCP断开连接
第一次挥手客户端发起关闭连接的请求给服务端
第二次挥手:服务端收到关闭请求的时候可能这个时候数据还没发送完,所以服务端会先回复一个确认报文,表示自己知道客户端想要关闭连接了,但需要等待数据传输完;
第三次挥手,当数据传输玩,服务端会主动发送FIN报文,告知客户端,标识数据已发送万传给你,服务端准备关闭连接了
第四次挥手,当客户端收到服务端的FIN报文后,会回复ACK报文,告知服务端自己知道了,在等待一会就关闭连接。
四次断开的第二次PC2接收到pc1的断开请求后发送ACK确认报文给pc1,要等待数据传输完后,再次发送FIN/ACK报文给pc1(确保数据传输完毕)。比三次握手多了这一步,所以是四次断开
为什么客户端在第四次挥手后还会等待2MSL?
等待2MSL是因为保证服务端接收到了ACK报文,因为网络是复杂的,ACk报文可能会丢失,如果服务端没接收到ACK报文的话,会重新发送FIN报文,只有当客户端等待了2MSL都没有收到重新发送的FIN报文时,才表示服务端是正常接收到了ACK报文,这个时候客户端就能关闭了。
TCP半关闭状态是什么情况?
客户端向服务器发送FIN请求,服务器给与ACK响应。但是服务器向客户端还有数据需要传输,因此服务器并没有向客户端发送FIN请求
常用的TCP端口号及功能
UDP协议:面向无连接,不可靠的传输协议,花费的开销小
UDP报文的首部格式
UDP长度:用来指出UDP的总长度,为首部加上数据
校验和:用来完成对UDP数据的差错校验,它是UDP协议提供的唯一的可靠机制
常用的UDP端口号及功能
总结:1.TCP是一个可靠的面向连接的协议
2.TCP建立连接要经历三次握手
3.TCP断开连接要经过四次断开
4.UDP是一个不可靠无连接的协议