Linux&Android PPP相关FAQ 

 目录

Linux&Android PPP相关FAQ.. 1

一、         文档说明... 3

二、         常见调试技术... 4

1.      查看PPP log信息... 4

2.      查看拨号IP. 4

3.      查看路由、配置路由... 4

4.      Ping ip和网址... 4

5.      设置DNS. 5

三、         问题记录... 6

1.      Linux下拨号失败... 6

2.      Android下无法建立数据业务... 6

3.      Linux和Android下有IP能ping地址不能ping域名... 6

4.      Linux和Android下有IP能不能ping域名和地址... 7

5.      客户多网卡无法上网... 7

附录A:双网卡路由配置案例... 8  

一、             文档说明

本文档主要是记录linux下PPP相关的易错点和典型客户支持记录。

客户在linux和Android下使用PPP进行数据业务一般会易遇到如下几类问题:

1)  Linux下拨号失败

2)  Android下无法建立数据业务

3)  Linux和Android下有IP能ping地址不能ping域名

4)  Linux和Android下有IP能不能ping域名和地址

5)客户多网卡无法上网  

二、             常见调试技术

1.     查看PPP log信息

1)Linux下:

tail -f /var/log/syslog

tail -f /var/log/messages

2)Android下:

logcat -s pppd

2.     查看拨号IP

1)Linux 下:

ifconfig

2)Android下:

netcfg

3.     查看路由、配置路由

1)查看路由:

route

2)配置路由:

route add

3)Examples:

route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0

向"eth0"添加一条指向网络192.56.76.x的路由。其中的C类子网掩码并不必须,因为192.*是个C类的IP地址。在此关键字"dev"可省略。

route add default gw mango-gw

加入一条缺省路由(如果无法匹配其它路由则用它)。使用此路由的所有分组将通过网关"mango-gw"进行传输。

4.     Ping ip和网址

1)ping IP地址:

ping 8.8.8.8

2)ping域名:

ping www.baidu.com

5.     设置DNS

1)直接修改配置文件:

/etc /resolv.conf

2)Examples:

/system/etc/ppp # vi /etc/resolv.conf

nameserver 8.8.8.8

nameserver 8.8.4.4

三、            
问题记录

1.     Linux下拨号失败

问题

Linux下调用pppd call quectel-ppp返回失败

现象1

提示:Connect script failed

分析

脚本连接错误,可能是脚本格式问题。

解决方法

在linux下执行:dos2unix 脚本文件名

现象2

拨号log出现,但是获取不到IP

分析

检查卡是否欠费、是否没有插卡、是否没连天线或者信号过弱

解决方法

针对以上分析排除针对解决

2.     Android下无法建立数据业务

问题

Linux下调用pppd call quectel-ppp返回失败

现象1

拨号ppp log显示error

分析

APN错误(国内公网卡APN随便设,错的可以但是不能没有;专网卡需要专门的APN,不可填错;国外需要根据运营商要求写入正确APN)

解决方法

添加正确APN

现象2

拨号log出现,但是拨号一直失败,获取不到IP

分析

检查卡是否欠费、是否没有插卡、是否没连天线或者信号过弱

解决方法

针对以上分析排除针对解决

现象3

从logcat看不到拨号信息,或者ril信息里很多error

分析

可能RIL由于error导致重启,检查是否ril确实是重启了

解决方法

提交重启log,研发分析

现象4

Android打电话发短信等功能OK,但是无法获取IP

分析

检查数据业务开关是否开启;APN是否设置;检查init.rc里面是否正确设置数据业务对应service

解决方法

可能数据业务没有开启,需要开启数据业务;APN没有设置需要填写正确APN;添加正确service

现象5

电话、短信、信号显示、数据业务均不能正常使用

分析

检查RIL是否正确集成

解决方法

不正确则重新集成

3.     Linux和Android下有IP能ping地址不能ping域名

问题

通过ifconfig可以查看到ppp0有IP,并且可以ping网址却不能ping域名

现象1

通过ifconfig可以查看到ppp0有IP,并且可以ping网址却不能ping域名

分析

这种情况是DNS没有设置或者DNS设置有问题,可以检查/etc/resolv.conf确认

解决方法

修改/etc/resolv.conf添加DNS再试。

正常情况下应该是已经设置成功的,linux发行版本的ip-up会配置DNS,Android的ip-up我们做了处理也会设置DNS。

4.     Linux和Android下有IP能不能ping域名和地址

问题

通过ifconfig可以查看到ppp0有IP,但是不能ping网址也不能ping域名

现象1

通过ifconfig可以查看到ppp0有IP,但是不能ping网址也不能ping域名

分析

这种情况很可能是路由设置问题。需要使用route检查路由是否存在并且是否正确

