<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cc0410的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cc0410</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cc0410]]></copyright><item><title><![CDATA[Android 关于IPV6 DNS的问题]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/124175940</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/124175940</guid><author>cc0410</author><pubDate>Thu, 14 Apr 2022 17:46:41 +0800</pubDate><description><![CDATA[解决android ipv6 dns的问题]]></description><category></category></item><item><title><![CDATA[记录DHCP IPV6遇到的问题（一）]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/120075816</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/120075816</guid><author>cc0410</author><pubDate>Fri, 03 Sep 2021 10:39:42 +0800</pubDate><description><![CDATA[进行DHCP IPV6连接的时候，经常遇到设备获取过一次地址后，在短时间内再次重新主动进行一次DHCP IPV6连接，会连接失败，从抓包来分析就是上行服务器不响应。



通过与服务器方的沟通，了解到一点，服务器会记录请求设备的mac和DUID（是唯一标识一台DHCPv6设备(包括客户端、中继和服务器)的标识符,用于DHCPv6设备之间的相互验证），发现的设备DUID会一直变动，导致校验失败，所以服务器就不响应了。

找到原因，接下来就到了分析源码的时候了：


    /*
     * 2 bytes.]]></description><category></category></item><item><title><![CDATA[Android流量统计]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/108747407</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/108747407</guid><author>cc0410</author><pubDate>Wed, 23 Sep 2020 11:14:29 +0800</pubDate><description><![CDATA[最近做个需求要在native层的某个应用中加入流量统计，所以研究了一下Android自带的流量统计代码，将JNI中的代码直接移植到了我需要的地方

Android提供的流量统计功能在TrafficStats.java类中，包含以下几个：

public static long getMobileTxPackets() //Return number of packets transmitted across mobile networks since device boot
	public static l]]></description><category></category></item><item><title><![CDATA[Android 调整DNS顺序]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/108658272</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/108658272</guid><author>cc0410</author><pubDate>Fri, 18 Sep 2020 10:28:12 +0800</pubDate><description><![CDATA[目前IPV6的大力推广，所以现在越来越多的Android设备都开始支持IPV6了，那么在网络上就是IPV4//IPV6双栈连接

IPV4/IPV6双栈连接那么系统就会得到下发的ipv4 dns服务器和ipv6 dns服务器，DNS服务器地址在dns协议中保存在一个数组中，后面进行DNS请求也是对该数组进行遍历，所以首先进行请求的目标DNS就是保存在数组中的第一个（具体DNS原理可以查看

https://blog.youkuaiyun.com/cc0410/article/details/103288483这篇文章）]]></description><category></category></item><item><title><![CDATA[Android有线IPV6总结（二）:内核中RS与RA的一点学习]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/108587352</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/108587352</guid><author>cc0410</author><pubDate>Tue, 15 Sep 2020 10:00:28 +0800</pubDate><description><![CDATA[RS：Router Solicitation路由器请求

RA：Router Advertisement路由器公告



在Android系统中我们想要打开一个网络接口(比如eth0)的ipv6功能，用命令的话我们有如下两种办法：

1，echo 0 &gt; /proc/sys/net/ipv6/conf/eth0/disable_ipv6

直接读写的内核proc文件

2，ndc interface ipv6 eth0 enable

用ndc命令，最终也是写内核proc文件



如上的操作pr..]]></description><category></category></item><item><title><![CDATA[Android Wifi学习（五）]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/108399632</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/108399632</guid><author>cc0410</author><pubDate>Fri, 04 Sep 2020 10:40:02 +0800</pubDate><description><![CDATA[wifi的softap打开过程：

1）从Android 7.0开始，google已经从原先直接调用WifiManager.setWifiApEnabled()的方式，直接改成调用ConnectivityManager.startTethering()的方式了。

2）当修改AP配置时，也不用原先像mWifiManager.setWifiApEnabled(null, false)，再mWifiManager.setWifiApEnabled(mWifiConfig, true)的方式。改成了当hosta.]]></description><category></category></item><item><title><![CDATA[Android Wifi学习（四）]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/108349501</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/108349501</guid><author>cc0410</author><pubDate>Tue, 01 Sep 2020 19:56:09 +0800</pubDate><description><![CDATA[wifi的sta connect流程分析：




]]></description><category></category></item><item><title><![CDATA[Android Wifi学习（三）]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/107000415</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/107000415</guid><author>cc0410</author><pubDate>Sun, 28 Jun 2020 15:45:10 +0800</pubDate><description><![CDATA[wifi的scan流程分析：

一般，在上层应用上，当用户进入wifi的UI界面时，此时就会自动去下scan，是一个定时scan，间隔10s或15s，

当退出wifi UI界面时，这时就会停止上层的scan。这个是上层应用做的操作。

在android 8.0之前的版本，scan的定时扫描都是在上层app做的，但从8.0开始，google把这个定时器做到了

framework中的SettingsLib(frameworks/base/packages/SettingsLib)中去了

如下修改为goog]]></description><category></category></item><item><title><![CDATA[Android Wifi学习（二）]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/106906895</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/106906895</guid><author>cc0410</author><pubDate>Mon, 22 Jun 2020 17:48:08 +0800</pubDate><description><![CDATA[Wifi开启流程包括以下两种：

1，开机自动启动wifi

2，手动开启wifi

开启流程如下图所示：




]]></description><category></category></item><item><title><![CDATA[转载：一篇文章了解相见恨晚的 Android Binder 进程间通讯机制]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/106823720</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/106823720</guid><author>cc0410</author><pubDate>Thu, 18 Jun 2020 09:47:46 +0800</pubDate><description><![CDATA[概述

最近在学习Binder机制，在网上查阅了大量的资料，也看了老罗的Binder系列的博客和Innost的深入理解Binder系列的博客，都是从底层开始讲的，全是C代码，虽然之前学过C和C++，然而各种函数之间花式跳转，看的我都怀疑人生。毫不夸张的讲每看一遍都是新的内容，跟没看过一样。后来又看到了Gityuan的博客看到了一些图解仿佛发现了新大陆。

下面就以图解的方式介绍下Binder机制，相信你看这篇文章，一定有所收获。

什么是 Binder？

Binder是Android系统中进程间通讯（IP]]></description><category></category></item><item><title><![CDATA[Android Wifi学习（一）]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/106791306</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/106791306</guid><author>cc0410</author><pubDate>Tue, 16 Jun 2020 17:27:30 +0800</pubDate><description><![CDATA[Android Wifi的整体架构如下图所示：



第一层Application：主要就是wifi应用，已settings apk为主

第二层Android Wifi Framework：Android Wifi框架层，为wifi应用提供API，维护wifi各功能状态，与Android网络模块建立关联

第三层Android Wifi Hal：wifi的硬件抽象层，为Android Wifi Framework提供操作wifi的命令

第四层Netlink：为用户层到内核层建立通道的工具

第五层cfg]]></description><category></category></item><item><title><![CDATA[Android DNS机制]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/105860191</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/105860191</guid><author>cc0410</author><pubDate>Thu, 30 Apr 2020 14:00:58 +0800</pubDate><description><![CDATA[1，DNS

DNS全称Domain Name System（域名系统），顾名思义，就是把域名解析为指向的IP，让人们通过注册的域名可以方便的访问到网址的一种服务。域名解析就是域名到IP地址的转换过程。域名解析的工作由DNS服务器完成，其过程可简单描述为：域名地址经过DNS服务器解析后，得到对应的IP地址，通过该IP地址访问到服务器获取我们要访问的内容。



2，Android DNS模...]]></description><category></category></item><item><title><![CDATA[Android有线IPV6总结（一）:IPV6无状态]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/103307386</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/103307386</guid><author>cc0410</author><pubDate>Fri, 29 Nov 2019 11:26:34 +0800</pubDate><description><![CDATA[IPV6无状态

Android Frameworks的流程如下图所示：





在上图中我们可以看到无状态的DNS获取是根据RA报文中的MOflag来确定的，如果M=0,O=0那么我们将获取自定义的默认DNS地址，如果M=0,O=1那么我们将通过DHCPv6来获取DNS地址，RA报文如下图所示：





DHCPv6请求DNS地址的流程如下图所示：














...]]></description><category></category></item><item><title><![CDATA[Android 4.4 设置DNS及DNS解析请求流程分析]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/103288483</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/103288483</guid><author>cc0410</author><pubDate>Thu, 28 Nov 2019 17:05:35 +0800</pubDate><description><![CDATA[1，将网络连接获取的DNS设置到系统中

1.1DNS获取后先设置LinkProperty

在Android Frameworks中不同的网络interface（eth0、wlan0等）都会有一个独立的LinkProperties对象来保持自己的网络信息





1.2通知ConnectivityService DNS信息已获取成功



不管是dhcp、pppoe或者是静态设置，在成功获取...]]></description><category></category></item><item><title><![CDATA[property_set启动service时带入参数]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/102474465</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/102474465</guid><author>cc0410</author><pubDate>Thu, 10 Oct 2019 10:08:10 +0800</pubDate><description><![CDATA[Android的init.rc系列脚本中通常会定义很多native service，如下：



而这些service中有些我们会在合适的时候使用property_set("ctl.start",cmd)的方式进行启动，那么使用这种方式的时候能否携带参数进而传给实际要去运行的可执行程序呢？答案是可以的



这里我们不仔细分析property_set的原理了，简单来说就是init进程启动后会给p...]]></description><category></category></item><item><title><![CDATA[Android DNS缓存时长的探索]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/100888109</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/100888109</guid><author>cc0410</author><pubDate>Mon, 16 Sep 2019 16:42:57 +0800</pubDate><description><![CDATA[这段时间在研究Android DNS缓存机制，其中有个小点就是关于DNS缓存的时长，就在这里记录一下了

Android的DNS缓存机制是双重的：

Java层的快速缓存
	Native C层的缓存
1，Java层

先来看Java层的快速缓存，应用层如果想要解析DNS，基本上都是调用InetAddress.getByName(String host)接口，最终调用的就是lookupHostByN...]]></description><category></category></item><item><title><![CDATA[Android user编译版本  默认打开adb及关闭adb设备认证]]></title><link>https://blog.youkuaiyun.com/cc0410/article/details/96479443</link><guid>https://blog.youkuaiyun.com/cc0410/article/details/96479443</guid><author>cc0410</author><pubDate>Fri, 19 Jul 2019 14:37:50 +0800</pubDate><description><![CDATA[Android编译有3种方式：

eng
	userdebug
	user


三种编译方式的不同，这里暂不做具体描述，但可以告诉大家如何去了解这三种编译方式产生的区别：

在source build/envsetup.sh lunch xx之后，会将变量TARGET_BUILD_VARIANT赋值为eng或者userdebug或者user

然后你就可以在build目录下去grep TAR...]]></description><category></category></item></channel></rss>