传输层:提供进程地址

  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. django——模板层

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  2. MBA 拓展训练总结

    1. 拓展训练,大家绑腿跑 沟通时间极短, 规则制定不完善, 对方'王者队'沟通很好, 女队练习的同时, 男队边观看边练习, 效率很高, 由于之前王者输的比较多, 总结很多, 所以执行力也占优了, 我 ...

  3. [LeetCode] Kth Largest Element in a Stream 数据流中的第K大的元素

    Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...

  4. java 实现文件上传下载以及查看

    项目的目录结构 代码  IOUtils.java package cn.edu.zyt.util; import java.io.IOException; import java.io.InputSt ...

  5. 怎样将PDF文件转换成Excel表格

    PDF文件怎样转换成Excel表格呢?因为很多的数据信息现在都是通过PDF文件进行传输的,所以很多时候,信息的接受者都需要将这些PDF文件所传输的数据信息转换成Excel表格来进行整理,但是我们应该怎 ...

  6. .NET Core 中基于 IHostedService 实现后台定时任务

    .NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET Core 2.1 则锦上添花地提供了 IHostedService 的默认实现基类 Bac ...

  7. C#获取项目程序及运行路径的方

    1.asp.net webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“\”:   2.c# winform用 A:“Applic ...

  8. 栈->栈的基本定义

    定义: 栈是限定仅在表尾进行插入或删除操作的线性表.因此,对栈来说,表尾端有特殊含义,称为栈顶,相应地,表头端称为栈底.不含元素的空表成为空栈. 示意图: 顺序栈的表示和实现 可以在初始化时分配一块连 ...

  9. k8s-N0.4-service

    本章目录 k8s中的三种网络 service的构建及参数说明 一  k8s的三种网络 在k8s集群中,k8s是有三种网络类型的,下面我们看一下下面这个图 1 节点网络:顾名思义,节点网络就是你每台物理 ...

  10. xmanager 开启X11转发失败问题解决

    安装相关rpm包 yum -y install xorg-x11-xauth xorg-x11-utils xorg-x11-fonts-* yum install dejavu-lgc-sans-f ...