第八周课堂笔记

day-37

1、基础端口

873 rsync

22  ssh

25  smtp  邮件发送服务

110 pop3 邮件接收服务

80  web  网页服务

23       telnet

111      rpcbind

21       ftp

3389     windows远程桌面

2、SSH批量管理

2.1ssh服务端软件

yum install openssl openssh -y

rpm -qa openssh openssl

openssh-7.4p1-16.el7.x86_64   #<==ssh服务。

openssl-1.0.2k-16.el7.x86_64  #<==加密用的ssl。

2.2ssh服务配置优化:

####Start by oldboy#2018-04-26###

PermitEmptyPasswords no

UseDNS no

GSSAPIAuthentication no

#ListenAddress 172.16.1.7:22

####End by oldboy#2018-04-26###

2.3基础了解

2.3.1认证方式

密码认证

ssh 172.16.1.31 需要输入key和密码pass

秘钥认证

ssh-keygen交互式   连续回车 出来私发和公钥

非交换式ssh-keygen -f ~/.ssh/id_rsa  -P '' -q

参数讲解:

ssh-keygen:密钥对创建工具

[-P old_passphrase]  密码

[-f output_keyfile]  输出的秘钥文件

    [-q]       不输出信息     

[-t dsa ]  指定秘钥类型

ssh-copy-id  #专业拷贝密钥中的公钥文件的。

-f: force mode 强制

[-i [identity_file]] 指定秘钥文件

[[-o ] ...] 指定ssh参数选项。

2.3.2配置文件

/etc/ssh/ssh_config

2.4  sshpass工具:指定密码非人工交互分发秘钥

yum install -y sshpass

非分交互式分发密钥sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7

2.5批量分发公钥脚本

#!/bin/bash

yum install sshpass -y &&\

#在管理机上输入

ssh-keygen  -t rsa -f ~/.ssh/id_rsa -q   -P '' &&\

#如果创建过公钥  可以忽略或者 y

for i in 5 6 7 8 31 41 51;do sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub 172.16.1.$i "-o StrictHostKeyChecking=no";done

===================================================================================================================

day-38

1.ansible介绍

ssh秘钥认证+脚本批量管理,特点:简单、实用,

但是看起来比较LOW,需要人工写脚本,类似实时复制的inotify工具。

2013以前这种方式很普遍。

MySQL高可用 MHA集群,要求所有机器互相秘钥认证。

大数据集群也需要。

2.ansible能做什么?

ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。

比如:同时在100台服务器上安装nfs服务,并在安装后启动服务。

比如:将某个文件一次性拷贝到100台服务器上。

比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。

这些场景中我们都可以使用到ansible。

3.ansible软件特点:

ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。

比如:同时在100台服务器上安装nfs服务,并在安装后启动服务。

比如:将某个文件一次性拷贝到100台服务器上。

比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。

这些场景中我们都可以使用到ansible。

4.安装ansible

[root@m01 ~]# yum install ansible -y.配置ansible[root@m01 ~]# vim /etc/ansible/hosts[oldboy]172.16.1.31

172.16.1.41

验证ansible

ansible是通过ssh端口探测通信

[root@m01 ~]# ansible oldboy -m ping

172.16.1.7 | SUCCESS =>{"changed": false,"ping":"pong"}172.16.1.31 | SUCCESS =>{"changed": false,"ping":"pong"}172.16.1.41 | SUCCESS =>{"changed": false,"ping":"pong"}

ansible命令参数介绍

Ansible中的临时命令的执行是通过Ad-Hoc来完成,能够快速执行,而且不需要保存执行的命令,例如:ansible -i ~/hosts all -mcommand-a ‘who’ -u root主要参数如下:-u username          指定ssh连接的用户名,即执行后面命令的用户-i inventory_file    指定所使用的inventory文件的位置,默认为/etc/ansible/hosts-m module            指定使用的模块,默认为command-f 10                指定并发数,并发量大的时候,提高该值--sudo [-k]          当需要root权限执行的化,-k参数用来输入root密码

