iptables ip报文 tcp报文 tcp三次握手四次端口 有限状态机 状态转移

linux 网络防火墙

netfilter :是内核的一个frame :框架

iptables :数据报文过滤:nat mangle等规则生成工具

网络知识: IP报文首部   tcp报文首部

hdr len   报头首部长度  给出的字节需要乘以横向 32/8 = 4字节

Type of Service(服务类型)    服务类型

Total Length(总长度)          报文总长度    包括表头与内容 (Data) 部分。最大可达 65535 bytes。   注: 报文总长度 - 报文首部长度 就是data长度  里面还有 tcp 报文或者 udp报文长度 如果是应用层  还有http

Identification                段标识符 :一个ip报文 在网络,  两个物理设备支持的大小字节不一样的话,  A 主机发送 1500字节,到A路由,但是路由支持500字节,所以将会将报文 分片,到B路由的话又支持1500字节,根据的就是段身份标识,如果身份id一样,就是同一个报文。

MF : more identification  更多的身份段 即更多的分包

DF : dont fragment  不允许分片,如果你的大小不跟我的一样,我还不允许分片,所以就告诉此路不通。

fragment offset  片偏移量   比如 第一个 分片是1-100 第二个101开始了

Time To Live(TTL, 存活时间)      报文不能无限在互联网上游荡,必须有限制  表示这个 IP 封包的存活时间,范围为 0-255。当这个 IP 封包通过一个路由器时, TTL 就会减一,当 TTL 为 0 时,这个封包将会被直接丢弃。说实在的,要让 IP 封包通过 255 个路由器,还挺难的再

Protocol Number(协定代码)
  里面 可能有tcp首部,也可能是udp首部,二者只能选其一, 还有icmp互联网控制消息协议,不是四层 也不是三层, 是三层半,    ip报文能识别其data装在的协议类型,  该段就是这个重要

来自传输层与网络层本身的其他数据都是放置在 IP 封包当中的,我们可以在 IP 表头记载这个 IP 封包内的资料是啥, 在这个字段就是记载每种数据封包的内容啦!在这个字段记载的代码与相关的封包协议名称如下所示:


IP 内的号码


封包协议名称(全名)


1


ICMP (Internet Control Message Protocol)


2


IGMP (Internet Group Management Protocol)


3


GGP (Gateway-to-Gateway Protocol)


4


IP (IP in IP encapsulation)


6


TCP (Transmission Control Protocol)


8


EGP (Exterior Gateway Protocol)


17


UDP (User Datagram Protocol)

首部校验核 存放首部校验码

?Source Address

?还用讲吗?当然是来源的 IP 地址,从这里我们也知道 IP 是 32 位喔!

?Destination Address

?有来源还需要有目标才能传送,这里就是目标的 IP 地址。

?Options (其他参数)

?这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳、严格与宽松之来源路由等。

?Padding(补齐项目)

?由于 Options 的内容不一定有多大,但是我们知道 IP 每个数据都必须要是 32 bits,所以,若 Options 的数据不足 32 bits 时,则由 padding 主动补齐。

你只要知道 IP 表头里面含有: TTL, Protocol, 来源地址与目标地址也就够了!而这个 IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的 TTL ,就能了解到这个 IP 将被如何传送到目的端吶。后续各小节我们将介绍 IP 的组成与范围,还有 IP 封包如何传送的机制 (路由) 等等。

要想承载应用协议,众多的上层应用协议是通过tcp报文再次封装以标识。

实际通信的是两个进程在通信,怎么评判主机间的通信呢, 靠ip看不出,对tcp 要看端口号,udp也是要看端口,所以要涉及到端口号了,端口号表示范围是0-65535。 接下去就是tcp报文的介绍。

一般linux 主机 0-1024 端口只能管理员才能使用的,其他用户都没有权限。  在bsd主机上是5000以上的的端口作为客户端去链接服务器的时候。

linux一切皆文件,所以每打开一个端口,就称为打开了一个套接字文件。

tcp====报文

?Source Port & Destination Port (来源埠口 & 目标端口)

?什么是埠口(port)?我们知道 IP 封包的传送主要是藉由 IP 地址连接两端, 但是到底这个联机的通道是连接到哪里去呢?没错!就是连接到 port 上头啦! 这个目标与来源 port 的纪录,可以说是 TCP 封包上最重要的参数了!

?Sequence Number (封包序号)
    Acknowledge Number (回应序号)

