http协议及web服务基础
Web Service 应用层服务--http,https
应用层主要实现某类具体应用:跟dns相似,由运行在用户空间的应用程序来负责完成
跟dns服务类似,都是C/S架构
传输层协议:TCP,UDP,SCTP
IANA:互联网地址名称分配机构
0-1023:众所周知,永久的分配给固定的应用使用,又称为特权端口(只有管理员有权限控制端口);
1024-41951:也是注册端口,但要求不是特别严格,分配给程序注册为某应用使用;
41952+:一般到6w,客户端程序随机使用的端口,称之为动态端口或私有端口;其范围定义在/proc/sys/net/ipv4/ip_local_prot_range;
BDS Socket(套接字)是IPC的一种实现,允许位于不同主机(也可以是同一主机)上的进程之间进行通讯;
Socket API(封装了内核中的socket通信相关的系统调用)
通过Socket系统调用创建套接字,有以下分类
SOCK_STREAM:TCP套接字
SOCK_DGREAM:UDP套接字
SOCK_RAM:raw套接字
根据套接字所使用的地址格式,Socket Domail:
AF_INET: Address Family IPV4 地址
AF_INET6: ipv6 地址
AF_UNIX:同一主机上的不同进程间基于socket套接字通信使用的一种地址;又称为UNix_SOCK机制
想要基于套接字通讯,必须某一端先监听在端口上,客户端去发请求,监听者去响应
如图,客户与服务器如何通讯,首先服务器端要监听,如何监听并接收请求?
第一步socket()、先向内核或者库调用发起socket()系统调用或者socket()库调用--目的是为了创建一个套接字
只有创建一个套接字才能监听,接受客户端请求,所以socket()就是请求创建套接字
套接字是ip加端口,当程序第一次启动的时候,需要向内核注册申请一个套接字用于随后的通讯
申请成功进入下一步
第二步bind()、程序绑定在套接字上
第三步listen()、监听套接字
第四步accept()、启动accept()系统调用,接受客户端请求
如果没有客户端请求,则处于阻塞状态或者睡眠状态,直至客户请求到达
而客户端这边也需要创建一个套接字,然而并不用监听,所以无需绑定和listen这两个过程
通过connect()发起系统调用,connetc这个函数包括了服务器IP及端口
TCP三路握手中的最后一次,客户端要发送write()套接字请求,对linux而言,一切皆文件
在本地创建write()套接字,所谓通过套接字传输数据,就是向套接字写数据
服务端用read()套接字文件接受数据请求,并处理请求,将处理结果写入write()套接字文件中
内核在套接字中取得数据,应答给客户端的read()套接字,客户端读取read()套接字获得数据
在这一次通信中,文件过大需要分多次ip报文发送即read()-->write()重复执行
若本次通信结束--close()关闭并向服务端发送关闭请求
谁先发送的请求,谁负责结束
TCP协议的特性:
建立连接:三次握手
将数据打包成段:校验和(CRC32)
确认、重传及超时机制;
排序:基于逻辑序号完成
流量控制:滑动窗口算法;
拥塞控制:慢启动和拥塞避免算法;
http:hyper text transfer protocol,超文本传输协议是应用层协议,监听80/tcp,是文本协议,主要为客户端提供超文本文件
什么是超文本--使用html①编程语言所开发的纯文本信息
css:Cascading Style Sheet
js:JavaScript 脚本开发语言 是客户端脚本 需要下载到客户端并运行
对于web服务来说,有两种开发技术,有客户端(jsp)技术和服务端(php)技术
版本协议:
http/0.9版本 原型版本,功能简陋 不可以传输图片
http/1.0 cache,MIME,method 可以传输非文本数据
MIME:Multpurpose Internet Mail Extesion 多用途互联网邮件扩展 基于文本编码传输非文本数据
method:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS 比0.9多很多请求方法
http/1.1:增强缓存功能
http/2.0:
了解rfc文档
工作模式
http请求报文:http request
http响应报文:http response
一次http事务:请求<-->响应 是由请求和相应共同组成
web资源:web resource 是一次请求以及相应的内容
静态资源(无须服务端做出额外处理):.jpg .png .gif .html .txt .js .css .mp3 .avi
动态资源(服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果): .php .jsp
注意:一个页面中展示的资源可能有多个;但每一个资源都需要单独请求
资源的标识机制:URL
Uniform Resource Locator:用于描述服务器某特定资源的位置
例: http://www.sina.com/index.html
Scheme②://Server[:Port]③/[/PATH/TO/SOME_RESOURCE]④
一次完整的http请求处理过程:
1、建立或处理链接:接受请求或拒绝请求
2、接受请求:接受来自于网络上的主机请求报文中对某特定资源的一次请求过程
3、处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;
4、访问资源:获取请求报文中请求的资源 涉及磁盘-需要向内核发起系统调用
5、构建响应报文
6、发送响应报文
7、记录日志
注:
①hyper text mark language,编程语言,超文本标记语言
②Scheme(方案):指明协议
③服务器以及端口 默认端口可以省略
④文档路径