详解Linux运维工程师高级篇(大数据安全方向).
hadoop安全目录:
kerberos(已发布)
elasticsearch(已发布)http://blog.51cto.com/chenhao6/2113873
knox
oozie
ranger
apache sentry
简介:
从运维青铜到运维白银再到运维黄金,这里就要牵扯到方向问题也就是装备,根据自己的爱好,每个人都应该选择一个适合自己和喜欢自己的一个职业技术方向,如:大数据安全,开发运维,云计算运维等等。而掌握的越多前言技术也就是更多的装备,才能更好的在it行业混下去,毕竟it技术更新太快,初级篇和中级篇前面已介绍。
如果你想了解大数据的学习路线,想学习大数据知识以及需要免费的学习资料可以加群:784789432.欢迎你的加入。
现在给大家介绍大数据安全的正式面目:
1.大数据基本组件



2. Hadoop安全背景
共享集群
按照业务或应用的规则划分资源队列,并分配给
特定用户
HDFS上存放各种数据,包括公共的、机密的
安全认证:确保某个用户是自己声称的那个用户
安全授权:确保某个用户只能做他允许的那些操作
如果你想了解大数据的学习路线,想学习大数据知识以及需要免费的学习资料可以加群:784789432.欢迎你的加入。
3. 设备说明
|
服务 |
IP |
主机名 |
系统 |
|
Ambari Kerberos |
192.168.2.140 |
hdp140 |
CentOS 7.3 |
|
namenode |
192.168.2.141 |
hdp141 |
CentOS 7.3 |
|
datanode |
192.168.2.142 |
hdp142 |
CentOS 7.3 |
|
datanode |
192.168.2.143 |
hdp143 |
CentOS 7.3 |
4. kerberos基本概念:
Principal(安全个体):被认证的个体,有一个名字和口令
KDC(key distribution center ) : 是一个网络服务,提供ticket 和临时会话密钥
Ticket:一个票据,客户用它来向服务器证明自己的身份,包括客户标识、会话密钥、时间戳。
AS (Authentication Server): 认证服务器
TGS(Ticket Granting Server): 许可证服务器
TGT:Ticket-granting Ticket
5. kerberos认证过程:

6. 集群启用Kerberos认证
装KDC Server
1. 安装一个新的KDC Server(任意一个集群主机,这里hdp141为例)
|
1
|
# yum install krb5-server krb5-libs krb5-workstation |

2. 打开KDC Server的配置文件
# vi /etc/krb5.conf
修改文件中的[realms]部分,将为属性kdc和admin_server设置的默认值“kerberos.example.com”替换成实际KDC server的主机名。在下面的例子中,“kerberos.example.com”被替换成了 “my.kdc.server”。
|
1
2
3
4
5
|
[realms]EXAMPLE.COM = {kdc = my.kdc.serveradmin_server = my.kdc.server} |
3. (可选)自定义realms配置(EXAMPLE.COM修改为CESHI.COM,下面例子都为CESHI.COM)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# vi /etc/krb5.conf[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = CESHI.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] CESHI.COM = { kdc = hdp141 admin_server = hdp141 } [domain_realm] .vrv.com = CESHI.COM vrv.com = CESHI.COM# vi /var/kerberos/krb5kdc/kdc.conf[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms]CESHI.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal } |
4.创建Kerberos数据库
创建过程中需要输入master key。
|
1
2
3
4
5
6
7
8
|
# kdb5_util create -sLoading random dataInitializing database '/var/kerberos/krb5kdc/principal' for realm 'CESHI.COM',master key name 'K/M@CESHI.COM'You will be prompted for the database Master Password.It is important that you NOT FORGET this password.Enter KDC database master key: ceshi123456.Re-enter KDC database master key to verify: ceshi123456. |
5.启动KDC
|
1
2
3
4
|
# service krb5kdc start# chkconfig krb5kdc on# service kadmin start# chkconfig kadmin on |
6.创建kerberos Admin
通过创建一个admin principal创建KDC admin,需要输入principal的密码。
|
1
2
3
4
5
6
7
|
# kadmin.local -q "addprinc admin/admin"Authenticating as principal root/admin@CESHI.COM.COM with password.WARNING: no policy specified for admin/admin@CESHI.COM.COM; defaulting to no policyEnter password for principal "admin/admin@CESHI.COM.COM": ceshi123456.Re-enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456.Principal "admin/admin@CESHI.COM" created."admin/admin@CESHI.COM":ceshi123456. |
打开KDC ACL文件,确认admin principal在KDC ACL中拥有权限,若没有对应的域则需要添加。
|
1
2
|
# vi /var/kerberos/krb5kdc/kadm5.acl*/admin@VRV.COM * |
如果修改了文件kadm5.acl,那么你就必须重启kadmin进程
|
1
|
# service kadmin restart |
7.启用Kerberos保护
安装JCE
必须用官网下载的JCE覆盖本地已有的JCE,否则将缺少供Kerberos使用的加密方式
在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。
• Oracle JDK 1.7:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-
download-432124.html
• Oracle JDK 1.8:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-
download-2133166.html
在Ambari Server所在主机和集群中的所有主机上,添加unlimited security policy JCE jars
到目录$AMBARI_SERVER_JAVA_HOME/jre/lib/security/下。
注意:在所有的主机上,JCE相关的包都必须解压到配置文件/etc/ambari-server/conf/ambari.properties中属性java.home所指定的JDK目录下
|
1
2
|
# JAVA_HOME=/usr/java/default# unzip -o -j -q UnlimitedJCEPolicyJDK8.zip -d $JAVA_HOME/jre/lib/security/ |
重启Ambari Server(ambari server服务器hdp140)
|
1
|
# service ambari-server restart |
8.运行Kerberos保护向导
1. 确认KDC已经安全和正确配置,并且已经在集群的所有主机上配置好JCE。
2. 登录Ambari Web,打开管理员 > Kerberos

