第二十天 TCP 及socket通信原理、http协议及web服务、httpd核心配置详解

一、TCP及socket通信原理详解

二、http协议及web服务原理(一)

三、http协议及web服务原理(二)

四、httpd核心配置详解

1、tcp、udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程
      众所周知:0-1023:管理员才有权限使用,永久地分配给某应用使用(由IANA分配)
      注册端口:1024-41951:只有一部分被注册,分配原则上非特别严格。
      动态端口或私有端口:41952-65535:由内核分配临时端口,如果临时端口不够可以通过修改内核参数修改临时端口范围
       /proc/sys/net/ipv4/ip_local_port_range:定义两个数字,指定起始端口和结束端口范围
       传输层协议:TCP、UDP、SCTP、DCCP
        套接字类型:  tcp socket、udp socket、raw socket(裸套接字,不使用任何传输层协议)
        TCP协议的功能:
                     三次握手连接建立
                     将数据打包成段,借用ip报文向外传输,每一段都包含校验,可在传输过程中检查传输过程中是否出现错误,如错误重传
                     确认,发送端每发一个报文接收端就需确认一次,还需建立超时机制
                     报文传输过程中还需要对序列号进行排序,用于确定传输顺序
                     流量控制,用于处理2台主机速率不同而造成报文丢失,tcp通过滑动窗口确定一次发送和接收多少报文
                     拥塞控制
          socket: IPC(进程间通信)的一种实现,用于同一或不同主机上的进程间的通信
          socket通信在domain中实现:domain识别一个socket的方法(socket地址格式)

domain:
                       Unix Domain: 基于socket机制实现同一主机不同进程间通信的一种方式;AF_UNIX, AF_LOCAL,地址是一个路径名(文件)
                       IPv4 Domain: AF_INET, 基于socket机制借助于ipv4协议实现不同主机(也可以是同一主机)上的进程间通信的机制; 地址是32位的ipv4地址+16位的端口号
                       IPv6 Domain: AF_INET6,基于socket机制借助于ipv6协议实现不同主机(也可以是同一主机)上的进程间通信的机制; 地址是128位的Ipv6地址+16位的端口号

socket的类型:
                         TCP:流式socket,SOCK_STREAM,可靠、双向、面向字节流
                         UDP:数据报式socket, SOCK_DGRAM

相关的系统调用:
                         socket(): 创建一个新的socket
                         bind():绑定于一个套按字地址上;
                         listen(): 监听套接字;
                         accept(): 接收连接请求;

connect(): 发起连接请求;
                         close(): 关闭连接 
                         read()和write(): recv(), send(), recvfrom(), sendto()  
   
           TCP三次握手     
                         第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
                         第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
                         第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

TCP四次断开
                         第一次客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送
                         第二次服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1
                         第三次服务器B关闭与客户端A的连接,发送一个FIN给客户端A
                         第四次客户端A发回ACK报文确认,并将确认序号设置为收到序号加1

          tcp协议通过tcp状态来标记当前处于通信过程的哪个阶段:
                          CLOSED, LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIME_WAIT, CLOSED

2、http(Hyper Text Transfer Protocol),超文本传输协议。html(Hyper Text Mark Language)超文本标记语言
      CGI:Common Gateway Interface:通用网关接口,http和程序解释器的链接协议,简化版的http,
     
      http事务:http一次请求及对应的响应过程

http方法:
              GET:请求获取一个资源,需要服务器发送
              HEAD:跟GET近似,但其不需要服务响应请求的资源,而返回响应首部
              POST:基于HTML表单向服务器提交数据,服务器通常需要存储此数据;(位置:通常为关系型数据库)
              PUT:与GET相反,向服务器发送资源;服务器通常需要存储此资源;(位置:通常为文件系统)
              DELETE:删除URL指向的资源
              OPTIONS:探测服务器端对请求的URL所支持使用的请求方法
              TRACE:跟一次请求中间所经过的代理服务器、防火墙或网关等

