IP层
文章平均质量分 50
TCH_world
记录职业生涯的点滴
展开
-
linux数据包ip层转发流程
基于内核2.6.29原创 2022-05-29 21:17:39 · 658 阅读 · 0 评论 -
linux路由选择流程
linux路由确认原创 2022-05-29 19:59:59 · 803 阅读 · 0 评论 -
netfilter之nat初始化
nat功能是我们使用非常广泛,包括SNAT、DNAT,很多功能是基于NAT实现。(1)SNATSNAT简称源地址转换,比如一个公司只有一个共有IP,公司下面有许多私有设备,私有设备都分配了私有地址,私有地址不能在互联网中传递,那么就要做源地址转换,私有设备要访问互联网就会把源地址转换为公司的共有IP,通过这个共有IP访问互联网。(2)DNATDNAT简称目的地址转换,也就是把目的地...原创 2018-12-11 22:32:14 · 661 阅读 · 0 评论 -
netfilter链接跟踪实现之ipv4_confirm函数
ipv4_confirm函数注册在LOCAL_IN链、POST_ROUTING链,这个是netfiler的两个出口,从函数名字看得出函数的功能是链接跟踪确认,下面来分析这个函数。static struct nf_hook_ops ipv4_conntrack_ops[] __read_mostly = {... { /*数据包最后出去在POSTROUTING链上连接跟踪确认*/ ...原创 2018-12-11 20:51:11 · 1339 阅读 · 0 评论 -
netfilter链接跟踪实现之nf_conntrack_in函数
1、数据包方向要分析连接链接跟踪的实现我们就要先分析数据包在协议栈中的方向,总的来说主要分为三个方向:本机转发的数据包、本机接受的数据包、本机产生的数据包,我们之前分析了连接跟踪只在四个链上注册了钩子函数,分别是PRE_ROUTING链、OUT链、LOCAL_IN链、POST_ROUTING链。PRE_ROUTING链上注册的是ipv4_conntrack_in,OUT链上注册的是ipv4_c...原创 2018-12-10 00:02:52 · 3218 阅读 · 0 评论 -
netfilter之链接跟踪做nat
上一节我们将了NAT是基于链接跟踪实现的,当一条链接跟踪建立要改变它的tuple的reply方向才能做nat,这个链接跟踪的nat是函数nf_nat_setup_info实现1、nf_nat_setup_infonf_nat_setup_info对链接跟踪的做NAT,只会改变链接跟踪reply方向的ip、端口,不会改变数据包的ip、端口,数据包的DAT在上一节已经介绍了是在PRE_ROUT...原创 2018-12-14 00:01:02 · 1211 阅读 · 0 评论 -
netfilter之nat代码分析
nat主要在PRE_ROUTING、OUTING、LOCAL_IN、POST_ROUTING四个链上注册了hook函数,PRE_ROUTING、OUTING这个两个链上做DNAT,LOCAL_IN和POST_ROUTING链上做SNAT。nat表没有LOCAL_IN链,但在LOCAL_IN上注册了钩子函数nf_nat_fn,主要作用是修改数据包的源端口。static struct nf_ho...原创 2018-12-12 23:53:52 · 1314 阅读 · 0 评论 -
tcp_v4_connect函数
tcp_v4_connect函数初始化一个对外的连接请求,创建一个SYN包并发送出去,把套接字的状态从CLOSE切换到SYN_SENT,初始化TCP部分选项数据包序列号、窗口大小、MSS、套接字传送超时等,下面分析tcp_v4_connect函数。 1、初始化工作输入参数sk:套接字指针。uaddr:对端ip和端口。addr_len:套接字地址长度。检查目的IP长度、协...原创 2018-12-02 23:52:22 · 1669 阅读 · 1 评论 -
本机发送IP数据包
本地发送IP数据包是指数据包包括:传输层产生的数据包、裸IP、SCTP、IGMP,TCP和网络层的接口函数是ip_queue_xmit,UDP和网络层接口函数是ip_push_pending_frames,数据包对外发送在内核要做以下几件事情。a、查找下一个站点IP层需要知道完成数据包输出功能的是那个网络设备,以及下一个站点的路由信息,寻找路由的任务由ip_route_output_flo...原创 2018-11-17 17:12:14 · 2247 阅读 · 0 评论 -
ip层本机接受数据包处理
当数据包的目的地址是本机是,Ip_rcv_finish函数就会将skb->dst->input函数指针初始化为ip_local_deliver,ip层本地发送数据包也分为两个阶段分配分别有两个处理函数:ip_local_deliver和ip_local_deliver_finish。本地转发数据包的首要任务是重组数据包,前送的数据包可以不要重组,前送可以转发每个分片数据包。一、本地...原创 2018-11-17 10:54:22 · 577 阅读 · 0 评论 -
IP层笔记
一、网络层的任务 数据包进入网络层后主要做以下几个处理,无论是接受数据包还是发送数据包。1、数据包校验和检查 数据包如有错误就会被丢掉,错误包括检验和不正确、协议头草除了边界等等。2、防火墙对数据包做过滤 网络防火墙就是大名鼎鼎的netfiler框架,比如我们应用层通过iptable命令配置的规则,获取我们写的内核模块也就是在netfilter中加入钩子函数,防火墙主要有四个...原创 2018-11-11 16:45:33 · 743 阅读 · 0 评论 -
ip_rcv_finish
上一章我们分析了ip_rcv,这个函数主要是对数据包做各种正确性验证,然后调用掉网络过滤子系统的在PRE_ROUTEING链上的回调函数,经过网络子系统的处理在调用ip_rec_finish,ip_rcv_finish主要的工作:1)、确定数据包是前送还是在本机协议栈上传,如果是前送要确保输出网络设备和下一个接受栈的地址。2)、解析和处理部分IP选项。 1、获取路由信息skb-...原创 2018-11-15 00:14:10 · 1114 阅读 · 0 评论 -
ip_append_data函数
ip_append_data函数是传输层调用缓冲要发送的数据包,主要调用协议数据包有UDP数据包、TCP管理报文。当数据包缓冲到一定大小(PMTU)就调用ip_push_pending_frames函数将数据包发送给IP层,这样可以提高效率,由ip_push_pending_frames维护IP协议头。如果传输层要提高响应时间,可以在每次调用ip_append_data函数后立即调用ip_push...原创 2018-11-18 17:47:53 · 993 阅读 · 0 评论 -
ip_append_page函数
当应用层调用sendmsg将数据包从用户空间地址移动到内核空间地址,这个复制是ip_append_data函数的输入参数getfrag函数完成。内核还为应用层提供了sendfile接口,它优化数据包的发送复制,这个接口称为零拷贝。sendfile接口只有当网络设备支持Scatter/Gather I/O功能才能使用,这时的ip_append_page不需要复制任何数据,内核只需要将frags数组初...原创 2018-11-18 23:23:16 · 504 阅读 · 0 评论 -
ip_push_pending_frames函数
当调用ip_append_data和ip_append_page把传输层数据包复制到内核缓冲区,接下来调用ip_push_pending_frames函数发送数据包。struct sock *sk是ip_push_pending_frames函数唯一的输入参数,sk中包含了指向缓冲区队列sk_write_queue数据结构的指针。1、取发送缓冲区ip_push_pending_fra...原创 2018-11-19 00:03:25 · 842 阅读 · 0 评论 -
网络层数据包接受/发送API
网络层的数据包主要有三个流向:本机接受数据、前送数据包、本机产生数据包,其中数据包的流向要经过Netfiler的5个链子上的钩子函数处理,5个链子分别是:NF_INET_PRE_ROUTING、NF_INET_LOCAL_IN、NF_INET_FORWARD、NF_INET_LOCAL_OUT、NF_INET_POST_ROUTING,处理流程已经API的关系如下图:网络层数据包接受/发送的A...原创 2018-11-20 22:05:59 · 685 阅读 · 0 评论