传输层:提供进程地址

  TCP:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路。端口号:0-65535

  UDP:用户报文协议,无连接的协议。端口号:0-65535

IANA(互联网数字分配机构)

  0-1023:知名端口,永久的分配给固定的应用使用,特权端口,22/TCP(SSH),80/TCP(HTTP),443/TCP(HTTPS),53/TCP|UDP(DNS),21/TCP(FTP)等。

  1024-41951:亦为注册端口,单要求并不严格分配给程序注册为某应用使用,11211/TCP, 11211/UDP (memcached), 3306/TCP(MySQL)等。

  41952-65535:客户程序随机使用的端口;动态端口,或私有端口,其范围的定义:/proc/sys/net/ipv4/ip_local_port_range

Socket:IPC(进程间通信)的另一种实现,允许位于不同主机(甚至同一主机)上不同的进程之间进行通信,数据交换,Socket API, 1983年,4.2 BSD。

  SOCK_SREAM:TCP套接字

  SOCK_DGRAM:UDP套接字

  SOCK_RAW:裸套接字

IPv4地址分类:

  IPv4共分为5大类:  

    A类:1.0.0.0-126.255.255.255,netmask:8,每个网络有2^24-2个可用IP

    B类:128.0.0.0-191.255.255.255,netmask:16,每个网络有2^16-2个可用IP

    C类:192.0.0.0-223.255.255.255,netmask:24,每个网络有2^8-2个可用IP

    D类:224.0.0.0-239.255.255.255,组播

    E类:240.0.0.0-255.255.255.255,科研等其他用途

  私有IP:

    A:10.0.0.0/8

    B:172.16.0.0/16-172.16.31.0.0/16

    C:192.168.0.0/24-192.168.255.0/24

  本地环回地址:

    127.0.0.0/8

  TCP协议特性:

    建立连接:三次握手

    将数据打包成段:校验和(CRC-32)

    确认、重传以及超时;

    排序:逻辑排序

    流量控制:滑动窗口算法

    拥塞控制:慢启动和拥塞避免算法

  Socket Domain:指明通信的“域”(范围),我们是在IPv4还是IPv6这个范围内通信,也就决定了我们通信的地址是IPv4格式还是IPv6格式。

    AF_INET:Adress Family,IPv4

    AF_INET6:Adress Family,IPv6

    AF_UNIX:同一主机上不同进程之间通信时使用。

    每类套接字都至少提供了两种socket:流、数据报。

      流:可靠的传递,面向连接,无边界。

      数据报:不可靠的传递、有边界、无连接。

  套接字相关的系统调用:  

    socket():创建一个套接字

    bind():绑定

    listen():监听

    accept():接收请求

    connet():请求连接建立

    write():发送

    read():接收

       send(), recv(), sendto(), recvfrom()

HTTP:hpyer text transfer protocol(超文本传输协议),80/TCP

  html:编程语言,超文本标记语言