3.点击启用Kerberos,启用安装向导,选择条件检查

4.提供关于KDC和管理员账号的信息
KDC相关信息请参考配置文件/etc/krb5.conf

5.ambari会在集群的主机上安装Kerberos客户端,然后通过测试是否能创建principal,生成keytab和分配Keytab来测试是否能连接KDC。
自定义Hadoop使用的Kerberos identities

6.确认你的配置。你可以通过页面下载自动创建的包含principals和Keytabs的CSV文件。
7.停止服务

8.启用kerberos
Keytabs保存在主机的/etc/security/keytabs目录下。
9.启动和测试服务
启动和测试服务成功后点击完成以结束Kerberos的启用。

10.查看已启用的Kerberos配置

到这里kerberos安装完成。
高级选项:
为Ambari Server设置Kerberos(可选项)
1. 使用kadmin在你的KDC所在的主机(hdp141)为Ambari Server创建一个principal。(ambari-server为自定义名)
|
1
|
# kadmin.local -q "addprinc -randkey ambari-server@CESHI.COM |
2. 为此principal生成一个Keytab
|
1
|
# kadmin.local -q "xst -k ambari.server.keytab ambari-server@CESHI.COM" |
3. 将单前目录生成的Keytab拷贝到Ambari Server所在的集群。确定该文件有合适的权限,能够被启动Ambari Server守护进程所访问。
|
1
2
3
|
# scp ambari.server.keytab hdp140:/etc/security/keytabs/# ll /etc/security/keytabs/ambari.server.keytab-r--r----- 1 root root 530 Dec 18 20:06 /etc/security/keytabs/ambari.server.keytab |
4. 停止ambari server
|
1
|
# ambari-server stop |
5. 运行setup-security命令,设置JAAS。标红部分为需要设置部分。
A. 选择3,Setup Ambari kerberos JAAS configuration
B. 输入第一步为Ambari Server设置的principal名
C. 输入Ambari principal的Keytab所在路径
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# ambari-server setup-securityUsing python /usr/bin/python2Security setup options...===========================================================================Choose one of the following options: [1] Enable HTTPS for Ambari server. [2] Encrypt passwords stored in ambari.properties file. [3] Setup Ambari kerberos JAAS configuration. [4] Setup truststore. [5] Import certificate to truststore.===========================================================================Enter choice, (1-5): 3Setting up Ambari kerberos JAAS configuration to access secured Hadoop daemons...Enter ambari server's kerberos principal name (ambari@VRV.COM): ambari-server@VRV.COMEnter keytab path for ambari server's kerberos principal: /etc/security/keytabs/ambari.server.keytabAmbari Server 'setup-security' completed successfully.重启Ambari Server# ambari-server restart |
开始实测:
1.新建测试用户
普通用户需要安装ranger(后面介绍)管理权限。
列出所有用户
|
1
2
3
4
5
6
7
|
# kadmin.local #在kdc服务器上执行kadmin.local: listprincs #//列出所有用户ambari-server@CESHI.COM.................nn/hdp140@CESHI.COMzookeeper/hdp142@CESHI.COMzookeeper/hdp143@CESHI.COM |
创建测试用户
|
1
2
3
4
|
kadmin.local: addprinc testEnter password for principal "test@CESHI.COM": ceshi123456.Re-enter password for principal "test@CESHI.COM": ceshi123456.Principal "test@CESHI.COM" created. |
登录验证
# kinit test #登陆
ceshi123456.