解决方法

如果不存在路由信息那必然是有问题的;如果存在路由信息,但是没有默认路由应该也是不对的,因为我们脚本里将ppp0加为了默认路由。

5.     客户多网卡无法上网

问题

客户设备使用多个网卡,使用无线模块上网出现失败情况

现象1

客户设备使用多个网卡,使用无线模块上网出现失败情况

分析

由于多个网卡同时存在,则可能出现路由设置出现问题,当路由配置错误则导致数据走不出去。

解决方法

参考附录A

6.    
PPP拨号断开,不上报NO CARRIER

问题

断开PPP,不上报NO CARRIER

现象1

客户在LCP阶段协商认证方式的时候,模块请求PAP,被MCU拒掉以后,模块发送了终止帧。但是,在PPP过程中,没有看到NO CARRIER上报,而模块确实是退出了PPP状态。如果客户打开了回显,这时有回环的错误。

分析

监控模块TX,确认模块是有上报NO CARRIER。

用客户的脚本测试调查了,客户的脚本的确会在terminate终断后还继续向模块发送请求。

解决方法

将客户的脚本中的nolock选项改为lock并增加modem选项(modem选项应该是pppd默认选项,可以不加,加了更保险)

附录A:双网卡路由配置案例

1、我机器有线网卡是eth0,ppp拨号生成ppp0,信息如下:

root@joe-OptiPlex-790:~# ifconfig

eth0     
Link encap:以太网 
硬件地址 d4:be:d9:9a:01:5d

inet 地址:192.168.10.46  广播:192.168.10.255  掩码:255.255.255.0

inet6 地址: fe80::d6be:d9ff:fe9a:15d/64
Scope:Link

UP BROADCAST RUNNING MULTICAST 
MTU:1500  跃点数:1

接收数据包:897703 错误:10 丢弃:0 过载:0 帧数:5

发送数据包:42177 错误:0 丢弃:0 过载:0 载波:0

碰撞:0 发送队列长度:1000

接收字节:84285024 (84.2 MB)  发送字节:20817523
(20.8 MB)

中断:20 Memory:e1a00000-e1a20000

ppp0     
Link encap:点对点协议

inet 地址:10.4.24.116  点对点:10.64.64.64  掩码:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST 
MTU:1500  跃点数:1

接收数据包:5 错误:0 丢弃:0 过载:0 帧数:0

发送数据包:4 错误:0 丢弃:0 过载:0 载波:0

碰撞:0 发送队列长度:3

接收字节:55 (55.0 B)  发送字节:58
(58.0 B)

2、路由配置要求是这样的:

192.168.10.0网段(即我的局域网)的数据走eth0,访问外网走ppp0。

3、配置操作

1)修改前

root@joe-OptiPlex-790:~# route

内核 IP 路由表

目标            网关            子网掩码        标志  跃点   引用  使用 接口

default         192.168.10.1    0.0.0.0         UG   
0      0        0 eth0

10.64.64.64     *               255.255.255.255 UH    0     
0        0 ppp0

192.168.10.0    *               255.255.255.0   U    
0      0       
0 eth0

2)删除默认路由

因为该默认路由是走eth0,外网要走ppp0,所以该路由不正确,故删除。

root@joe-OptiPlex-790:~# route del default

root@joe-OptiPlex-790:~# route

内核 IP 路由表

目标            网关            子网掩码        标志  跃点   引用  使用 接口

10.64.64.64     *               255.255.255.255 UH    0     
0        0 ppp0

192.168.10.0    *               255.255.255.0   U    
0      0        0 eth0

root@joe-OptiPlex-790:~# ping www.baidu.com

ping: unknown host www.baidu.com

root@joe-OptiPlex-790:~# ping 8.8.8.8

connect: Network is unreachable

3)添加默认路由,让外网数据走ppp0

root@joe-OptiPlex-790:~# route add default gw
10.4.24.116

root@joe-OptiPlex-790:~# route

内核 IP 路由表

目标            网关            子网掩码        标志  跃点   引用  使用 接口

default         10.4.24.116     0.0.0.0         UG   
0      0        0 ppp0

10.64.64.64     *               255.255.255.255 UH    0     
0        0 ppp0

192.168.10.0    *               255.255.255.0   U    
0      0        0 eth0

root@joe-OptiPlex-790:~# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_req=1 ttl=36
time=405 ms

64 bytes from 8.8.8.8: icmp_req=2 ttl=36
time=434 ms

^C

--- 8.8.8.8 ping statistics ---

2 packets transmitted, 2 received, 0% packet
loss, time 1001ms

rtt min/avg/max/mdev =
405.474/419.767/434.060/14.293 ms

5) 
添加路由让局域网数据走eth0