<html>
<head>
<title>TITLE</title>
</head>
<body>
<h1>这是一个标题</h1>
<p>这是一个段落</p>
<a href=https://www.baidu.com>这是一个连接</a>
</body>
</html>

  CSS:Cascading Style Sheet,层叠样式表

  js:javascript

  MIME:Multipurpose Internet Mail Extesion,多用途互联网邮件扩展协议,参考连接:https://baike.baidu.com/item/MIME/2900607?fr=aladdin

  工作机制:参考http://blog.csdn.net/hguisu/article/details/8680808

    http请求

    http响应

  Web资源:web resource

    静态文件:.jpg   .gif    .html     .txt    .js     .css    .mp3    .mp4

    动态文件:.php    .jsp...

    媒体: 

      媒体类型(MIME类型):major/minor

        text/html

        text/plain

        image/jpeg

        image/gif

  URI:Uniform Resource Identifier,统一资源标识符。

    URL:Uniform Resource Locator,统一资源定位符,用于描述某服务器特定资源的位置

      Scheme://Server:port/path/to/resoource

        http://www.magedu.com/images/logo.jpg

    URN:Uniform Resource Nameing,统一资源名称,目前较少使用

  http的协议版本

    HTTP/0.9:原型版本,功能简陋

    HTTP/1.0:第一个被广泛使用的版本,支持MIME.

    HTTP/1.1:在1.0的版本上改良了某些特性,如增强了缓存功能。

    HTTP/2.0:HTTP/NG下一代的HTTP

  一次完整的http请求处理过程: 

    1.建立或处理连接;接收请求或拒接请求。

    2.接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程。

      并发访问相应模型(Web I/O):

        单进程I/O结构:启动一个进程处理用户请求,一次只能处理一个,多个请求被串行响应;

        多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

        复用I/O结构:一个进程响应N个请求;

          多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

          事件驱动:event-driven;

        复用的多进程I/O结构:启动M个进程,每个进程响应N个请求;

    3.处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息。

      元数据:请求报文首部

        <method><URL><VERSION>

        Host:www.baidu.com  请求的主机名称

        Connection:

    4.访问资源:获取请求报文中请求的资源。  

      web服务器即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态生成的资源;这些资源放置域本地文件某路径下,此路径通常称之为DocRoot.

      /www/var/html/

        images/1.jpg

      http://www.magedu.com/images/1.jpg

      web服务器资源路径映射方式:

        a.docroot

        b.alias

        c.虚拟主机docroot

        d.用户家目录docroot

    5.构建响应报文

      资源的MIME类型:

        显示分类

        魔法分类

        协商分类

      URL重定向:web服务器构建的响应并非客户端请求的资源,而是另外一个访问路径下的资源。

    6.发送响应报文

    7.记录日志

  http服务器程序

    httpd

    nginx

    lighttpd

    应用程序服务器:

      IIS

      Tomcat,Jetty,Jboss,Resin

      Webshpere,Weblogic,oc4j

    www.netcraft.com (查看各程序的使用主机量占比)

    httpd的安装配置和使用:

    httpd:apache

      a patchy server =apache

      ASF:apache software foundation(Apache软件基金会)

    httpd的特性:

      高度模块化:core+modules

      DSO:Dynamic Shared Object

      MPM:Multipath Processing Modules(多道处理模块)

        prefork:多进程模型,每个进程响应一个请求;一个主进程负责生成N个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个。

        worker:多线程模型,每个线程响应一个请求;一个主进程生产多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求。

          m进程,n线程:m*n个请求

        event:事件驱动模型,每个线程响应N个请求;一个主进程生成m个子进程,每个进程字节n个请求

          httpd-2.2:event为测试使用

          httpd-2.4:event可生产使用

    httpd的功能特性:   

      虚拟主机

        IP、Port、FQDN

      CGI:Common Gateway Interface,通用网关接口

      反向代理

      负载均衡

      路径别名

      丰富的认证机制:basic|digest

      支持第三方模块

   CentOS 6:

      程序环境:

        配置文件:

          /etc/httpd/conf/httpd.conf

          /etc/httpd/conf.d/*.conf

        服务脚本:

          /etc/rc.d/init.d/httpd

          配置文件:/etc/sysconfig/httpd

        主程序文件:

          /usr/sbin/httpd

          /usr/sbin/httd.event

          /usr/sbin/httpd.worker

        日志文件目录:/var/log/httpd/  

            access_log:访问日志

            error_log:错误日志

        站点文档目录:/var/www/html

        模块文件路径:/uar/lib64/httpd/modules

        配置文件组成:

          ~]# grep "Section" /etc/httpd/conf/httpd.conf   
          ### Section 1: Global Environment  /*全局环境变量*/
          ### Section 2: 'Main' server configuration/*中心主机配置*/
          ### Section 3: Virtual Hosts/*虚拟主机配置*/

          配置格式:directive value

            directive:不区分字符大小写

            value:为路径时,取决于文件系统

        常用配置:

          1.修改监听的IP和Port:Listen [IP:]PORT(省略IP表示监听本机所有IP;Listen可以重复出现多次)

          2.持久连接:Persistent Connection;连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成;

            如何断开:1.数量限制 100,2.时间限制:可配置

            副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到响应。

            折中:使用较短的持久连接;(httpd-2.4支持毫秒级的持久时间)

            非持久连接:每次发起请求是都需要进行三次握手和四次断开。

            KeepAlive On|Off   --开启或关闭持久连接

            MaxKeepAliveRequests #   --最大连接数

            keepAliveTimeout #   --持久连接保持时间

          3.MPM:prefork|worker|event

            http-2.2不支持同时编译多个模块,只能编译时选定一个;rpm安装的包提供了三个二进制程序文件,分别用于实现对不同的MPM机制的支持;确认方法为:pa aux | grep httpd

          默认为/usr/sbin/httpd,其使用prefork

            查看模块列表:

              查看静态编译的模块:    

# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

              查看静态编译及动态装载模块:

httpd -M

          更换使用的httpd程序:/etc/sysconfig/httpd/    修改"HTTPD="的值重启即可。

