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

运作模型:

 

2TCP/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

 

 

 

二、数据链路层 帧

1Ethernet 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

E-mail

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.在抓包后显示信息

 

 

 好了,感觉内容有点多哈,大家慢慢消化吧,如果有什么不太懂的,可以评论,大家一起探讨~~~ 这篇就到这里了。。。

 

posted @ 2017-08-31 09:54  alonghub  阅读(3019)  评论(0编辑  收藏  举报