退出登陆状态
|
1
|
注销:kdestroy |
集群登录与授权(hdfs用户)
未使用kerberos用户认证前执行
|
1
|
# hadoop dfs -ls / |

使用kerberos用户认证
|
1
2
3
|
# kinit test #登陆Password for test@CESHI.com #ceshi123456.# hadoop dfs -ls / |

此时test用户默认有查看权限,无目录授权

换到hdfs用户下,初始化hdfs
查看hdfs的Kerberos用户名
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# klist -k /etc/security/keytabs/hdfs.headless.keytabKeytab name: FILE:hdfs.headless.keytabKVNO Principal---- -------------------------------------------------------------------------- 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM初始化认证hdfs用户# kinit -k hdfs-test@CESHI.COM -t /etc/security/keytabs/hdfs.headless.keytab 创建目录:hadoop fs -mkdir /test查看目录属性: |

改变目录属性:hadoop fs -chown test:hdfs /test

使用test用户登录

修改密码和重新生成
|
1
2
3
4
5
6
7
8
|
#修改密码命令cpw test(KDC server上执行)# kadmin.localAuthenticating as principal test/admin@CESHI.COM with password.kadmin.local: cpw testEnter password for principal "test1@CESHI.COM": ceshi123Re-enter password for principal "test1@CESHI.COM": ceshi123change_password: Principal does not exist while changing password for "test@CESHI.COM".kadmin.local: exit |
生成新的多用户使用keytab文件
创建keytab文件(生成到当前文件夹下)
案例:将hive和hdfs的keytab集成到同一个keytab文件中
1. 查看所有princs
|
1
2
3
4
5
|
# kadmin.localKadmin.local: listprincshbase/hdp143@CESHI.COM"hdfs-vrvtest@CESHI.COM"hive/hdp140@CESHI.COM" |
2. 添加hdfs的princs的keytab到hdfs-hive.keytab
|
1
2
|
# kadmin.local Kadmin.local: xst -norandkey -k hdfs-hive.keytab hdfs-vrvtest@CESHI.COM |

3. 添加hive的princs的keytab到hdfs-hive.keytab
|
1
2
|
# kadmin.local Kadmin.local: xst -norandkey -k hdfs-hive.keytab hive/hdp140@CESHI.COM |
查看生成的hdfs-hive.keytab


使用生成的Keytab文件登录
|
1
|
# kinit -k -t hdfs-hive.keytab hive/hdp140@CESHI.COM |

修改租期
1.修改全局租期
|
1
2
3
4
5
6
7
8
9
10
|
# vi /etc/krb5.conf[libdefaults] default_realm = CESHI.COMdns_lookup_realm = false dns_lookup_kdc = falseticket_lifetime = 24h #ticket 租期时间renew_lifetime = 7d #重新申请时间frwardable = true |
#重新启动
|
1
2
|
# service krb5kdc restart# service kadmin restart |
2.手动修改用户租期时间
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#查看租期时间可在kadmin命令行下用getprinc命令查看默认的最大时长,否则时长被限制在24小时,并且无法renew)# kadmin.localkadmin.local:getprinc hive/hdp141Principal: hive/hdp141@CESHIExpiration date: [never]Last password change: Mon Dec 18 05:56:57 EST 2017Password expiration date: [none]Maximum ticket life: 1 day 00:00:00 #租期时间Maximum renewable life: 0 days 00:00:00 #重新续租时间Last modified: Mon Dec 18 05:56:57 EST 2017 (admin/admin@VRV.COM)Last successful authentication: [never]Last failed authentication: [never]Failed password attempts: 0Number of keys: 8Key: vno 1, aes256-cts-hmac-sha1-96Key: vno 1, aes128-cts-hmac-sha1-96Key: vno 1, des3-cbc-sha1Key: vno 1, arcfour-hmacKey: vno 1, camellia256-cts-cmacKey: vno 1, camellia128-cts-cmacKey: vno 1, des-hmac-sha1Key: vno 1, des-cbc-md5 #更改租期时间命令(用户使用真实用户替换)modprinc -maxrenewlife 300days 用户modprinc -maxlife 300days 用户 |
#应用例子
|
1
|
modprinc -maxrenewlife 300days hive/hdp141@CESHI.com |

|
1
|
modprinc -maxlife 300days hive/hdp141@CESHI.COM |

