linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘
学习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.在抓包后显示信息
好了,感觉内容有点多哈,大家慢慢消化吧,如果有什么不太懂的,可以评论,大家一起探讨~~~ 这篇就到这里了。。。
linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘的更多相关文章
- 温故知新--计算机网络 iso/osi七层模型 tcp/ip四层模型
ISO七层模型由下至上为1至7层,分别为: 应用层(Application layer) 表示层(Presentation layer) 会话层(Session layer) 传输层(Transpor ...
- OSI七层模型:TCP/IP && HTTP && WebSocket && MQTT
OSI七层模型分为 物理层: 建立.维护.断开物理连接 处理bit流 数据链路层,将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正 处理数据帧 Frame 网络层,进行逻辑地址 ...
- 关于TCP/IP协议栈(转)
1. TCP/IP协议栈 与OSI参考模型不同,TCP/IP协议栈共有4层,其中网络接口层对应OSI中的物理层和数据链路层,应用层对应OSI中的应用层.表示层和会话层. 在网络接口层的主要协议有:AR ...
- 关于TCP/IP协议栈
1. TCP/IP协议栈 与OSI参考模型不同,TCP/IP协议栈共有4层,其中网络接口层对应OSI中的物理层和数据链路层,应用层对应OSI中的应用层.表示层和会话层. 在网络接口层的主要协议有:AR ...
- Linux 从网卡到TCP IP协议栈数据流跟踪与审计
前沿 在学代码审计,然后最近做Linux协议栈的审计,发现Linux不愧是一个久经考验的系统,本来以为可以找到个DoS的,结果发现其在TCP/IP协议栈的链路层实现,利用了各种技术,用来提高性能与安全 ...
- TCP/IP协议栈概述及各层包头分析
TCP/IP协议栈中各层包头的分析 Protocol列表示的是该数据包最高层对应的协议,Length列表示该包的长度(包括从底层的协议到最高层的协议,其中包头一般是,链路层14字节,IP20字节,TC ...
- TCP/IP协议——TCP/IP协议栈及框架
TCP/IP协议同ISO/OSI模型一样,也可以安排成栈形式.但这个栈不同于ISO/OSI版本,比ISO/OSI栈少,所以又称之为短栈.另外,需要知道的是:TCP/IP协议栈只是许多支持ISO/OSI ...
- TCP/IP协议栈基础知识
设计思想 把一个复杂的事物进行分层划分,使得每个部分变得相对简单 分层模型 OSI分为7层模型 tcp/ip分为四层模型 应用层(Application) 传输层(Transport) 网络层(I ...
- TCP/IP协议栈---网络基础篇(3)
TCP/IP协议栈 在网络中实际使用的是TCP/IP,OSI是参考模型. TCP/IP协议栈 – 是由一组不同功能的协议组合在一起构成的协议栈 – 利用一组协议完成OSI所实现的功能 应用层协议 传输 ...
随机推荐
- 如何优雅的设计React组件
如何优雅的设计 React 组件 如今的 web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家会觉得 j ...
- Python基础---python中的异常处理
Python中的异常处理 一.什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) ...
- Android ANR异常解决方案
1,ANR异常的解释: ANR(android not response)即应用程序无响应,在用户操作在5秒内没有响应的话就会出现ANR异常: 2,那为什么会出现ANR异常呢? Android系统中处 ...
- 使用JavaScript生成二维码教程-附qrcodejs中文文档
使用javascript生成二维码 依赖jquery 需要使用到的库 https://github.com/davidshimjs/qrcodejs DIV <div id="qrco ...
- python 标准模块shlex
shlex模块为基于Uninx shell语法的语言提供了一个简单的lexer(也就是tokenizer) 举例说明: 有一个文本文件quotes.txt This string has embedd ...
- java 中 “文件” 和 “流” 的简单分析
java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 / ...
- IT连创业系列:App产品上线后,运营怎么搞?(中)
等运营篇写完,计划是想写一个IOS系列,把IT连App里用到和遇到的坑都完整的和大伙分享. 不过写IOS系列前,还是要认真把这个运营篇写完,接下来好好码字!!! 上篇说到,我们计划去一次富士康门口,拉 ...
- 关于String中的不变模式
不变模式 不变模式就是为了尽可能的去除并行中的同步操作,提高并行程序的性能,可以使用一种不可改变的对象,依靠对象的不变性,可以确保其在没有同步操作的多线程环境中依然始终保持内部状态的一致性和正确性.并 ...
- ThinkPHP中处理验证码不显示问题
在调用验证码之前加上 ob_clean(); 不显示验证码的代码: public function verify(){ $Verify = new \Think\Verif ...
- Wannafly挑战赛3 record
B 遇见 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld题目描述A和B在同一条路上,他们之间的距离为 k ...