ansible模块查看和帮助

ansible模块查看和帮助*****查找模块ansible-doc -l#模块就Linux命令了。查看某个模块的具体参数帮助ansible-doc -scommand#Linux命令参数12.1command模块 *****1)功能说明:commandExecutes acommandon a remote node 功能说明:执行一个命令在远程节点上操作实践:ansible oldboy -mcommand-a"free -m"ansible oldboy -mcommand-a"df -h"ansible oldboy -mcommand-a"ls /root"ansible oldboy -mcommand-a"cat redhat-release"ansible oldboy -mcommand-a"cat /etc/redhat-release"最通用的功能。[root@m01 ~]# ansible oldboy -m command -a "cat /etc/redhat-release"172.16.1.7 | CHANGED | rc=0 >>CentOS Linux release 7.6.1810 (Core) 172.16.1.31 | CHANGED | rc=0 >>CentOS Linux release 7.6.1810 (Core) 172.16.1.41 | CHANGED | rc=0 >>CentOS Linux release 7.6.1810 (Core)

目标:ansible是不是需要免秘钥认证(ssh免秘钥认证)? yes

[root@m01 ~]# cat /etc/ansible/hosts[oldboy]172.16.1.31172.16.1.7还原ansible.cfg配置,重启服务器[root@m01 ~]# ansible oldboy -m command -a "free -m"The authenticity of host'172.16.1.7 (172.16.1.7)'can't be established.

ECDSA key fingerprint is SHA256:qZSBkrmOv7xO/63qOU1uLXkPyNVHdkqvrNAcAmXqNEk.

ECDSA key fingerprint is MD5:23:d0:cb:a9:f4:7c:0b:eb:2d:07:00:e1:a3:12:d8:33.

Are you sure you want to continue connecting (yes/no)? The authenticity of host '172.16.1.31(172.16.1.31)' can't be established.ECDSA key fingerprint isSHA256:qZSBkrmOv7xO/63qOU1uLXkPyNVHdkqvrNAcAmXqNEk.ECDSA key fingerprint isMD5:23:d0:cb:a9:f4:7c:0b:eb:2d:07:00:e1:a3:12:d8:33.Are you sure you want to continue connecting (yes/no)?

解决yes/no不需要输入问题:

修改ansible.cfg374行:ssh_args = -o ControlMaster=auto-o ControlPersist=60s -o StrictHostKeyChecking=no

在执行报错:

[root@m01 ~]# ansible oldboy -m command -a "free -m"172.16.1.7| UNREACHABLE! => {"changed":false,"msg":"Failed to connect to the host via ssh: Warning: Permanently added '172.16.1.7' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,password).","unreachable":true}172.16.1.31| UNREACHABLE! => {"changed":false,"msg":"Failed to connect to the host via ssh: Warning: Permanently added '172.16.1.31' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).","unreachable":true}

解决公钥问题:

ssh-keygen -f ~/.ssh/id_rsa  -P''-qforipin7dosshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub"-o StrictHostKeyChecking=no"172.16.1.$ipdone#testssh172.16.1.7"ifconfig eth0"

执行ansible命令:

[root@m01 ~]# ansible oldboy -m command -a "free -m"172.16.1.31 | UNREACHABLE! =>{"changed": false,"msg":"Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).","unreachable": true}172.16.1.7 | CHANGED | rc=0 >>              total        used        free      shared  buff/cache  availableMem:97269807795771Swap:7670767foripin31dosshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub"-o StrictHostKeyChecking=no"172.16.1.$ipdone#testssh172.16.1.31"ifconfig eth0"[root@m01 ~]# ansible oldboy -m command -a "free -m"172.16.1.7 | CHANGED | rc=0 >>              total        used        free      shared  buff/cache  availableMem:97269807795771Swap:7670767172.16.1.31 | CHANGED | rc=0 >>              total        used        free      shared  buff/cache  availableMem:97271804796768Swap:7670767

验证:删除公钥,是不是不可以了?