tcp报文是传输控制协议,是一种可靠的协议,要三次握手,三次握手之后,每次报文传输都需要确认,一方告诉另外一方, 既发送方随机发送的号给接收方,每次 序列号在第一次的基础上加一,而确认号是接收方在序列号加一后给,发送方。

但是不能一次发一个,很慢,比如传电影,一个报文一个的发很慢, 所以就得 发一批,接收方逐个确认,那发送多少呢?这就出现滑动窗口的概念, 窗口大小 :双方用来协商 发送大小,接收大小的大小的。 如果发多了,就会导致报文被丢弃。丢弃了怎么办?我们知道 tcp 是一种可靠的协议,一旦丢弃,收不到发送发的报文,就不会有该发送方的序列号,没有序列号 接收方就不会给发送方回复确认方,所以,发送方就会重传,那重传时间是多少呢? 是有个计时器的, 发送方重传时间有个标准

由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号,可以让收受端重新将 TCP 的数据组合起来。

为了确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。

Headerlength  首部长度

reserved  保留位

八个 目前还有6个   tcp的标志位

URG  紧急指针   0 无效  1 有效

ACK  用于说明确认号是否有效

PSH 推送, 一旦 用于推送是绝对不能在缓冲中停留的,必须要立刻送到内核,需要内核优先处理的报文

RST 重置    reset 链接发生抖动时候 不多解释  对我们意义不大。如果 RST 为 1 的时候,表示联机会被马上结束,而无需等待终止确认手续。这也就是说, 这是个强制结束的联机,且发送端已断线。

SYN  发生同步请求的  建立联系的第一个请求是发送的

FIN  断开链接的发送的第一个

windows size  滑动窗口大小  上面 序列号已经介绍

?Checksum(确认检查码)

urgent pointer

option

data

对于tcp的data  有可能还有应用层的报文。

一个真正的报文  可能真正的数据量很小,

对于一个数据  前面比如是应用层的http协议,对于tcp来说 前面的都是数据,来进行封装,对于 ip报文封装时候,前面就都是数据了。 对于以太网来说,前面的就都是数据了,帧首部

这些数据如何偶要将其转换为能够通过网络发送的数据格式

有文件格式

有 二进制格式

tcp 的三次握手  四次端口  不同状态

三次握手

A 主机跟B主机

默认大家都是CLOSED状态,   tcp 状态

A主机发送到 b主机请求的第一次报文就是从closed 主动打开了。 b主机接收到A 第一次的syn的请求报文就从closed 到lisetened 状态是 被动打开,

a主机第一次给b主机发送请求报文  syn=1  ack=0

b主机第一次回复给a主机的报文 由于是第一次 syn一定是1  ack加一   syn =1 ack=1

b主机发送给a主机状态就从listen变成 syn_recd

a主机接收到b主机的第一次回复的 就从主动打开状态 变成 syn_send 状态

b再次接收到a回复的即变成 established

有限状态机: 所有的tcp状态

四次断开

客户端发送报文包含 FIN断开标志

发送关闭请求的叫主动关闭方,主动关闭方   发送 fin,主动方变成 timewait1

被动关闭方从established 方  回应ack  。被动方开始进入closed wait

被动关闭方再次发送fin 给 这之间都是closedwait

主动方接受到被动方的fin之间都是timewait2  ,接受到了就回复ack  但是其不能立刻关闭, 需要等待 2倍的msl时间才能closed

被动关闭方接受到ack就变成了closed  这之间过程状态是last_ack

这些个状态叫tcp的状态转移

而这些个的状态的转移机制叫tcp的有限状态机

通过我们知道tcp的

防火墙

什么是防火墙:

规则:匹配标准

工作在主机或者网络的边缘,对进出的数据报文,按照 事先定义 好的规则中的标准进行检查,一旦触发符合定义的规则,就按照规则定义的动作进行的一系列组件。

防火墙:硬件        软件:规则(匹配标准  处理办法)

能防火是规则

防火墙是一个framwork,框架。  可以是纯粹的硬件  可以使纯粹的软件

默认规则:

全开发  :堵     古代抓人拿画像

或者全关闭:通  有令牌可以通过

规则 : 匹配标准

IP : SIP  DIP

TCP: SPORT DPORT       还可以用标志位标记根据标志位匹配      比如第一次  SYN=1 ACK=0 RST=0 FIN=0  第二次握手  SYN=1 ACK=1 FIN=0 RST=0  第三次握手也就是established   ACK=1 SYN=0 RST=0 FIN=0

