深入理解网络层和传输层相关协议!!!
ARP/ICMP/TCP和UDP协议!!!
关于ARP
ARP协议概述
局域网中主机的通信
·IP地址与MAC地址
什么是ARP协议
·Address Resolution Protocol,地址解析协议
·将一个已知的IP地址解析成MAC地址
ARP协议
IP地址解析为MAC地址
·PC1发送数据给PC2,查看缓存没有PC2的MAC地址
·PC1发送ARP请求消息(广播)
·所有主机收到ARP请求消息
~PC2回复ARP应答(单播)
~其他主机丢弃
·PC1将PC2的MAC
ARP欺骗原理
ARP欺骗网关
原理:ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。所以说从某种意义上讲ARP协议是工作在更低于IP协议的协议层。这也是为什么ARP协议更能够让人在不知不觉的情况下出现网络故障,其危害更加隐蔽。
ARP攻击原理
欺骗其他所有计算机
欺骗被攻击计算机
ARP故障处理
使用ARP防火墙,自动抵御ARP欺骗和攻击
·在主机B上开启ARP防火墙
·在主机A上开启长角牛网络监控机,模拟ARP病毒发作
·查看ARP防火墙统计数据的变化
·在主机B上测试与网关的连通性
ARP报文格式
关于ICMP
ICMP协议
·ICMP是一个“错误侦测与回馈机制”
·通过IP数据包封装的
·用来发送错误和控制消息
ICMP协议的封装
·ICMP协议属于网络层协议
·ICMP数据的封装过程
IP数据包格式
协议字段
版本(4)版本字段 | 首部长度(4)IP包头部长度 | 优先级与服务类型(8) | 总长度(16)IP数据总长度 |
标识符(16) | 标志(3) | 段偏移量(13)上层的数据到IP层会被分片 | |
TTL(8)生命周期字段 | 协议号(8)协议字段 | 首部校验和(16) | |
源地址(32) | |||
目标地址(32) | |||
可选项 | |||
数据 |
ICMP消息类型和编码类型
其中
3:不可达
0:可达 8:请求
关于ARP和ICMP的总结
·IP数据包格式需要理解各字段的含义
·ICMP用来发送错误和控制信息
·ARP协议用于实现IP到MAC地址的解析
·ARP协议通过广播查询目标主机MAC地址
·ARP攻击是通过伪造ARP应答进行欺骗攻击
TCP协议
·TCP是面向连接的、可靠的进程到进程通信的协议
·TCP提供全双工服务,即数据可在同一时间双向传输
·TCP报文段
~TCP将若干个字节构成一个分组,叫报文段(Segment)
~TCP报文段封装在IP数据报中
TCP连接
·常用的TCP端口号及其功能
端口 | 协议 | 说明 |
20 | FTP | 服务器传输端口 |
21 | FTP | FTP服务器所开放的控制端口 |
23 | TELNET | 用于远程登录,可以远程控制管理目标计算机 |
25 | SMTP | SMTP服务器开放的端口,用于发送邮件 |
80 | HTTP | 超文本传输协议 |
110 | POP3 | 用于邮件的接收 |
·TCP建立连接的过程称为三次握手
·TCP断开连接的四次挥手
TCP连接
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号。
三次握手:Seq请求序列号,Ack确认序列号,SYN、ACK为控制位、TCP连接
第一次握手:PC1发送SYN报文(Seq=x,SYN=1)到PC 2
第二次握手:PC2发送SYN+ACK报文(Seq=y,ACK=X+1,SYN=1,ACK=1)
第三次握手:发送ACK报文(Seq=x+1,ACK=y+1,ACK=1)
四次挥手
第一次挥手:PC1发送FIN,ACK(FIN=1,ACK=1)到PC2
第二次挥手:PC2发送ACK报文(ACK=1)此时半关闭了连接
第三次挥手:PC2发送FIN/ACK(FIN=1 ACK=1)报文
第四次挥手: PC发送ACK(ACK=1)报文
…
----- 数据没有完全传输完成时,呈半关闭状态。
------没有收到数据,等待服务器重传,等待时间为一到四分钟。
TCP报文段
源端口号(16) | 目标端口号(16) | ||
序号(32) | |||
确认号(32) | |||
首部长度(4) | 保留(6) | URG ACK PSH RST SYN FIN | 窗口大小(16) |
校验和(16) | 紧急指针(16) | ||
选项 |
·SYN:同步序号位,TCP需要建立连接时将该值设为1
·ACK:确认序号位,当该位为1时,用于确认发送方的数据
·FIN:当TCP断开连接时将该位置为1
·序号:发送端为每个字节进行编号,便于接收端正确重组
·确认号:用于确认发送端的信息
·窗口大小:用于说明本地可接收数据段的数目,窗口大小是可变的
UDP协议
UDP协议
·无连接、不可靠的传输协议
·花费的开销小
UDP报文的首部格式
源端口号(16) 目标端口号(16)
UDP长度(16) UDP校验和(16)
·UDP长度:用来指出UDP的总长度,为首部加上数据
·校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一的可靠机制
UDP协议-2
常用的UDP端口号及其功能
端口 | 协议 | 说明 |
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |
TCP/UDP总结
·TCP是一个可靠的面向连接的协议
·TCP建立连接要经历三次握手
·TCP断开连接要经历四次挥手
·UDP是一个不可靠无连接的协议
Ping命令
·
其中 -t 可以一直不停的ping
-a 参数可以显示主机名称
-l 参数可以设定ping包的大小
中断命令: Ctrl+C
网络层的功能
·定义了基于IP协议的逻辑地址
·连接不同的媒介类型
·选择数据通过网络的最佳路径
补充:Ping的基本信息及实现方式
PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序 。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态 。
ping用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。Ping命令可以进行以下操作 :
①通过将ICMP(Internet控制消息协议)回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接。
②每个发送的数据包最多等待一秒。
③打印已传输和接收的数据包数。
需要注意的是,Ping成功并不一定就代表TCP/IP配置正确,有可能还要执行大量的本地主机与远程主机的数据包交换,才能确信TCP/IP配置的正确性。如果执行ping成功而网络仍无法使用,那么问题很可能出在网络系统的软件配置方面,ping成功只保证当前主机与目的主机间存在一条连通的物理路径 。
ICMPPing
ICMP是一种将差错与控制集于一体的协议,不仅用于传输差错报文,还用于消息控制报文。它与IP协议相互依赖:IP在发送一个差错或控制报文时要用到ICMP,而ICMP利用IP来传递报文 。
ICMP报文分为信息报文、差错报文、控制报文。信息报文一般由客户端发出,例如用于测试目的地址可达性的回应请求/应答报文;而差错报文一般由服务器或是路由器发出,表示网络或主机不能完成要求的服务。当发送一份ICMP差错报文时,文始终包含了IP首部和产生ICMP差错报文的IP数据报的前8个字节。
ICMP Ping就是向目标主机发送ICMP信息报文,目标主机(有时是路由器)回应ICMP信息报文或差错报文,Ping程序根据这些收到的ICMP报文,以知道目标主机的可达性。可用于Ping的信息报文有:回应请求与响应报文、时间戳请求与响应报文和掩码请求与响应报文。
TCPPing
在进行ICMPPing的时候,如果在目标主机的网络网关过滤了ICMP Ping包,ICMPPing的结果就不准确了。此时,应该考虑其他方式,如TCPPing、LIDPPing。TCP的功能是在一对ULP(UpperLayerProtocol,高层协议)之间提供的数据报服务基础上,建立可靠的端对端连接,并提供虚电路服务和面向数据流的传输服务。TCP中的基本传输单元是段(Segment),一个TCP段由段头和数据流两部分组成。
在TCP协议中,SYN包用来表示建立连接请求。如果对方端口处在listening状态,就会回送ACK包,并附上自己的ISN。但是如果对方端口是关闭的,它会发回一个RST包,表示应该马上断开连接(少数情况下会发回一个同时置SYN和ACK位的包)。如果我们向一个端口发送ACK包,而事先没有与此端口建立连接,那么,无论端口是否打开,它都会回送一个RST包。所以可以看出,无论这个端口是否打开,总会有某一种数据包返回,以此可以判定目标主机可达。而目标主机如果不可达,路由器就会向扫描主机发送目的地不可达的ICMP报文。这样,通过向目标主机发送TCPSYN包或TCPACK包就可以准确判断目标主机是否可达,而且根据RFC793(TCP),目标主机(或路由器)都无法屏蔽TCPSYN包和TCPACK包,因此,TCPPing的准确性比ICMPPing的准确性要高。在实现的时候,需要利用RAW Socket,定制TCP包并封装在IP包中。在Linux系统下,非root用户是没有此项权利的,同样Windows的非.Administrator组用户也不能直接填写TCP包头和IP包头。
UDPPing
在TCP/IP协议组中,用户数据报协议(UDP)提供应用进程之间数据报传送的基本机制。每个UDP报文不仅传送用户数据,而且还包括发送方和接收方的协议端口号。
UDPPing与TCPPing的原理类似,通过RAWSocket定制UDP包,主要是格式化UDP包中的目的端口号,一般指定一个数量值很大的目的端口号(比如31558),很少应用程序用到数量值入的端口号,也就是说该端口很有可能是处于关闭状态。首先构建好UDP报文,然后递交给IP实体发送。如果目标主机不可达(网络不通或主机未打开),则路由器将发送一个目的不可达ICMP报文。而如果目标主机可达,在其接收数据时,其UDP实体首先判断接收到的目的端口号是否与当前使用的某端口号匹配,如果匹配,则将数据报放入到对应的接收队列,否则如果目的端口号对应的端口关闭则丢弃该数据报,并回送一个“端口不可达”的ICMP报文,因此,只要目标主机可达,UDPPing程序将收到一个UDP回应包(也可能没有)或者“端口不可达”的ICMP报文而目标主机不可达,将收到“目的不可达’’的ICMP报文。