重启后,不行,重启前可以[root@m01 ~]# ansible oldboy -m command -a "free -m"172.16.1.7| UNREACHABLE! => {"changed":false,"msg":"Failed to connect to the host via ssh: Warning: Permanently added '172.16.1.7' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,password).","unreachable":true}172.16.1.31| UNREACHABLE! => {"changed":false,"msg":"Failed to connect to the host via ssh: Could not create directory '/root/.ssh'.\r\nWarning: Permanently added '172.16.1.31' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).","unreachable":true}

修改Host增加用户和密码:

[root@m01 ~]# cat /etc/ansible/hosts#[oldboy]#172.16.1.31#172.16.1.7[oldboy_pass]172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456

172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456

结果:

[root@m01 ~]# ansible oldboy_pass -m command -a "free -m"

172.16.1.31 | CHANGED | rc=0 >>              total        used        free      shared  buff/cache  availableMem:972797917101758Swap:7670767172.16.1.7 | CHANGED | rc=0 >>              total        used        free      shared  buff/cache  availableMem:97269806795771Swap:7670767

结论:使用SSH连接:

密码认证 host里主机后面加密码

秘钥认证:提前发公钥,才能用ansible.  SSHPASS工具

==============================================================================================================

day-39

模块 作用

command 执行命令

shell                  执行命令(支持管道符)

yum                安装软件模块

copy            配置模块

service        启动服务模块

user                    用户管理

file                    创建目录,创建文件,往文件写内容

cron                    定时任务

mount          挂载

command命令模块

默认模块, 执行命令[root@m01 ~]# ansible oldboy  -a "hostname"如果需要一些管道操作,则使用shell[root@m01 ~]# ansible oldboy -m shell -a "ifconfig|grep eth0" -f 50-f =forks /etc/ansible/ansible.cfg#结果返回的数量

yum安装模块

推送脚本文件至远程,远程执行脚本文件[root@m01 ~]# ansible oldboy -m yum -a "name=httpd state=installed"name    ---指定要安装的软件包名称state  ---指定使用yum的方法installed,present  ---安装软件包removed,absent      ---移除软件包latest              ---安装最新软件包

copy模块