UDP :SPORT  DPORT

ICMP: icmp_type  使用报文标记, 比如  ping  网关不可达  主机不在线  请求超时  主机无法解析

根据匹配标准 对来往的报文就行过滤就是防火墙

数据报文过滤

linux 内核中实现了网络功能,  规则不能放在用户空间,所以是在内核上的,但是用户不能跟内核打交道,于是就有人选择了这样一套机制, 在tcp/ip实施的位置上,这几个位置是开放的,开放给用户空间的一个命令,这个命令缩写的规则会立即送到内核的tcp/ip

协议栈的那几个位置。

用户设计的命令 跟内核的某个位置,  这两个 叫内核的工作框架,命令叫用户管理工具,

在内核中设置了一个机制,   这个机制产生几个系统调用  这几个系统掉有某个特定的应用程序,来完成系统调用。当然不是说所有的应用程序都不能跟内核打交道。通过某些机制可以达成,比如mkdir 可以和 硬盘中内核打交道

机制

linux 2.0

参考openBSD 移植

命令 ipfw/机制firewall

linux2.2

命令 ipchain/firewall

linux 2.4

iptables/netfilter

对于2.4 而言 netfilter就是工做在内核可以方规则的位置  而iptables就是可以产生系统调用,在内核中放置规则的命令应用程序

iptales是由四个表5个链组成

所以我们过滤必须放置报文要经过的地方

首先 ip报文经过了以太网卡,解开帧,交给 tcp协议栈处理,先去看ip首部,源ip 目的ip ,是本机就送到本机,不是本机的就需要转发了, 比如我们打开本机转发功能 /proc/sys/net/ipv/ip_forward 经过本机转发的报文是不会让tcp ip协议栈转发到本机的yoghurt空间跟应用程序打交道的。

有几种流向?  3 种 流向数据包

1 从外部到达本机内部,

2 从本机内部 出去的请求

3 从外部进入进行转发 到外面

在这三个位置上 报文必须要经过某个位置

tcp/ip 协议栈有路由表,用于路由决策   只要进入到本机网卡的报文,首先都要路由决策再决定是进入到内部还是转发。

这些个位置是几个钩子函数

hocks:function  钩子函数

任何经过这些个位置的报文都要经过钩子的吊起来抽打一遍,一旦满足就执行动作。

其实还有两个位置 钩子函数  是经过入口网卡后为经过路由表决策前的更改

出口网卡出去前,在路由决策做出之后,在发送出去之前进行的更改。

路由转换时本机内部有一个net回话表

路由转换 是报文刚刚进入本机的一刹那就要改的,否则如果不改路由决策已决定,根本不用等出 取的时候来的及改的、

hock function :钩子 函数

prerouting

input

output

forward

postrouting

在每个钩子位置函数都可以放置规则,规则多了就像链一样 所以就有五个规则链

规则链 :

PREROUTING

INPUT

OUTPUT

FORWARD

POSTROUTING

filter(过滤功能): 表     这个功能的这三个链 相当于行列 就相当于表    所以命令叫iptables

INPUT

OUTPUT

FORWARD

nat (地址转换):

PREROUTING

OUTPUT 链也可以实现

POSTROUTING

其实还有两个表

mangle (把报文拆开 ,修改之后再缝上): 主要修改报文的其他首部 比如ttl值 可以在五个链上进行

PREROUTING

INPUT

OUTPUT

FORWARD

POSTROUTING

row(不做任何修改,还原成原来的):表 既不到内部 也不转发,什么也不做  只能放在两个链上

PREROUTING

OUTPUT

总结: iptales是由四个表5个链组成

如上 同一个链  可以防止不同的表,那可以,交叉使用吗?不可以,这些表的功能不一样,是不可以放的

虽然不能交叉存放,但是可以按类分别存放的。

优先次序是啥?

PREROUTING: 1 raw  2 mangle  3 nat

INPUT: 1 mangle 2 filter

OUTPUT: 1 raw  2 mangle 3 nat 4filter

FORWARD: 1 mangle 2 filter

POSTROUTING: 1 mangle  2 nat

比如500条规则

我们是否 可以给规则归类,使用自定义链 ?比如web 的类和 mysql的 类 或者ssh类

可以自定义,但是必须是默认链被调用后,自定义发送作用

