OSI参考模型
应用层:OSI最高层。确定进程之间通信性质
协议:http:80,https:443,ftp:21,telnet:23,ssh:22,smtp:25,pop3
表示层:处理流经结点的数据编码的表示方式问题,以保证一个系统应用层发出的消息可被另一系统的应用层读出,数据压缩和加密也是表示层可提供的转换功能之一
会话层:管理和协调不同主机上各种进程之间的通信,负责建立、管理和终止应用程序之间的会话
传输层:为上次协议提供端到端的可靠和透明的数据传输服务
网络层:为传输层提供服务,通过寻址来建立两个节点之间的连接,进行路由选择数据链路层
数据链路层:为网络层提供服务(一个数据链路的连接)
物理层:利用物理传输介质为数据链路层提供物理连接(双绞线 光纤 无线介质等)
数据:比特流 比特最小数据传输单位
tcp/ip参考模型
应用层
传输层:定义两个协议:传输控制协议(TCP)和用户数据报协议(UDP)
网络层:网际协议(IP)、地址解析协议(ARP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)
IP协议是网际互联网最重要的协议,它提供的是一个不可靠、无连接的数据报传递服务
数据链路层(数据:数据帧)物理层(数据:比特流)
网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。
OSI参考模型和TCP/IP参考模型
共同点
(1)OSI参考模型和TCP/IP参考模型都采用层次结构的概念
(2)都能够提供面向连接和无连接两种通信服务机制
不同点
(1)前者是七层模型,后者是四层结构
(2)对可靠性要求不同(后者更高)
(3) OSI模型是在协议开发前设计的, 具有通用性.TCP/IP是先有协议集然后建立模型, 不适用于非TCP/IP网络.
(4)实际市场应用不同(OSI模型只是理论上的模型,并没有成熟的产品,而TCP/IP已经成为“实际上的国际标准”)
tcpdump抓包工具
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
-e 在输出行打印出数据链路的头部信息包括源mac和目的mac,以及网络层协议
-n 不把网络地址转换成名字;
-nn 不把ip和port转换成名字
-c 在收到指定包的数目后,tcpdump就会停止
-i 指定监听的网络接口
-r从指定的文件中读取包(这些包一般通过-w选项产生)
-w 直接将包写入文件,并不分析和打印出来
-S指定打印每个监听到数据包的TCP绝对序列号而非相对序列号
第一类型关键字 host,net,port 定义捕获数据包的范围
tcpdump host 192.168.147.129 截获192.168.147.129 主机通信所有数据包
tcpdump net 192.168.147.129 截获192.168.147.129该网络内数据包
tcpdump host 192.168.147.129 and port 80 截获192.168.147.129主机80端口收到和发出的所有数据包
第二类型关键字(确定传输方向)src,dst,dst or sec,dst and src
tcpdump -nn src 192.168.147.129 and dst 192.168.147.130 截获源ip为192.168.147.129并且目标ip为192.168.147.130的数据包
tcpdump -nn src 192.168.116.100 and src port 80 and dst 192.168.116.1 and dst port 22 截获源ip为192.168.116.100源端口80并且目标ip为192.168.116.1目标端口22的数据包
第三类型关键字(协议)fddi,ip,arp,rarp,tcp,udp,icm
Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和 分析。
tcpdump -nn host 192.168.147.129 and port 22 and tcp 截获主机192.168.147.129 端口22 并且是tcp协议的数据包
tcpdump -i ens33 -s 1400 -nn host 192.168.116.250 and ! 192.168.116.74 and icmp -e 抓取网口ens33上192.168.116.250和除192.168.116.74外的其他主机之间的icmp报文
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||';
数据链路层
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。
将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)
在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据
1、应用程序构造数据包,该示例是产生ICMP包,被提交给内核(网络驱动程序);
2、内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表[1];
3、如果存在该IP-MAC对应关系,那么跳到步骤7;如果不存在该IP-MAC对应关系,那么接续下面的步骤;
4、内核进行ARP广播,目的地的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令类型为REQUEST(1),其中包含有自己的MAC地址;
5、当192.168.1.2主机接收到该ARP请求后,将源主机的IP地址及MAC更新至自己的arp缓冲中,然后发送一个ARP的REPLY(2)命令,其中包含自己的MAC地址;
6、本地获得192.168.1.2主机的IP-MAC地址对应关系,并保存到ARP缓存中;
7、内核将把IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去;
使用arp-a命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。当然,如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。
RARP协议是“Reverse Address Resolution Protocol”(反向地址转换协议)的缩写
允许局域网的物理机器从网关服务器的ARP表或者缓存时请求其IP地址
在局域网网关路由器里创建一个表映射物理地址(MAC)和与其对应的IP地址。
设置一台新机器其RARP客户机程序需要向路由器上的RARP服务器请求相应的IP地址
如果路由表已经设置了一个记录,RARP服务器将会返回IP地址给机器,该机器会存储起来一边日后使用
tcpdump默认只抓包之前的96 bytes -s 1500可抓到整个包的数据
查看缓存表
arp 注意:如果出现两个MAC,可能目标主机是双网卡,也可能IP冲突,如果不能正常通信则IP冲突否则双网卡
网络层
ip协议:IP是英文Internet Protocol(网络之间互连的协议)的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。
一.IP协议简介: 路由、分片
特点:
不可靠(unreliable): 它不能保证IP数据报能成功地到达目的地。IP仅提供尽力而为的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。
无连接(connectionless): 这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明, IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
ip数据报分析
IP数据报首部的固定部分中的各字段
(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6
(2)首部长度 占4位,可表示的最大十进制数值是15(1111)则表示60字节头长度.最常用的首部长度就是20字节(即首部长度为0101)
(3)服务类型 占8位,区分服务 用来获得更好的服务. 高层协议通过服务类型字段告诉ip处理设备,应该如何处理这个数据包,该字段占一个字节长(包括3bit优先级[0~7最高] 第4bit延迟 吞吐量标志第5bit 可靠性标志第6个bit 第7bit最小开销标志)
(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志(flag) 包分片标识 占3位,但目前只有2位有意义。第一位保留
标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移 占13位 表示当前的这个数据分片在原有数据包中所处的位置,有了这个字段就便于目标主机一片一片的重组数据包
(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),每记过一个路由器 该值就减1,当TTL值为0时,路由器就会丢弃该数据,并且向发包主机返回一个报警信息.后来把TTL字段的功能改为“跳数限制".TTL的意义是指明数据报在网络中至多可经过多少个路由器。显然,数据报在网络上经过的路由器的最大数值是255.若把TTL的初始值设为1,就表示这个数据报只能在本局域网中传送.这种机制避免了数据包在网络中无线的循环
(9)协议 占8位,协议字段指出此数据报携带上层的数据是使用何种协议.比如 tcp 该值为6 udp该值17 1表示为ICMP协议, 2表示为IGMP协议
(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。
(11)源地址 占32位。
(12)目的地址 占32位
ip分片:超过1500 byte,发送端分片,接收端重组
ip link show eth0 显示网卡eth0的网络接口信息,包括类型、Ethernet地址、链路状态等
利用ip碎片攻击
ping of death 是利用ICMP协议的一种碎片攻击。攻击者发送一个长度超过65535的Echo Request数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,系统通常会崩溃或挂起。
如何阻止碎片攻击
* Windows系统请打上最新的Service Pack,目前的Linux内核已经不受影响。
* 如果可能,在网络边界上禁止碎片包通过,或者用iptables限制每秒通过碎片包的数目。
* 如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS就会影响整个网络。
* Win2K系统中,自定义IP安全策略,设置“碎片检查
一.icmp协议简介
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
侦测远端主机是否存在
建立及维护路由资料
重导资料传输资料
二.ICMP首部
type 类型 8位
8 响应请求(ECHO-REQUEST)
0 响应应答(ECHO-REPLY)
3 不可到达
type
Code=0 网络不可达 有网关 ping不存在的网段主机 网管开转发并且没有该网段路由(网关没有设置自己网关)
Code=1 主机不可达
Code=2 协议不可到达
Code=3 端口不可达
1.ping存在主机 对应主机有防火墙 REJECT
2.指定一个主机 不打开的dns服务, 解析域名
checksum校验和字段(16位)
传输层
udp协议:UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议.是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。在网络中它与TCP协议一样用于处理 UDP数据包。在OSI模型中,在第四层传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说当报文发送之后,是无法得知其是否安全完整到达的。
UDP协议 首部 8 字节
不用先与对方建立连接(非面向连接)
source port: 主动访问端的源端口总是大于1024的随机端口
destination port: 目的端口
length: 指的是当前UDP的数据段的长度(DATA长度+UDP首部的长度)
数据报文的长度=DATA长度+8字节UDP首部的长度+20字节IP首部的长度
syslog和dns默认用UDP,zone数据报传输的时候用TCP
checksum:检查校验和
非面向连接:不用先与对方建立连接,不握手
不可靠的:没有确认机制
UDP Flood攻击
原理UDP Flood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。 100k pps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
tcp协议
TCP协议即TCP(传输控制协议):Transmission Control Protocol 传输控制协议,TCP是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。TCP在IP报文的协议号是6。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。
Source Port / Destination Port :来源端口/目的端口。其中包含来源端口/目的端口的端口号。
Sequence Number :封包序号。当数据要从一台主机传送去另一台主机的时候,发送端会为封包建立起一个起始序号,然后按照所传送的数据长度(字节数值),依次递增上去。使用递增之后的值来作为下一个封包的序号。这样接收端就可以根据序号来检测资料是否接收完整了。
Acknowledge Number :回应序号。当接收端接收到 TCP 封包并通过检验确认之后,会依照发送序号、再加上数据长度产生一个响应序号,附在下一个响应封包送回给对方(无需额外的送出专门的确认封包),这样接收端就知道刚才的封包已经被成功接收到了。假如基于网络状况或其它原因,当封包的定时器达到期限时,接收端还没接收到回应序号,就会认为该封包丢失了并加以重送。如果刚好重发封包之后才接收到响应,接收端就会根据序号来判断该封包是否被重复发送,如果是的话,将之丢弃不做任何处理
window滑动窗口
T C P使用一种窗口(w i n d o w)机制来控制数据流。当一个连接建立时,连接的每一端分配一个缓冲区来保存输入的数据,并将缓冲区的尺寸发送给另一端。当数据到达时,接收方发送确认,其中包含了自己剩余的缓冲区尺寸。剩余的缓冲区空间的大小被称为窗口( w i n d o w) ,指出窗口大小的通知称为窗口通告(window advertisement) 。接收方在发送的每一确认中都含有一个窗口通告。
如果接收方应用程序读数据的速度能够与数据到达的速度一样快,接收方将在每一确认中发送一个正的窗口通告。然而,如果发送方操作的速度快于接收方(由于C P U更快) ,接收到的数据最终将充满接收方的缓冲区,导致接收方通告一个零窗口( zero window) 。发送方收到一个零窗口通告时,必须停止发送,直到接收方重新通告一个正的窗口。
tcp协议的3次挥手
tcp协议的4次挥手
重传机制(RTT)
每个数据段都有一个重传时间 这个时间是根据网络情况算出来.如果在该时间范围内没有ack 那就要重传数据段注意不是数据包.(数据段可能是N个数据包) 网络层不是管重传的只能在传输层完成
TCP的特点总结
1.面向连接:三次握手和四次挥手
SYN同步标记
FIN结束标记
2.可靠的:确认和重传机制
确认机制:ACK确认标记
重传机制:在RTT(数据段往返时间),没有收到ACK,则认为需要重传整个数据段序列号,确认号
3.TCP的状态
4.TCP的标记
SYN:同步标记位
ACK:确认标记位(包括三次握手的确认及以后数据传输时确认)
RST:重置标记位(访问一个未打开的TCP端口,服务器返回一个带RST标记位的响应)
PSH:推标记位(延时性比较高的时候都会加上PSH,比较快的发送出去,不往缓存中放,ssh,telnet,ftp-command)
URG:紧急标志位(通信的时候网络故障问题引起的数据没传完,会发送一个URG标记位)
FIN:结束标记位(发送端完成发送任务,双方都需要确认没有数据再发给对方)
syn flood
攻击原理:SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被攻击服务器保持大量SYN_RECV状态的半连接,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来
应用层
ftp协议
FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。该协议是Internet文件传送的基础,
它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠
高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件
在TCP/IP协议中,FTP标准TCP端口号为21,Port方式数据端口为20。
二、FTP两种模式
两种数据传输模式:主动模式,被动模式
被动模式:服务器端只开21和大于1024随机端口
服务器和客户端会协商好一个端口,然后客户端从这个端口读数据
主动模式: 服务器端打开21和20端口
客户端和服务端通过20号端口传输数据
http协议:超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
使用浏览器访问web服务器
tcpdump -i ens33 -nn port 80 -s 1500 -w /tmp/http //客户端抓取包
wireshark详细查看:
HTTP GET / HTTP/1.1 -----> Follow TCP Stream (右键)
红色部分: 客户端发给服务器
蓝色部分: 服务器回给客户端
使用协议命令访问web服务器
nc 192.168.147.129
GET / HTTP/1.1 //请求站点根目录 【HTTP协议名称及版本可选】
HOST: 192.168.0.99 //发起请求的服务端主机 【可选】
HTTP响应头
HTTP/1.1 200 OK //协议返回码200
Date: Thu, 25 Oct 2012 06:16:50 GMT
Server: Apache/2.2.3 (Red Hat) //服务器软件及版本
Last-Modified: Thu, 25 Oct 2012 05:40:00 GMT //告诉客户端是否需要从服务器更新,由于客户端有缓存的数据(提高效率)
ETag: "330001-12-a2518c00" //和服务器比Etag值,作用为Last-Modified相似
Accept-Ranges: bytes
Content-Length: 18
Connection: close
Content-Type: text/html; charset=UTF-8 //和后面讲到的mime类型相关