推送文件模块[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt owner=www group=www mode=0600"在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息[root@m01 ~]# ansible oldboy -m copy -a "content='bgx' dest=/tmp/oldboy"copy模块主要参数src — 推送数据的源文件信息dest — 推送数据的目标路径backup — 对推送传输过去的文件,进行备份content — 直接批量在被管理端文件中添加内容group — 将本地文件推送到远端,指定文件属组信息owner — 将本地文件推送到远端,指定文件属主信息mode — 将本地文件推送到远端,指定文件权限信息force — 分为force=no或yes,如果目标主机包含该文件,但内容不同,设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

service服务模块

[root@m01 ~]# ansible oldboy -m service -a "name=crond state=stopped enabled=yes"主要参数name — 定义要启动服务的名称state — 指定服务状态是停止或是运行started — 启动stopped — 停止restarted — 重启reloaded — 重载enabled — 是否让服务开启自启动1.安装  [root@m01 ~]# ansible web -m yum -a "name=httpd state=installed"2.配置  [root@m01 ~]# ansible web -m copy -a "content='This is Ansible' dest=/var/www/html/index.html"  3.启动  [root@m01 ~]# ansible web -m service -a "name=httpd state=started"script模块编写脚本[root@m01 ~]# mkdir -p /server/scripts[root@m01 ~]# cat /server/scripts/yum.sh#!/usr/bin/bashyum install -y iftop在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行[root@m01 ~]# ansible oldboy -m script -a “/server/scripts/yum.sh”

file配置模块

创建目录[root@m01 ~]# ansible oldboy -m file -a “path=/tmp/oldboy state=diretory”创建文件[root@m01 ~]# ansible oldboy -m file -a “path=/tmp/tt state=touch mode=555 owner=root group=root”[root@m01 ~]# ansible oldboy -m file -a “src=/tmp/tt path=/tmp/tt_link state=link”path — 指定远程主机目录或文件信息recurse — 递归授权state —directory — 在远端创建目录touch — 在远端创建文件link — link或hard表示创建链接文件absent — 表示删除文件或目录mode — 设置文件或目录权限owner — 设置文件或目录属主信息group — 设置文件或目录属组信息

group模块

name — 指定创建的组名gid — 指定组的gidstateabsent — 移除远端主机的组present — 创建远端主机的组(默认)创建组,指定gid[root@m01 ~]# ansible oldboy -m group -a “name=oldgirl gid=888”

user模块

uid — 指定用户的uidgroup — 指定用户组名称groups — 指定附加组名称password — 给用户添加密码shell — 指定用户登录shellcreate_home — 是否创建家目录创建oldgirl,设定uid为888,并加入gid为888[root@m01 ~]# ansible oldboy -m user -a “name=oldgirl uid=888 group=888 shell=/sbin/nologin create_home=no”随机生成加密字符串(-1使用MD5进行加密 -stdin 非交互式 -salt 加密参数)[root@m01 ~]# echo “bgx” | openssl passwd -1 -stdin固定加密字符串[root@m01 ~]# echo “123”| openssl passwd -1 -stdin -salt ‘salt创建普通用户,并配置对应的用户密码[root@m01 ~]# echo “bgx” | openssl passwd -1 -stdin$1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb.[root@m01 ~]# ansible oldboy -m user -a ‘name=xlw password=”$1$765yDGau$diDKPRoCIPMU6KEVEaPTZ0″‘

crond模块

正常使用crond服务[root@m01 ~]# crontab -l* * * * */bin/sh/server/scripts/yum.sh使用ansible添加一条定时任务[root@m01 ~]# ansible oldboy -m cron -a “minute=* hour=* day=* month=* weekday=* job=’/bin/sh /server/scripts/test.sh'”[root@m01 ~]# ansible oldboy -m cron -a “job=’/bin/sh /server/scripts/test.sh'”设置定时任务注释信息,防止重复,name设定[root@m01 ~]# ansible oldboy -m cron -a “name=’cron01′ job=’/bin/sh /server/scripts/test.sh'”删除相应定时任务[root@m01 ~]# ansible oldboy -m cron -a “name=’ansible cron02′ minute=0 hour=0 job=’/bin/sh /server/scripts/test.sh’ state=absent”注释相应定时任务,使定时任务失效[root@m01 scripts]# ansible oldboy -m cron -a “name=’ansible cron01′ minute=0 hour=0 job=’/bin/sh /server/scripts/test.sh’ disabled=yes”

mount模块

present —开机挂载,仅将挂载配置写入/etc/fstabmounted —挂载设备,并将配置写入/etc/fstabunmounted —卸载设备,不会清除/etc/fstab写入的配置absent —卸载设备,会清理/etc/fstab写入的配置仅将挂载的配置写入/etc/fstab,并不会执行挂载操作[root@m01 ~]# ansible oldboy -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=present"临时挂载设备,并将挂载信息写入/etc/fstab[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted"临时卸载,不会清理/etc/fstab[root@m01 ~]# ansible web -m mount -a “src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=unmounted”卸载,不仅临时卸载,同时会清理/etc/fstab[root@m01 ~]# ansible web -m mount -a “src=172.16.1.31:/data path=/data fstype=nfs opt

===============================================================================================================

day-40

什么是playbook?

把所有操作按照ansible编程语法,放在文件里执行就是playbook。

ansible剧本编写格式说明

ansible剧本遵循PYyaml语法规则进行编写,yaml文件基本编写规则如下说明:

规则一:缩进

yaml使用一个固定的缩进风格表示数据层结构关系,需要每个缩进级别由两个空格组成。切记一定不能使用tab键进行缩进。

规则二:冒号

每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)

规则三:短横线

想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

1.YAML介绍

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy dt Net与Oren Ben-Kiki也是这语言的共同设计者。

YAML Ain't Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。其特性:

YAML的可读性好

YAML和脚本语言的交互性好