比如500条太多,抽出200  比如200-400,当前面200处理完 201 条时候,跳转动作,到抽出的,如果没匹配到,就又跳回去,继续往下 走

什么样的需要精简呢?

比如只有那些访问的是web服务的独立出来,

使用自定义链也是提高效率的   只有那些同类的才可以

所以可以使用自定义链,但只能被调用时候才能发挥作用,而且如果没有自定义连的人设规则匹配,还会有返回机制。

用户可以删除自定义的空恋

默认链无法删除

每一条规则都有两个内置的计数器

一个记录 被匹配到的报文的个数

一个记录被匹配的报文大小体积之和

规则:匹配标准,处理动作

未完待续。。。。

时间: 2024-10-04 22:25:33

iptables ip报文 tcp报文 tcp三次握手四次端口 有限状态机 状态转移的相关文章

TCP协议的三次握手+四次断开

TCP协议的三次握手 1.TCP/IP协议概述 TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础.TCP/IP是网络中使用的基本的通信协议.虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录.文件传输和电子邮件等,而TCP协议和IP协议是保证数

TCP连接为什么三次握手四次挥手

前几天面试某电商被问住了,问的很细,我就说了说连接过程,必然凉凉.在csdn上找了一篇很详细的博客.https://blog.csdn.net/hyg0811/article/details/102366854 看之前先给解释一下ACK.SYN等缩写的含义. SYN: 同步序列编号(Synchronize Sequence Numbers).是TCP/IP建立连接时使用的握手信号.在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到

TCP传输的三次握手四次挥手策略

TCP传输的三次握手: 首先发送端(前端)发送一个带有SYN标志的数据包给对方. 1.  接收端(后端)收到后,回传一个带有SYN/ACK标志的数据包以表示传达确认信息. 2.  发送端(前端)在回传一个带ACK标志的数据包,代表"握手"结束 3.  若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的方式发送相同的数据包 断开一个TCP连接则需要"四次挥手": 第一次挥手:主动关闭方发送FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭

tcp协议的三次握手四次挥手

第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认:SYN:同步序列编号 第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包和一个ack包,此时服务器进入SYN_RECV状态: 第三次握手:客户端收到服务器的SYN包和ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手. 完成三次握手,客户端与服务器开始传送数据 第一次挥手:客户端A发送一个"FIN

TCP 传输的三次握手四次挥手策略

为了准确无误地把数据送达目标处,tcp协议采用了三次握手策略.用tcp协议把数据包送出后,tcp不会对传送后的情况置之不理,它一定会向对方确认是否是成功送达.握手过程中使用了tcp的标志:syn和ACk. 发送端首先发送一个带SYN标志的数据包给对方.接收端收到后,会穿一个带有syn/ack标志的数据包以示传达确认信息. 最后,发送端再回传一个带ACK标志的数据包,代表"握手"结束. 若是在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包. 断开一个TCP链接则

关于tcp/ip的一场美好的邂逅(三次握手四次挥手)

基于对tcp/ip的的三次握手,四次挥手不是很了解,所以花了一点时间查询了相关知识,并对其知识点进行了汇总,并且给自己理了下记忆思路. 三次握手 ① 第一次握手 客户端发送请求(syn:synchronization),并选择一个初始化序号(seq:sequence) syn=1;seq=x 客户端状态变为(syn-sent:synchronization_sent) ② 第二次握手 服务器做出响应:listen---->syncrcvd(synchronizationrecieved); 从监

【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)

一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不同功能的协议组合在一起构成的协议簇 利用一组协议完成OSI所实现的功能 1. TCP/IP 协议簇中的相关协议 TCP/IP协议簇--应用层: TCP/IP协议簇--主机到主机层: TCP与UDP对比: TCP相关报文结构: 源端口:即本地发起连接的端口 目标端口:即要访问的服务的端口 序列号:因为

重学TCP/IP协议和三次握手四次挥手

计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式.是否需要发送一个应答信息.这些规则被称为网络协议. 为什么要对网络协议分层? 简化问题难度和复杂度.由于各层之间独立,我们可以分割大问题为小问题. 灵活性好.当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响. 易于实现

【转】TCP建立连接三次握手和释放连接四次握手

在谈及TCP建立连接和释放连接过程,先来简单认识一下TCP报文段首部格式的的几个名词(这里只是简单说明,具体请查看相关教程) 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号.  确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到