退出后,重新启动
|
1
2
|
# service krb5kdc restart# service kadmin restart |
3.使用spark任务测试kerberos下的作业提交
1.指定spark用户和密码
|
1
2
3
4
5
6
7
8
9
10
11
|
# cd /etc/security/keytabs[root@hdp140 keytabs]# ll-r--r----- 1 root root 353 Oct 30 23:54 ambari.server.keytab-r--r----- 1 hbase hadoop 313 Oct 30 23:54 hbase.headless.keytab-r-------- 1 hbase hadoop 313 Oct 30 23:54 hbase.service.keytab-r-------- 1 hdfs hadoop 308 Oct 30 23:54 hdfs.headless.keytab-r--r----- 1 hive hadoop 308 Oct 30 23:54 hive.service.keytab-r-------- 1 hdfs hadoop 298 Oct 30 23:54 nn.service.keytab-r--r----- 1 ambari-qa hadoop 333 Oct 30 23:54 smokeuser.headless.keytab-r-------- 1 spark hadoop 313 Oct 30 23:54 spark.headless.keytab-r--r----- 1 root hadoop 308 Oct 30 23:54 spnego.service.keytab |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# klist -k spark.headless.keytabKeytab name: FILE:spark.headless.keytabKVNO Principal---- -------------------------------------------------------------------------- 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM # kinit -k spark-vrvtest@VRV.COM -t spark.headless.keytab#指定spark用户[root@hdp140 keytabs]# klistTicket cache: FILE:/tmp/krb5cc_0Default principal: spark-vrvtest@VRV.COM Valid starting Expires Service principal10/31/2017 01:08:56 11/01/2017 01:08:56 krbtgt/VRV.COM@VRV.COM |
上传spark文件到opt
|
1
2
3
4
|
# hdfs dfs -mkdir -p /tmp/sparkwordcount/# hdfs dfs -mkdir -p /tmp/sparkwordcount/input# hdfs dfs -put /opt/sparkwordcountinput.txt /tmp/sparkwordcount/input# hdfs dfs -put /opt/spark_word_count.jar /tmp/sparkwordcount/ |
#spark测试文件
|
1
|
sparkwordcountinput.txt spark_word_count.jar |
spark命令提交任务
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# spark-submit \ --class com.vrv.bigdata.ml.DataExtract2 \ --master yarn \ --deploy-mode cluster \ --principal spark-test@CESHI.COM \ --keytab /etc/security/keytabs/spark.headless.keytab \ hdfs://hdp140:8020/tmp/sparkwordcount/spark_word_count.jar \ hdfs://hdp140:8020/tmp/sparkwordcount/input \ hdfs://hdp140:8020/tmp/sparkwordcount/output/spark_work_count17/10/31 01:15:28 INFO Client: client token: Token { kind: YARN_CLIENT_TOKEN, service: } diagnostics: N/A ApplicationMaster host: 192.168.2.143 ApplicationMaster RPC port: 0 queue: default start time: 1509383715631 final status: SUCCEEDED tracking URL: http://hdp141:8088/proxy/application_1509379053332_0014/ user: spark17/10/31 01:15:28 INFO ShutdownHookManager: Shutdown hook called17/10/31 01:15:28 INFO ShutdownHookManager: Deleting directory /tmp/spark-40e868df-ca58-4389-b20c-03d2717516cc |