YAML使用实现语言的数据类型

YAML有一个一致的信息模型

YAML易于实现

YAML可以基于流来处理

YAML表达能力强,扩展性好

更多的内容及规范参见http://www.yaml.org。

12.8.3 playbook替代方案1

[root@m01 ~]# cat ansible.sh #判断 循环,可以脚本实现。ansible oldboy -m file -a"dest=/tmp/oldboy_file state=touch"ansible oldboy -m file -a"dest=/tmp/oldboy_file state=touch owner=oldboy group=oldboy mode=ugo=rwx"ansible oldboy -m yum -a"name=nginx state=installed"ansible oldboy -m service -a"name=crond state=started enabled=yes"ansible oldboy -m cron -a"name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"

playbook替代方案2:通用

[root@m01 ~]# cat ~/set.sh touch /tmp/oldboy_filechown oldboy.oldboy /tmp/oldboy_fileyum install nginx -y/etc/init.d/crond startchkconfig cornd onecho'#sync time oldboy'>>/var/spool/cron/rootecho'00 00 * * *  /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'>>/var/spool/cron/root执行:ansible oldboy -m script -a"~/set.sh"

12.8.4实践

ansible oldboy -m shell -a "echo oldboy linux. >/tmp/oldboy.log"

把这行命令写成剧本:

准备:

mkdir -p /etc/ansible/yaml

cd  /etc/ansible/yaml

vim p1.yml

开始编写:

[root@m01 /etc/ansible/yaml]# cat /etc/ansible/yaml/p1.yml-hosts:oldboytasks:-name:Create a log fileshell:echo oldboy linux. >/tmp/oldboy.log      [root@m01 /etc/ansible/yaml]# cat p2.yml -hosts:oldboytasks:-shell:echo oldboy linux. >/tmp/oldboy.log

测试:

[root@m01 /etc/ansible/yaml]# ansible-playbook -C /etc/ansible/yaml/p1.yml 说明:利用ansibl-playbook命令执行剧本,-C参数表示测试剧本任务执行,类似话剧的彩排一样。PLAY [oldboy] ***********************************************************************************************************TASK [Gathering Facts] **************************************************************************************************ok: [172.16.1.41]ok: [172.16.1.31]TASK [Create alogfile] ************************************************************************************************skipping: [172.16.1.41]skipping: [172.16.1.31]PLAY RECAP **************************************************************************************************************172.16.1.31                : ok=1    changed=0    unreachable=0    failed=0  172.16.1.41                : ok=1    changed=0    unreachable=0    failed=0

执行:

[root@m01 /etc/ansible/yaml]# ansible-playbook /etc/ansible/yaml/p1.yml PLAY [oldboy] ***********************************************************************************************************TASK [Gathering Facts] **************************************************************************************************ok: [172.16.1.31]ok: [172.16.1.41]TASK [Create alogfile] ************************************************************************************************changed: [172.16.1.31]changed: [172.16.1.41]PLAY RECAP **************************************************************************************************************172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0  172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0

ansible oldboy -m file -a"dest=/tmp/oldboy1 state=touch"编写剧本:[root@m01 /etc/ansible/yaml]# cat p3.yml -hosts:oldboyremote_user:roottasks:-name:Create New Filefile:name=/tmp/oldboy1 state=touch

定时任务:

