TCP/IP五层模型
TCP/IP是一组协议的代名词,它包括了许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫他的下一层所提供的网络来完成自己的需求。
- 应用层:负责应用程序之间的数据沟通;
- 传输层:负责端与端之间的数据沟通;
- 网络层:负责地址管理与路由选择;
- 链路层:负责相邻设备之间的数据传输;
- 物理层:负责光电信号的传输;
物理层考虑的比较少,因此很多时候也可以称为TCP/IP四层模型;
一般来说:
-
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;
-
对于一台路由器,它实现了从网络层到物理层;
-
对于一台交换机,它实现了从数据链路层到物理层;
-
对于集线器,只实现在物理层;
应用层
简单理解,应用层就是负责应用程序之间数据沟通,比如:简单的电子邮件传输(SMTP),文件传输(FTP),网络远程访问协议(Telnet)等。
协议?
协议就可以理解为一种“约定”。
在应用层已经有了特别成熟好用的协议——HTTP协议。
HTTP协议
HTTP协议格式:
HTTP请求:
由上图可以看出,HTTP请求的组成有:
- 首行:方法 + url + 版本
上图为post方法 + 访问的网址 + 版本号
常见版本号有:HTTP/1.1 、 HTTP/2.2 、HTTP/3.0 - 协议头(Header):从第二行开始,表示请求的属性:
若干用冒号分割的键值对,每组键值对占一行; - 空行:表示Header到此处结束
- 协议正文(Body):空行之后的内容都是Body,Body允许为空字符串。
如果Body存在,则Header中会有一个Content-Length属性来表示Body的长度。
一般情况下,GET请求没有body,POST请求才有Body,GTE更偏向于获取数据
HTTP响应:
HTTP响应的组成:
- 首行:版本号 + 状态码 + 状态码描述信息
- 协议头(Header): 用冒号分隔的键值对,没对占一行
- 空行:header部分的结束标记
- 协议正文(Body):可以是html,CSS,JavaScript,图片,json数据…
HTTP的状态码:
- 1XX:信息性状态码:接受的请求这个字处理
- 2XX:成功状态码:请求正常处理完毕
- 3XX:重定向状态码:需要进行附加操作以完成请求
- 4XX:客户端错误状态码:服务器无法处理请求
- 5XX:服务器错误状态码:服务器处理请求出错
常见状态码:
200(访问成功),301(永久重定向),302(暂时重定向),403(没有权限),404(未找到指定资源),502(服务器错误),504(服务器响应超时)
HTTP常见的方法:
- GET:获取资源
- POST:传输实体主体
- PUT:传输文件
- DELETE:删除文件
- OPTIONS:询问支持的方法
GET 和POST的区别?
GET更偏向于获取数据,没有正文(Body),GET请求往往会把自定制数据放在query-string中;POST请求往往会把自定制数据放在body中。
HTTP常见的Header:
- Content-Type:数据类型(text/html)
- Content-Length:正文的长度
- Host:客户端告知服务器,所请求的资源在哪个主机的哪个端口上
- User-Agent:声明用户的操作系统和浏览器版本
- reference:当前页面是从哪个页面跳转过来的
- location:搭配3XX状态码使用,告诉客户端接下来要去哪里访问
- Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能