学习Linux,就算是像小编我这样的小萌新,也知道OSI模型。什么?!你不知道!!! 好吧,这篇秘籍拿走,不谢~~~
一、两个协议
(1)OSI 协议模型(7层)国际协议 PDU:协议数据单元对等层次之间传递的数据单位
OSI协议(7层) 国际协议 |
PDU 单位 |
功能 |
实例 |
7 应用层 application |
message |
为应用程序进程(例:mail、终端防伪)提供网络服务;提供用户访问界面 提供用户身份验证 |
HTTP Telnet |
6 表示层 presention |
message |
确保接受系统可以读出该数据 格式化数据;编码 构建数据、提供加密解密;压缩解压缩 协商用于应用层的数据传输语法 |
ASCLL、EBCDIC JPEG |
5 会话层 session |
消息 message |
建立、管理和终止在应用程序之间的会话session |
操作系统 应用读取 |
4 传输层 transport |
数据网 segment |
终端对终端;确保数据传输的可靠性 建立、维护和终止虚拟电路 通过错误检测和恢复 信息流控制来保障可靠性 |
TCP、UDP |
3 网络层 network |
数据包 packet/package |
支持逻辑寻址和路径选择 路由选择 选择传递数据和路径选择 |
IP |
2 数据链路层 data link |
帧frame |
用MAC(物理)地址访问媒介、错误检测和修正 |
802.3/802.2 HDLC |
1 物理层 physical |
数据位 byte |
二进制传输;为启动、维护和关闭物理链路定义了电器规范、机械规范、过程规范和功能规范 |
EIA/TIA-232 V.35 |
运作模型:
(2)TCP/IP 协议栈(4层),既是局域网又是互联网的默认主流协议
cat /etc/protocols 查询系统上存在的协议(linux)
(3)相同点
两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务,每层都有区分上层类型的标签
不同点
OSI是先有模型;TCP/IP是先有协议,后有模型
OSI适用于各种协议栈;TCP/IP只适用于TCP/IP网络
层次数量不同
(4)每层有自己的结构,下面会详解,下表是个简例
数据链路层 帧 |
Internet IP协议 |
传输层 TCP协议 |
应用层 |
||||
目标mac 地址 |
源 mac 地址 |
源IP 地址 |
目标IP 地址 |
源端口 |
目标端口 |
app |
数据 date |
二、数据链路层 帧
(1)Ethernet Frame以太网帧,IEEE定了国际标准
(2)Ethernet Frame 以太网帧结构(EthernetII 和 802.3的区别)(数据链路层)
以太网长度:72-1526(抓包为60-1514除去前8最后4字节)
EthernetII
8 |
6 |
6 |
2 |
46-1500 |
4 |
序言 Preamble |
目标物理 (mac)地址 |
源mac地址 |
Type 上层类型 |
Data (包含上层协议头部信息) |
FCS 检查数据包故障 |
IEEE 802.3
7 |
1 |
6 |
6 |
2 |
46-1500 |
4 |
序言 Preamble |
S O F |
目标物理 (mac)地址 |
源mac地址 |
Length 长度 |
Data (包含上层协议头部信息) |
FCS 检查数据包故障 |
EthernetII 有标识Type上层文件类型,IEEE 802.3没有(存在问题)
(3)抓包实例
(4)mac地址(48位) 不同地方不同的意思,媒体访问控制media access control MAC
48全为1(12个F):广播
三、传输层,TCP和UDP协议
(1)TCP可靠性 和 UDP高效性 区别
区别 |
TCP可靠性 |
UDP高效性 |
Connection Type |
面向连接 connection-oriented |
非面向连接 connectionless |
序列化 Sequencing |
yes |
no |
Uses |
File sharing Downloading... |
voice streaming video streaming |
(2)TCP
1.特性
工作在传输层面向连接协议
全双工协议
半关闭(分手的时候)
错误检查
将数据打包成段,排序,序列号
确认机制
数据恢复,重传
流量控制,滑动窗口
拥塞控制,慢启动和拥塞避免算法(慢启动)
2.TCP包头(20固定[+40可选项])
① 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16 位表示的,可推算计算机的端口个数为0-65535(2^16)个,服务器的端口固定的;客户端的端口随机的
cat /etc/services 查询常见服务器端口号,常见的端口号:
http 80/tcp https 443/tcp ssh 22/tcp ftp 21/tcp 文件传输协议 tftp 69/utp smtp 25/tcp 邮件
pops 110/tcp dns 53/tcp/udp dhcp udp 67 68 自动获取IP telnet 23/tcp 远程主机 mysql 3306/tcp 数据库
oracle 1521/tcp sql server 1433/tcp smb 445 139 137 138/udp windows共享 snmp 161udp 监控管理
② 序列号:表示本报文段所发送数据的第一个字节的编号。在TCP 连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始
③ 确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号
④ 数据偏移:表示TCP 报文段的首部长度,共4位,由于TCP 首部包含一个长度可变的选项部分,需要指定这个TCP 报文段到底有多长。它指出TCP 离报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32 位( 即4 个字节为计算单位),4 位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
⑤ 标记位 :(下篇讲到三次握手、四次挥手中很重要)
URG :表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer )只有当URG=1 时才有效,URG=0无效
ACK :表示是否前面的确认号字段是否有效。ACK=1 ,表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为1, 带ACK 标志的TCP 报文段称为确认报文段
PSH :提示接收端应用程序应该立即从TCP 接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1 ,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP 接收缓冲区中
RST :如果收到一个RST=1 的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST 标志的TCP 报文段称为复位报文段
SYN :在建立连接时使用,用来同步序号。当SYN=1 ,ACK=0 时,表示这是一个请求建立连接的报文段;当SYN=1 ,ACK=1 时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN 标志的TCP 报文段称为同步报文段
FIN :表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1 ,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN 标志的TCP报文段称为结束报文段
⑥ 窗口大小:表示现在充许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量
⑦ 校验和:提供额外的可靠性
⑧ 紧急指针:标记紧急数据在数据字段中的位置
⑨ 选项部分:其最大长度可根据TCP 首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40 字节
常见选项:
最大报文段长度:Maxium Segment Size ,MSS
窗口扩大:Windows Scaling
时间戳: Timestamps
3.TCP 协议PORT
传输层通过port号,确定应用层协议
IANA:互联网数字分配机构(负责域名,数字资源,协议分配)
0-1023 :系统端口或特权端口( 仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-49151 :用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer) ,1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)
49152-65535:动态端口或私有端口,客户端程序随机使用的端口
cat /proc/sys/net/ipv4/ip_local_port_range 查询动态端口或私有端口范围(linux)
4.TCP 超时重传
异常网络状况下(开始出现超时或丢包),TCP 控制数据传输以保证其承诺的可靠服务
与TCP 超时重传相关的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1 ,指定在底层IP 接管之前TCP 最少执行的重传次数,默认值是3
/proc/sys/net/ipv4/tcp_retries2 ,指定连接放弃前TCP最 最多可以执行的重传次数,默认值15 (一般对应13 ~30min)
5.TCP固定窗口:知道window size,sender固定发送n,receiver回复ACK n+1
滑动窗口:不知道window size,例如sender发送4个,receiver回复ACK 3,代表只收到2个,window size=2,下次sender只发送2个
6.拥塞控制:TCP 为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性
慢启动、拥塞避免、快速重传、快速恢复
/proc/sys/net/ipv4/tcp_congestion_control 查看当前所使用的拥塞控制算法
(3)UDP特性
1.特征
工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性
2.包头
四、Internet 层
Internet 层的协议:ICMP、ARP、RARP、IP 等协议
(1)ICMP协议, 在Internet相对较外层
① 用于在IP主机、路由器之间传递控制消息,多用于检查状态
② 经典命令:ping命令
③ ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。向目标主机长时间、连续、大量地发送ICMP数据包,会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命,例如 可以大量的ping一个地址。
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 禁止ping,不回复别人的ping请求(默认是0)
④ 抓包工具查看时,8代表是发送、0代表是返回
(2)ARP 地址解析协议
① 根据IP地址,利用广播,请求网络上的所有主机,并接收返回消息,以此确定目标的物理mac地址。也就是:有IP地址,得到mac地址。
② 用途:重启,重启网络服务时,避免IP地址冲突;查询mac地址
③ ARP表 查询命令:ip neigh / arp -n
④ arp命令:
arp -n 查看IP地址和mac地址的关系(linux),有动态、静态、永久三种关系
arp -d 删出一条对应关系
arp -s IP mac 手动加一条(永久)
arping -I ensX IP地址 查看IP地址对应的mac地址
arp -a 查看IP地址和mac地址的关系(windows)
⑤ 也可以被攻击,攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗
(3)RARP 反向ARP协议
有mac地址,得到IP地址
例:无盘工作站(银行,确保数据安全)
(4)IP协议
1.特征
运行于 OSI 网络层
面向无连接的协议
独立处理数据包
分层编址
尽力而为传输
无数据恢复功能
2.包头
① 版本: 占4 位,IP 协议的版本目前的IP 协议版本号为4,Ipv4
② 首部长度: 占4 位, 可表示的最大数值是15 个单位,一个单位为4 字节,因此IP 的首部长度的最大值是60 字节
③ 区分服务: 占8 位, 用来获得更好的服务, 在旧标准中叫做服务类型,但实际上一直未被使用过. 后改名为区分服务. 只有在使用区分服务(DiffServ) 时, 这个字段才起作用. 一般的情况下都不使用
④ 总长度: 占16 位, 指首部和数据之和的长度, 单位为字节, 因此数据报的为最大长度为 65535 字节,总长度必须不超过最大传送单元 MTU
⑤ 标识: 占16 位, 它是一个计数器, 通常,每发送一个报文,改值会加1,也用于数据包分片,在同一个包的若干分片中,该值是相同的
⑥ 标志(flag): 占3 位, 目前只有后两位有意义
DF:Don‘t Fragment当 ,中间的一位,只有当 DF=0 时才允许分片
MF:More Fragment ,最高位,MF=1 表示后面还有分片。MF=0表示最后一个分片
⑦ 片偏移: 占12 位, 指较长的分组在分片后,该分片在原分组中的相对位置. 片偏移以8 个字节为偏移单位
⑧ 生存时间: 占8 位, 记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个8 bit 字段. 推荐的初始值由分配数字 RFC 指定, 当前值为64,发送 ICMP应答时经常把 TTL 设为最大值 255
linux 默认为64 windows 默认为128
cat /proc/sys/net/ipv4/ip_default_ttl 查询本机的TTL
echo 128 > /proc/sys/net/ipv4/ip_default_ttl 修改自动ttl,伪装为windows
⑨ 协议: 占8 位, 指出此数据报携带的数据使用何种协议以便目的主机的IP 层将数据部分上交给哪个处理过程, 1表示为 ICMP协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为UDP协议
⑩ 首部检验和: 占16 位, 只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法
⑪ 源地址和目的地址: 都各占4 字节, 分别记录源地址和目的地址
3.在抓包后显示信息
好了,感觉内容有点多哈,大家慢慢消化吧,如果有什么不太懂的,可以评论,大家一起探讨~~~ 这篇就到这里了。。。