#prefork的配置
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256  
MaxRequestsPerChild 4000
</IfModule>
#worker的配置
<IfModule worker>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 0
</IfModule>

        PV,UV:PV:Page Vies:页面浏览量;UV:User View,用户浏览量(独立IP量)

      4.DSO 

        配置指令实现模块加载:LoadModule <mod_name> <mod_path>

        模块路径可使用相对地址:1.相对于ServerRoot(/etc/httpd)指向的路径而言:/etc/httpd/modules

      5.定义'Main' server的文档页面路径,DocumentRoot

        文档路径映射:DocumentRoot指向的路径为URL路径的启始位置:DocumentRoot "/var/www/html"

          test/index.html -->http://HOST:PORT

          /test/index.html

      6.站点访问控制:可基于两种类型的路径指明对哪些资源进行访问控制

        文件系统路径:  

          <Directory ""> </Directory>

          <File "">  </File>

          <FileMatch ""> </FileMatch>

        URL路径

          <Location ""> </Location>

          ...

      7.Directory中“基于来源地址”实现访问控制

        1.Options:所有可用特性:Indexes Includs

          FollowSymLinks  SymLinksifOwnerMatch  ExecCGI    MultiViews

            None,ALL

          Indexes:索引

          FollowSymlinks:运行跟踪符号链接文件

        2.基于来源地址的访问控制机制

          Order:检测次序

            Order allow,deny

            Order deny,allow

          Allow from  IPaddr

          Deny from  ipaddr

          来源地址: 

            1.IP

            2.NetAddr:

              172.16

              172.16.0.0  

              172.16.0.0/16

              172.16.0.0/255.255.0.0

      8.定义默认主页面:DirecotryIndex index.html    index.html.var

      9.日志设定:

        错误日志:ErrorLog logs/error_log

        Loglevel warn(日志级别):debug    info    notice   warn    error    crit     alert     emerg

        访问日志:CustomLog logs/access_log combined

        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"{User-Agent}i\"" combined

          %h:客户端IP地址

          %l:Remote logname(from identd,if supplied),远程登录名,-表示为空

          %u:Remote user,(from auth;may be bogus if return status (%s) is 401);

          %t:Time the request was received(standard english format),服务器收到请求的时间

          %r:First line of request,请求报文的首行信息(method url version)

          %>:响应状态码

          %b:响应报文的大小,单位是字节,不包括响应报文的首部;

          %{Referer}i:请求报文当中“referer”首部的值;当前资源的访问入口,及从哪个页面中的超链接跳转而来。

          %{User-Agent}i:请求报文当中“User-Agent”首部的值;即发出请求用到的应用程序。

        参考连接:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

      10.路径别名

        DocumentRoot "/www/htocs"

          http://www.magedu.com/download/

          bash-4.4.2-3.el6.x86_64.rpm

            -->/www/htdocs/download/

            bash-4.4.2-3.el6.x86_64.rpm

        Alias  /URL/ "/PATH/TO/SOMEDIR/"

          Alias /bbs/ "/forum/htdocs"

            http://www.magedu.com/bbs/index.html

              -->/forum/htdocs/bbs/

      11.设定默认字符集

        AddDefaultCharset UTF-8

        GBK,GB2312,GB18030

      12.基于用户的访问控制

        认证质询:WWW-Authenticate,响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;

        认证:Authorization,客户端用户填入账号和密码后再次发送请求报文认证通过,则服务器发送响应的资源;

        认证类型:1.basic 明文   2.digest,消息摘要

        安全域:需要用户认证后方能访问的路径,应该通过名称对其进行标识,并用于告知用户认证的原因;

        用户的账号和密码存储于位置:

          虚拟账号:仅用于访问某服务器时用到的认证标识

          存储:文本文件、SQL数据库、LDAP、NIS

        basic认证:

          1.定义安全域

            <Directory "">

              Options None

              AllowOverride None

              AuthTye Basic

              AuthName "STRING"

              AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"

              Require  user  username1  username2

              ......

            </Directory>

              允许账号文件中的所有用户登录访问:

                Require valid-user

          2.提供账号和密码存储(文本文件)

            使用htpasswd命令进行管理

              htpasswd [option] passwordfile username

                -c:自动创建passwordfile,因此仅应该在添加第一个用户时使用

                -m:md5加密用户密码

                -s:sha1加密用户密码

                -D:删除指定用户

          3.实现基于组进行认证:

            <Directory>

              Options None

              AllowOverride  None

              AuthType  Basic

              AuthName  "STRING"

              AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"

              AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"

              Require group GROUP1 GROUP2

            </Directory>

            要提供:用户账号文件和组文件

              组文件:每一行第一一个组

                GRP_NAME:user1 user2 user3

            示例:

              <Dircectory "/www/htdocs/admin">

                Options None

                AllowOverride None

                AuthType Basic

                AuthName "Administrator private"

                AuthUserFile "/etc/httpd/conf.d/.htpasswd"

                AuthGroupFile "/etc/httpdconf.d/.htgroup"

                Require group webadmin

              </Directory>
      13.虚拟主机

        有三种实现方案:

          基于IP:为每个虚拟主机准备至少一个IP地址

          基于PORT:为每个虚拟主机准备至少一个专用port;实践中很少使用

          基于hostname:为每个虚拟主机准备至少一个专用的hostname;

          可混合使用上述三种方式中的任意方式。

        注意:一般虚拟主机莫与中心主机很用,所以要使用虚拟主机,先禁用中心主机;方法:注释DocumentRoot

        每个虚拟主机都有专有的配置:

          <VirtualHost "IP:PORT">

            ServerName

            DocumentRoot ""

          </VirtualHost>

            ServerAlias:虚拟主机的别名

            ErrorLog

            CustomLog

            <Directory ""> </Directory>

        示例1.基于IP

          <VirtualHost 172.16.100.250:80>

            ServerName web1.magedu.com

            DocumentRoot "/vhosts/web1/htdocs"

          </VirtualHost>

          <VirtualHost 172.16.100.251:80>

            ServerName web2.magedu.com

            DocumentRoot "/vhost/web2/htdocs"

          </VirtualHost>

        示例2:基于port

          <VirtualHost 172.16.100.251:80>

            ServerName web2.magedu.com 

            DocumentRoot "/vhost/web2/htdocs"

          </VirtualHost>

          <VirtualHost 172.16.100.251:8080>

            ServerName web3.magedu.com

            DocumentRoot "/vhost/web3/htdocs"

          </VirtualHost>

        示例3:基于hostname

          <VirtualHost 172.16.100.251:80>

            ServerNme web2.magedu.com

            DocumentRoot "/vhost/web2/htdocs"

          </VirtualHost>

          <VirtualHost>

            ServerName web4.magedu.com

            DocumentRoot "/vhost/web4/htdocs"

          </VirtualHost>

          <VirtualHost>  

            ServerName web5.magedu.com

            DocumentRoot "/vhost/web5/htdocs"

          </VirtualHost>

      14.内置的status页面

        <Location /server-status>

          SetHandler server-status

          Order deny,allow

          Deny from all

          Allow from 172.16

        </Location>

        实现:基于账号实现访问控制;