http状态码:
              1XX:信息性状态码
              2XX:成功状态码
                        200:OK
                        201:CREATED
              3XX: 重定向类的状态码
                        301: Moved Permanently, 永久重定向
                        302: Found, 临时重定向,会在响应报文中使用“Location: 新位置”;
                        304: Not Modified
               4XX:客户端类错误
                        403:Forbidden 请求被服务器拒绝
                        404: Not Found 没有找到文件
                        405: Method Not Allowed 不允许此方法请求资源
               5XX:服务器类的错误
                        500:Internal Server Error, 服务器内部错误
                        502:Bad Gateway, 错误网关,代理服务器从上游服务器收到一条伪响应;
                        503:Service Unavailable, 服务暂时不可用

http协议:协议首部
                Name: Value 例如: Content-Type: images/gif
                首部类型:
                           通用首部:响应和请求都可以使用的首部
                           请求首部:
                           响应首部:
                           实体首部:
                           扩展首部:非标准首部,可由程序员自行创建

通用首部:
                                        Connection: 定义C/S之间关于请求、响应的有关选项
                                        Cache-Control: 缓存控制
                                 请求首部:
                                        Client-IP:  
                                        Host: 请求的主机
                                        Referer: 指明了请求当前资源原始资源的URL
                                        User-Agent: 用户代理
                                        Accept首部:
                                                   Accept: 服务端能够发送的媒体的类型
                                                   Accept-Charset: 支持的字符集
                                                   Accept-Encoding:编码格式
                                                   Accept-Language:接受的语言格式
                                  响应首部:
                                        Age: 资源响应后可以使用时长
                                        Server: 向客户说明自己的程序名称和版本

http请求报文:
                           <method> <request-URL> <version>
                           <HEADERS>
                           <entity-body>
                http响应报文:
                           <version> <status> <reason-phrase>
                           <HEADERS>
                           <entity-body>
                解释:
                           <method>:请求方法
                           <request-URL>: 请求的资源,可以是相对路径,如/images/log.jpg,也可以绝对路径
                           <version>: http协议版本,格式HTTP/<major>.<minor>,例如HTTP/1.0, HTTP/1.1
                           <headers>:各种所可以使用的首部
                           <status>: 状态码
                           <reason-phrase>: 原因短语,指状态码的易读信息

注意:http协议是无状态,stateless,是通过cookie缓存进行交互。

3、http协议版本:
            http 0.9: 仅用于传输html文档
            http 1.0:引入MIME机制,从而支持多媒体数据;引入keep-alive(持久连接)支持三次握手后不用断开继续请求支援;缓存
            http 1.1:更多请求方法,更精细缓存控制;持久连接(persistent)

一次Web资源请求的具体过程(服务器的角度)
            建立连接
    接收请求
    处理请求
            访问资源
    构建响应
            发送响应
           记录日志

连接:
          连接套接字:(client, cport <--> server, sport)
          监听套接字:80端口
     web服务器的I/O结构:
         单进程模型:每次只响应一个用户请求。
         多进程模型:多进程每个进程响应一个用户请求实现并发的效果
         复用的I/O机制:一个进程生成多个线程,每个线程响应一个用户请求
         复用的I/O机制:多个线程,每个线程响应多个用户请求

httpd的特性:
         高度模块化:core + modules
         DSO: Dynamic Shared Object
         MPM:Multipath Processing Module
                    统称,事实上有多个实现:
                             prefork: 每个进程响应一个用户请求,预先生成多个空闲进程,并发能力差;
                             worker: 启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;
                             event: 基于事件的响应方式,启动多个线程,每个线程响应N个请求;2.4版本已经可用。

httpd的功能特性:
          丰富用户认证:基本认证和摘要认证
           CGI:原生支持perl CGI
           虚拟主机:基于端口、IP、主机名
           反向代理:负载均衡
           用户站点:
           路径别名:
           支持第三方模块
     安装方式:rpm包、源码编译

4、CentOS 6: httpd

