所谓协议就是大家一起遵守的规范格式,不应单独的去理解一章节的知识点,如把一章一章串成知识流和故事,人习惯和依赖以故事的形式记忆,有人能记住π小数位的几百位 是因为他把0到9具体化成10个人 串成他们故事流来记的。
网络流由下往上分为:
物理层
数据链路层 硬件驱动、NIC
网络层 IP协议
传输层 TCP(传输控制协议)、UDP(用户数据报协议)
会话层
应用层和表现层 HTTP协议,FTP(文件传送协议),DNS(域名系统)
一、生成HTTP请求消息
1. 从在浏览器输入网址开始。网址,准确来算是URL(Uniform Resource Locator 统一资源定位符),如以http:// ftp: file : 开头
浏览器第一步做的是对URL进行解析,从而生成发送给Web服务器
URL拆分
ftp:// + user:passowrd + @ftp.shenbnnc.com:+ 21 +/dir/test.html 用户名(可省略)+密码(可省略)+FTP服务器+端口号(可省略)+文件的路径
http:// + user:passowrd + @ www.cmbc.com.cn:+8080+ /site/index.html 用户名(可省略)+密码(可省略)+Web服务器+端口号(可省略)+文件的路径
2.对URL进行解析之后,浏览器确定了We服务器和文件名,接下来就是跟进这些信息生成HTTP请求消息
请求消息= 方法 + URI(统一资源标识符)
“进行什么样的操作” + “对什么”
(a)请求消息
GET /Sample.htm HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: www.google.cn
Connection: Keep-Alive
第一行为请求行 来说明资源
第二部分为消息头 用于表示请求的附加信息
第三部分为消息体 可为空,包含客户端向服务器发送的数据,如POST方法提交表单数据
(b)响应消息
HTTP/1.1 200 OK
Date: Mon, 24 Seven 2017 05:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
第一行状态行 1XX 告知请求进度,2XX 成功, 3XX 需进一步操作 , 4XX 资源不存在, 5XX 服务器错误
还有就是消息头,和消息体及服务器向客户端发送的数据
3.生成HTTP消息之后,接下来需要委托操作系统讲消息发送给Web服务器,浏览器本身不具备讲消息发送网络的功能。
在委托操作系统发消息是,必须提供IP地址而不是域名,因此得向DNS服务器查询Web服务器的IP地址,及调用Socket一个程序组件
。同样发送数据也得需要Socket多个程序组件,大致分为4个阶段:
a)创建套接字 创建
b)讲管道连接到服务器端的套接字上 连接
c)收发数据 通信
d)断开管道并删除套接字 断开
<描述符> =socket(<ipv4>,<流模式>,...)
conent(<描述符>,<服务器的IP地址和端口号>);
write(<描述符>,<发送数据>,<数据长度>);
<数据长度>=read<<描述符>,<接收缓冲区>
colse.(<描述符>);
..