疑难问题1:
|
1
2
3
4
5
|
Received Exception while testing connectivity to the KDC: Algorithm AES256 not enabled**** Host: hdp261:88 (TCP)java.lang.IllegalArgumentException: Algorithm AES256 not enabledat sun.security.krb5.EncryptionKey.<init>(EncryptionKey.java:286)at javax.security.auth.kerberos.KeyImpl.<init>(KeyImpl.java |
解决:
|
1
2
3
4
5
6
7
|
1. 在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。• Oracle JDK 1.7:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html• Oracle JDK 1.8:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html |
疑难问题2:
|
1
|
org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag) |
解决:
|
1
2
3
4
5
6
7
8
9
10
11
|
# kinit guestPassword for guest@CESHI.COM: ceshi123456. # klistTicket cache: FILE:/tmp/krb5cc_0Default principal: guest@CESHI.COM Valid starting Expires Service principal11/28/2017 18:30:48 11/29/2017 18:30:48 krbtgt/CESHI.COM@CESHI.COM11/28/2017 18:31:09 11/29/2017 18:30:48 HTTP/hdp140@11/28/2017 18:31:09 11/29/2017 18:30:48 HTTP/hdp140@CESHI.COM |
实战到此结束。后续再更新elasticsearcn安全实战。
总结:
1. Hadoop集群节点数多,配置和维护一个使用kerberos系统高性能,稳定的hadoop集群难度非常高。
2. Hadoop中的hdfs是一个文件系统,用户的认证和授权比较复杂,难度不低于linux系统的用户和组管理。
加上kerberos后,用户和用户组的管理更加复杂,通常一个合适的用户不能访问hdfs上的文件。
3. Hadoop加上kerberos后,通常原来的用户和文件,可能都失效导致数据流失。
详解Linux运维工程师高级篇(大数据安全方向).的更多相关文章
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- 详解Linux运维工程师
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...
- 详解linux运维工程师入门级必备技能
详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...
- 详解Linux运维工程师应具备的十大技能
Linux系统如果是学习可以选用Redhat或CentOS,特别是CentOS在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...
- 详解Linux运维工程师必备技能
张戈大神是腾讯的一名运维,张戈博客也是我接触到第一个 Linux 运维师的博客,最近也在接触 Linux,说到工具,在行外可以说是技能,在行内一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几 ...
- 详解Linux运维工具:运维流程管理、运维发布变更、运维监控告警
概述 应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作.服务监控.应用状态统计.日常服务状态巡检.突发故障处理.服务日常变更调整.集群管理.服务性能评估优化.数据库管理优化.随着应用 ...
- 大厂0距离:网易 Linux 运维工程师面试真题,内含答案
作为 Linux 运维工程师,进入大公司是开启职业新起点的关键,今天马哥 linux 运维及云计算智囊团的小伙伴特别分享了其在网易面试 Linux 运维及云计算工程师的题目和经历,希望对广大 Linu ...
- 高级Linux运维工程师必备技能(扫盲篇)
高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...
- Linux 运维工程师学习成长路线上要经历哪四个阶段?
之前曾看到一篇新闻,Linux之父建议大家找一份基于Linux和开源环境的工作.今天就来聊一聊我的想法,本人8年Linux运维一线经验,呆过很多互联网公司,从一线运维做到运维架构师一职,也见证了中国运 ...
随机推荐
- HTML5新增的标签和属性归纳
收集总结的HTML5的新特性,基本除了IE9以下都可以使用. HTML5语法 大部分延续了html的语法 不同之处:开头的 <!DOCTYPE html> <html lang=&q ...
- CAMediaTimingFunction的使用
CAMediaTimingFunction的使用 CAMediaTimingFunction可以用在POP动画的自定义动画当中,算是非常实用的工具,当然,系统的动画也是可以使用的. 效果: 需要用到的 ...
- 在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?
我要做什么? 改 ASE 的监听地址.对于有强迫症的我来说,ASE 默认监听的是 127.0.0.1:10000-10002,这让我无法接受,所以我要将它改成域名 + 80 端口的方式: 放到容器中. ...
- Linux(CentOS)网卡的基本设置
临时设置 修改IP地址: ifconfig eth0 10.60.45.205 mask 255.255.255.0 修改网关地址 route add default gw 10.60.45.1 de ...
- maven将依赖的包一起打包
把以下内容输入到pom中即可 <build> <plugins> <!-- 将项目的依赖包复制到 target/lib --> <plugin> < ...
- 数据链路层 点对点协议 PPP
点对点协议 PPP 一. PPP 协议应满足的需求 简单.提供不可靠的数据报服务,比IP协议简单,不需要纠错,不需要序号,不需要流量控制. 工作方式:接收方每收到一个帧就进行CRC校验,如正确就接受该 ...
- Eclipse和JDK的安装配置
工欲善其事,必先利其器.最近开始学习Java语言,必不可少的要先安装一个IDE,我选择了eclipse,下面我们讲讲如何来安装及配置. Step1:工具的下载 这里我们需要用到三个工具安装包,JDK. ...
- JavaScript的事件的处理函数(鼠标,键盘,HTML)
事件处理函数概述 JavaScript 可以处理的事件类型为:鼠标事件.键盘事件.HTML 事件 所有的事件处理函数都会都有两个部分组成,on + 事件名称,例如 click 事件的事件处理函数就是: ...
- The Struts dispatcher cannot be found. This is usually caused by using Struts
对于struts2中的问题: org.apache.jasper.JasperException: The Struts dispatcher cannot be found. This is usu ...
- 2、Android-UI(布局待完成)
2.3.布局 实现界面的整齐摆放各种控件需要使用布局来完成 布局是一种可用于放置很多控件的容器 可以按照一定的规律调整内部的控件位置 布局的内部不仅可以放置控件还可以放置布局 1.线性布局 Linea ...