从路由中已经可以看到如下信息:

192.168.10.0    *               255.255.255.0   U    
0      0        0 eth0

该路由就是将192.168.10.0网段数据走eth0,因此此路由无需添加,如果该路由不存在则可使用以下命令添加:

route add -net 192.168.10.0 netmask
255.255.255.0 gw 192.168.10.46 dev eth0

linux&android PPP 相关知识的更多相关文章

  1. Android View相关知识问答

    Android View相关核心知识问答 Activity Window View之间的三角关系 你真的了解View的坐标吗? 在渲染前获取 View 的宽高 5种手势工具类 浅析Android的窗口

  2. LINUX涉及网络相关知识

    才接触到网络的老铁,是否比较晕呢? 简单记录一下网络相关知识吧(IPV4)! A0. 网络号.主机号 A1.网络地址分类: A2. 保留地址: A3. 子网掩码作用:(子网掩码.IPV4地址做“与”运 ...

  3. Linux的CPU相关知识

    超线程和多线程的区别? 超线程从硬件层面理解,即一个CPU的部件(可以理解为核)同时执行多条指令,表现就是同时执行多个线程.多线程是软件层面的概念,比如CPU只有一个核,通过线程调度可以在一个时间段内 ...

  4. linux shell脚本相关知识

    最近的项目中,有一个编写linux shell脚本的任务.由于之前不是很熟悉,在这个过程中遇到了很多困难,查找了很多资料,也收获了很多.下面是linux shell脚本中常用的知识总结. 1基础语法 ...

  5. Android.mk相关知识

    Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...

  6. Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结

    一 SDcard广播监听,注册,取消注册的实现 (1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加 //在IntentFilter中选择你要监听的行为 IntentF ...

  7. linux下分区相关知识

    Linux 规定了主分区(或者扩展分区)占用 1 至 16 号码中的前 4 个号码.以第一个 IDE 硬盘为例说明,主分区(或者扩展分区)占用了 hda1.hda2.hda3.hda4,而逻辑分区占用 ...

  8. Android——dpi相关知识总结

    1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸...... nexus4手机是4.7英寸 As ...

  9. Android拍照相关知识总结

    1.调用系统的照相机程序 Intent intent = newIntent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(inte ...

随机推荐

  1. 玩转TypeScript(5)--环境声明

    环境声明为TypeScript引入了一个作用域,但是对于产生的javaScript程序不会有任何影响.程序员可以使用环境声明来告之TypeScript,一些其他的组将将提供变量的声明.比如,默认情况下 ...

  2. delphi批量存入多媒体字段 遇到内存溢出的坑

    最近delphi做一个小工具其中一个需求要把上W张照片存入数据库多媒体字段. 程序转到1,2W的时候即内在溢出了.最多一次转了3W张照片.很简单的一段代码后来仔细检查发现其中的坑. 下面放上代码 wi ...

  3. GPIO口的输入输出模式

    1.浮空输入  GPIO_Mode_IN_FLOATING       2.带上拉输入  GPIO_Mode_IPU       3.带下拉输入  GPIO_Mode_IPD       4.模拟输入 ...

  4. [LeetCode&Python] Problem 700. Search in a Binary Search Tree

    Given the root node of a binary search tree (BST) and a value. You need to find the node in the BST ...

  5. Spring DI

    一.   Spring DI 依赖注入 利用spring IOC实例化了对象,而DI将实例化的对象注入到需要对象的地方,完成初始化任务. 对象由spring创建,之后再由spring给属性赋值 spr ...

  6. hasura graphql server 集成gatsby

    hasura graphql server 社区基于gatsby-source-graphql 开发了gatsby-postgres-graphql 插件, 可以快速的开发丰富的网站 基本使用 安装h ...

  7. 容器、应用服务器和web服务器的区别

    什么是容器 servlet没main()方法.它们受控于另一个java应用,这个java应用称为容器(Container)Tomcat是这样的容器,Web服务器应用(Apache)得到一个指向serv ...

  8. cookie、session的自我介绍

    Cookie是什么? cookie说的直白点就是保存在用户浏览器端 的一个键值对,举个例子,你现在登录了京东商城,你把浏览器关闭之后,你再打开京东,你还是可以对你的账户继续操作,已经购买的商品,订单都 ...

  9. JavaScript中类似PHP的uniqid()方法

    JavaScript中类似PHP的uniqid()方法: function generateUIDNotMoreThan1million() { return ("0000" + ...

  10. POJ2392 Space Elevator

    题目:http://poj.org/problem?id=2392 一定要先按高度限制由小到大排序! 不然就相当于指定了一个累加的顺序,在顺序中是不能做到“只放后面的不放前面的”这一点的! 数组是四十 ...