标签:http协议httpd
1、tcp、udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程
常用端口:0-1023:管理员才有权限使用,永久地分配给某应用使用
注册端口: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机制:多个线程,每个线程响应多个用户请求
马哥教育第二十天TCP及socket通信原理详解、http协议、httpd
标签:http协议httpd
原文地址:http://5990383.blog.51cto.com/5980383/1643760