配置文件:
                               /etc/httpd/conf/httpd.conf
                              /etc/httpd/conf.d/*.conf
                      服务脚本:
                             /etc/rc.d/init.d/httpd
                             脚本配置文件:/etc/sysconfig/httpd
                      模块目录:
                             /usr/lib64/httpd/modules
                             /etc/httpd/modules: 为/usr/lib64/httpd/modules链接文件
                      主程序:
                             /usr/sbin/httpd: prefork :程序默认为prefork模式,如要修改在主配置文件中指定启动程序即可
                             /usr/sbin/httpd.event: event :http2.2版本中event还为测试阶段
                             /usr/sbin/httpd.worker: worker
                      日志文件目录:
                             /var/log/httpd
                                     access_log: 访问日志
                                     error_log: 错误日志
                      站点文档根目录:
                             /var/www/html/images/a.jpg

httpd -l:查看httpd主程序加载的核心模块,不同主程序查看:httpd.worker -l、httpd.event -l   
                      httpd -D DUMP_MODULES:查看以装载的模块

httpd.conf配置信息。grep "Section" httpd.conf
                  Section 1: Global Environment:全局配置信息,主要配置httpd自己工作特性,以及各虚拟主机共享的参数
                  Section 2: ‘Main‘ server configuration:网站主服务器配置
                  Section 3: Virtual Hosts:虚拟主机配置
                 主服务器和虚拟主机一般不同时使用;默认仅启用了主服务器
                  
                            Timeout 60:tcp/ip三次握手超时时长为60秒
                  ★持久连接:
                             KeepAlive {On|Off}:开启或关闭持久连接
                             MaxKeepAliveRequests 100:最大请求资源个数
                             KeepAliveTimeout 15:持久连接15秒后自动断开

★MPM参数:
                             <IfModule prefork.c>:判断启动主程序,默认为prefork程序配置
                                    StartServers       8 :服务启动时启动多少个空闲子进程,提供响应
                                    MinSpareServers    5:最少空闲进程
                                    MaxSpareServers   20:最大空闲进程
                                    ServerLimit      256:为maxclients客户端请求最大启动多少个子进程
                                    MaxClients       256:服务器最多同时处理多少客户端请求,并发数
                                    MaxRequestsPerChild  4000:每个子进程最多处理多少次请求,到达设定值后进程销毁重新启动新进程
                              </IfModule>

<IfModule worker.c>worker主程序配置
                                    StartServers       4:启动多少个空闲子进程
                                    MaxClients       300:服务器最多同时处理多少客户请求,并发数
                                    MinSpareThreads    25:最小空闲线程数
                                    MaxSpareThreads   75:最大空闲线程数
                                    ThreadsPerChild     25:每个子进程可以启动多少线程                     
                                    MaxRequestsPerChild  0:每个线程最大可以处理多少请求。0表示不做限定
                              </IfModule>
                               并发带宽算法,资源大小*并发数*8=带宽KB,这个为大致算法,没有包含个首部大小。

★指定监听的地址和端口
                                Listen [IP:]PORT:Listen可以出现多次,指定监听多个地址和端口

★DSO机制装载的模块
                                LoadModule Module_Name /path/to/Module_File:指定装载的模块

以下为主服务器配置段信息
                               ServerAdmin [email protected]:服务器管理员邮箱地址
                               ServerName www.example.com:80:服务器名称,用于指定服务器名称

★ DocumentRoot "/var/www/html":指定站点根目录  
                               
                   ★站点路径访问控制有以下2种
                         基于本地文件系统路径
                            <Directory "/path/to/somewhere">绝对路径
                                        Options FollowSymLinks
                                        AllowOverride None
                             </Directory>
                             <Directory "/var/www/html">:对Directory中访问控制机制
                                        Options Indexes FollowSymLinks 
                                                    Indexes :当访问路径下无主页面,将所有资源以列表形式呈现给用户;危险,慎用 
                                                    FollowSymLinks:跟踪符号链接(可以显示链接文件所指向的文件);慎用 
                                         AllowOverride None:支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。
 
                                 基于IP做访问控制 : 
                                        Order allow,deny:先查看allow访问列表,在deny,没有在列表中的将全部deny
                                        Allow from all  :允许所有访问,也可以指定ip例如:Allow from 192.168.18.0/24
                                        Deny from 192.168.18.1:拒绝指定ip访问 
                                                  from后面能接受的地址格式:ip或网段
                             </Directory> 
                          基于URL访问路径做访问控制
                              <Location "/path/to/URL">根目录后的文件路径
                              </Location>       
                  
                       ★DirectoryIndex:指定默认页面

★配置日志功能:
                                             ErrorLog "/path/to/error_log:根据日志级别记录日志信息,包括记录当前级别和更高级日志 
                                             LogLevel {debug|info|notice|warn|error|crit|alert|emerg}:指定日志级别,
                                             CustomLog "/path/to/access_log" LogFormat_Name:自定义日志文件
                                                                 %h: 客户端地址
                                                                 %l: 远程登录名,通常为-
                                                                 %u: 认证时输入用户名,没有认证时为-
                                                                 %t: 服务器收到 用户请求时的时间
                                                                 %r:请求报名的起始行
                                                                 %>s: 响应状态码
                                                                 %b: 响应报文的长度,单位是字节
                                                                 %{HEADER_NAME}i: 记录指定首部对应的值

★路径别名:
                                   Alias /URL/ "/path/to/somewhere/":实现URL路径映射,从而所访问的资源不再依赖于站点根目录; 
                                    Alias /icons/ "/var/www/icons/":当输入icons路径时会替换为/var/www/icons/路径;

时间: 2024-12-26 07:58:47

第二十天 TCP 及socket通信原理、http协议及web服务、httpd核心配置详解的相关文章

马哥教育第二十天TCP及socket通信原理详解、http协议、httpd

1.tcp.udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程      常用端口:0-1023:管理员才有权限使用,永久地分配给某应用使用      注册端口:1024-41951:只有一部分被注册,只要确保主机上没有进程使用该端口.      动态端口或私有端口:41952-65535:由内核分配临时端口,如果临时端口不够可以通过修改内核参数修改临时端口范围       /proc/sys/net/ipv4/ip_local_port_range:定义两个

TCP及socket通信原理

一.网络互联模型 因特网在刚面世时,只有同一制造商生产的计算机才能彼此通信,制定网络互联模型的目的就是为异种的计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考. 互联参考模型: OSI七层模型(Open System Interconnect):应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 DoD四层模型:是OSI七层模型的浓缩版,包括 进程/应用层.主机到主机层.因特网层.网络接入层 以上两种模型是层次型的,分层模型的优点主要在于: ①将网络

Socket通信原理简介

Socket通信原理简介 字数1011 阅读1766 评论2 喜欢11 何谓socket 计算机,顾名思义即是用来做计算.因而也需要输入和输出,输入需要计算的条件,输出计算结果.这些输入输出可以抽象为I/O(input output). Unix的计算机处理IO是通过文件的抽象.计算机不同的进程之间也有输入输出,也就是通信.因此这这个通信也是通过文件的抽象文件描述符来进行. 在同一台计算机,进程之间可以这样通信,如果是不同的计算机呢?网络上不同的计算机,也可以通信,那么就得使用网络套接字(soc

Java基础知识强化之网络编程笔记02:Socket通信原理图解

1. Socket (1)Socket套接字  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制:  • 通信两端都有Socket.  • 网络通信其实就是Socket间的通信.  • 数据在两个Socket间通过IO传输. 2.  Socket通信原理图解:

socket通信原理

什么是socket 所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. SOCKET连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 服务端: 1.先初始化socket 2.创建socket,开始监听整个网络的连接请求. 3.当检测到来自客户端的连接请求时,向客户端发送连接请求的信息,并建立与客户端之间的连接. 4.与客户端进行通信 5.完成

TCP协议与Web服务基础

TCP协议工作在OSI模型的传输层,提供一个可靠的面向连接的服务,其可靠性在于,通信的双方要建立一个端到端的虚电路,通过三次握手建立通信,断开通信需要四次握手.其连接模型如下: 1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器.(报文1) (2) 服务器端回应客户端的一个同时带ACK标志和SYN标志的TCP报文.(报文2).表示对刚才客户端SYN报文的回应:同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯. (3) 客户再次回应服务器端一个带ACK标志

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

使用 LVS 实现负载均衡原理及安装配置详解

使用 LVS 实现负载均衡原理及安装配置详解 来源:肖邦linux 发布时间:2017-02-19 阅读次数:106 0 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用

Linux学习之路-DNS原理-BIND配置详解

DNS原理-BIND配置详解 DNS系统概述 DNS系统作用     a) DNS,简单地说,就是Domain Name System,翻成中文就是"域名系统".主要的功能就是将人易于记忆的Domain Name与人不容易记忆的IP Address作转换.      b) DNS提供正向解析和反向解析          正向解析:根据主机名称(域名)查找对应的IP地址.          反向解析:根据IP地址查找对应的主机域名 DNS系统结构  系统结构原理  目前DNS采用的是分布