深入理解TCP/IP应用层
tcp/ip四层模型分为: 应用层,传输层(只关注起点(发送者)和终点(接收者)),网络层(规划出一条或几条路线),数据链路层(关注两个相邻点之间怎么传输)
协议 | ||
应用层 | dns,uri,html,http,ssl,smtp,pop,imaptelnet,ssh,ftp,snmp | 应用程序相关 |
传输层 | tcp,udp,udp-lite,sctp,dccp | 操作系统内核负责 |
网络层 | arp,ip,icmp | 操作系统内核负责 |
数据链路层 | 网卡层(以太网协议) |
设备驱动程序及 网络接口负责 |
一、应用层:
1、http协议(主要协议):http是超文本传输协议,是当前最流行也是最典型的应用层协议
http还衍生出了封装ssl
协议的“安全版”,https是http协议的安全版,从2015年以后,基本上采用https,其更为安全,加密
2、http协议的格式:
http协议格式又分为其请求和相应模式
请求模式:
1)首行:方法(get/post/head/put/delete/...)+url+版本号(http1.1为多数场景下)
2) content-length 表示body部分的长度(字节)
content-type 表示body部分的数据格式
协议头header:请求的属性,每一行都是一个键值对,键和值之间用": "来分割,每组属性之间用\n分隔
user-agent:表示操作系统和浏览器的型号
- host 表示客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- referer表示当前页面是从哪个页面跳转过来的
- cookie:用于在客户端存储少量信息. 通常用于实现会话(session)的功能,浏览器存储数据的一种方式(客户端的概念) ,这里面包含身份标识session id内容都是由对应的程序员决定 的,session是服务器进行描述用户身份信息的方式(服务端的概念)
- location:搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
空行:表示header结束的标记
3)body正文:即协议正文,数据种类非常多样了,也可能body为空(get请求一般为空,post请求一般有数据)空行后面的内容都是body,body允许为空字符串,如果body存在,则在header中会有一个
响应模式:
1)首行+状态码(标识这次请求是否失败,以及原因)+状态码描述信息
2)协议头header,每一行是一个冒号分隔的键值对,请求的属性,每组属性之间用\n分隔,遇到空行表示header结束
3)body:空行后面的内容都是body,body允许为空字符串,如果body存在,则在header中会有一个content-length属性会标识body的长度;
如果服务器返回了一个html页面那么html页面中的内容就是在body中
3、http协议的方法:
方法 | 说明 | 支持的http协议版本 |
post | 获取资源 | 1.0, 1.1 |
get | 传输实体主体 | 1.0, 1.1 |
put | 传输文件 | 1.0, 1.1 |
head | 获得报文首部 | 1.0, 1.1 |
delete | 删除文件 | 1.0, 1.1 |
options | 询问支持的方法 | 1.1 |
trace | 追踪路径 | 1.1 |
connect | 要求用隧道协议连接代理 | 1.1 |
link | 建立和资源之间的关系 | 1.0 |
unlick | 断开连接关系 | 1.0 |
常用的方法:get和post
get和post的区别?
get把数据放在query_string来传输,post请求通常把数据据通过body来传输
并不是唯一,也可以互放,只是习惯性
4、http的状态码:
类别 | 原因短语 | |
1xx | informational(信息性状态码) | 接受的请求正在处理 |
2xx | success(成功状态码) | 请求正常处理完毕 |
3xx | redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4xx | client error(客户端错误状态码) | 服务器无法处理请求 |
5xx | server error(服务器错误状态码) | 服务器处理请求出错 |
200 ok 请求成功 2xx表示请求成功
302 重定向 3xx重定向(呼叫转移)
303 location:url 重定向到某url
404 not found表示访问失败(但百度并没有用404而是302) 4xx都表示客户端开头
403表示没有权限
5xx表示服务器错误
502(服务器挂了)
504超时(服务器响应速度过慢,服务器部署在某云上,带宽过小,卡只是现象,还有cpu,内存问题...cpu占用,带宽占用,内存占用)
cookie和session id的区别:
cookie:存了一个字符串(方便数据永久性存储):客户端里所保存的字符串
session id(大概率放到cookie) 会话id,session对象里面记录某个特定用户的登陆等信息,购买记录,购物车,结算等
会话对象由服务器创建,分配一个session id,再将session id写到浏览器的cookie里面,后续浏览器再访问你相同的网站(区别相同网页,而是网站)的时候,都会带上一个相同的cookie内容,来识别用户信息
(session是服务器进行描述用户信息的方式(服务器端的概念))
实现session机制的过程中(程序员手动实现的),通常要把 session id放到cookie中来保存
post