HTTP笔记1的更多相关文章

  1. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  7. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  10. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. C. Vasya and Robot二分

    1.题目描述 Vasya has got a robot which is situated on an infinite Cartesian plane, initially in the cell ...

  2. swust oj 237

    Calculate Sum-Of-Absolute-Differences 1000(ms) 65535(kb) 131 / 683 给你N个正整数,求两两之差的绝对值之和. 比如有4个数分别为 3, ...

  3. Spring-day02

    Annotation复习:1,Annotation:作为类型的元数据; 1,给类型加标记; 2,annotation可以添加各种类型的属性;2,Annotation的上的标记: 1),target:标 ...

  4. python全栈开发 * css 选择器 浮动 * 180808

    css 选择器 一.基本选择器 1.标签选择器 标签选择器可以选中所有的标签元素,比如div,ul,li ,p等等,不管标签藏的多深,都能选中,选中的是所有的,而不是某一个,所以说 "共性& ...

  5. 菜鸟详细解析Cookie注入原理

    一.SQL注入原理 我以aspx为例,现在我们来研究下Cookie注入是怎么产生的,在获取URL参数的时候,如果在代码中写成Request[“id”],这样的写法问题就出现了.我先普及下科普知识,在a ...

  6. linux --- Ansible-playbook篇

    Ansible-playbook简介 什么是playbook? 简单点说,playbook就是ansible用于配置,部署和管控节点机器的剧本,将一系列命令的集合归一使用,类似于shell脚本,不过更 ...

  7. Express全系列教程之(七):cookie的加密

    一.关于cookie加密 cookie加密是让客户端用户无法的值cookie明文信息,是数据安全的重要部分:一般的我们可以在保存cookie时对cookie信息进行加密,或者在res.cookie中对 ...

  8. mayan游戏

    这道题超级好 就是我太菜了写了几个小时不算是debug了几个小时. 我只想出了几个小剪枝 可能是状态不太好吧 写完这道题真的是完美诠释了什么,叫做: 暴力出奇迹!!! 真的是太暴力了. 最多只移动5步 ...

  9. Python 中文分词(结巴分词)

    特点: 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析: 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义: 搜索引擎模式,在精确模式的基础上,对长词 ...

  10. Python title()、upper()、lower()方法--string

    描述 title()方法: 将字符串中的单词“标题化”,即首字母大写,其余字母转化为小写. upper()方法:将字符串中的小写字母转化为大写字母. lower()方法:将字符串中的大写字母转化为小写 ...