ansible oldboy -m cron -a"name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"#crond-id-001:time sync by oldboy*/5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1编写剧本:[root@m01 /etc/ansible/yaml]# cat p4.yml - hosts: oldboy  tasks:    - name: Cron time sync      cron: name='sync time'minute=*/10 job='/usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1'练习题:每周一1-5 上午8:30 /server/scripts/class.sh编写剧本:[root@m01 /etc/ansible/yaml]# cat p5.yml - hosts: oldboy  tasks:    - name: Cron 每周1-5,8:30 老男孩脱产上课      cron: name='oldboy class'minute=30 hour=08 weekday=1-5  job='/bin/sh /server/scripts/class.sh>/dev/null 2>&1'结果:[root@nfs01 ~]# crontab -l|tail -2#Ansible: oldboy class30 08 * * 1-5 /bin/sh /server/scripts/class.sh>/dev/null 2>&1ansible oldboy -m copy -a"src=/etc/rsyncd.conf dest=/etc/rsyncd.conf backup=yes"ansible oldboy -m copy -a"content='rsync_backup:oldboy' dest=/etc/rsync.password backup=yes mode=0600"编写剧本:    [root@m01 /etc/ansible/yaml]# cat p6.yml - hosts: backup  tasks:    - name: copy rsyncd.conf      copy: src=/data/rsyncd.conf.template dest=/etc/rsyncd.conf mode=0600 backup=yes    - name: create rsync.password      copy: content='rsync_backup:oldboy'dest=/etc/rsync.password mode=0600

=====================================================================================================================================

day-41

DNS解析流程

解析顺序

1) 浏览器缓存

当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);

2) 系统缓存

当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;

3) 路由器缓存

当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;

4) ISP(互联网服务提供商)DNS缓存

当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;

5) 根域名服务器

当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;

6) 顶级域名服务器

顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;

7) 主域名服务器

主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;

8)保存结果至缓存

本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。

http(超文本传输协议)

1.由html文件->包含各种各样的元素(URL链接)->web页面

2.URL结构

http://www.qq.com:80/news/index.html

协议 —- 域名:—- 端口– 具体的文件名下面的某个页面

3.http的工作原理

1.发起dns请求 

2.获取到域名对应的IP地址 

3.浏览器发起tcp的连接 

4.基于tcp的连接,传输http的请求(一次tcp的连接,可以建立多次的http请求) 

5.浏览器请求/index.html 

6.服务器响应/index.html至浏览器 

7.浏览器翻译index.html中的内容为人类可读 

8.断开TCP的四次挥手 

http的短连接:建立一次tcp的连接,发起一次http的请求,结束,tcp断开。

http的长连接:建立一次tcp的连接,发起多次http的请求,结束,tcp端口。

4.http的请求方法

get    请求(获取)一个网站的页面

post    上传什么内容至服务器

5.http的响应状态码(以3位数字组成)

200    成功

301    永久重定向(redirect)

302    临时重定向(redirect)

304    浏览器缓存

403    请求不到首页,权限被拒绝

404    资源找不到

500    服务器内部错误,程序代码错误

502    找不到后端的资源

504    请求超时

6.用户访问网站携带的参数,以及服务端返回的参数

1.概况

RequestURL:http://10.0.0.7/index.html# 请求的URL地址RequestMethod:GET# 请求的方法(获取)StatusCode:304Not Modified# 返回的状态RemoteAddress:10.0.0.7:80# 请求的地址

2.客户端请求的头部信息

Accept: text/html,# 请求的类型Accept-Encoding: gzip, deflate# 是否进行压缩Accept-Language: zh-CN,zh;q=0.9# 请求的语言Cache-Control: max-age=0# 缓存Connection: keep-alive# TCP长连接Host: www.oldboyedu.com# 请求的域名If-Modified-Since: Fri,04May201808:13:44GMT# 修改的时间If-None-Match:"a49-56b5ce607fe00"# 标记Upgrade-Insecure-Requests:1# 在http和https之间起的一个过渡作用User-Agent: Mozilla/5.0# 用户的浏览器===========请求一个空行=========================

3.服务端响应的头部信息

HTTP/1.1 304 Not Modified# 返回服务器的http协议,状态码Date: Fri, 14 Sep 2018 09:14:28 GMT# 返回服务器的时间Server: Apache/2.4.6 (CentOS) PHP/5.4.16# 返回服务器使用的软件(Apache php)Connection: Keep-Alive# TCP长连接Keep-Alive: timeout=5, max=100# 长连接的超时时间ETag:"a49-56b5ce607fe00"# 验证客户端标记===========返回一个空行====================================返回内容页面=========================

HTTP媒体类型

image.png

你可能感兴趣的:(第八周课堂笔记)