5层因特网协议栈
1、应用层:存留网络应用程序和应用层协议,通过应用进程的交互来完成特定的网络应用。应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中的程序交换信息分组,位于应用层的信息分组称为报文。
应用层协议(协议的概念:定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送、接收或其他事件所采取的动作。)
- HTTP(超文本传输协议,HyperText Transfer Protocol):提供Web文档的请求和传送
- SMTP(简单邮件传输协议,Simple Mail Transfer Protocol):提供电子邮件报文的传输
- FTP(文件传输协议,File Transfer Protocol):提供两个端系统之间的文件传送
- DNS(域名解析协议,) 2、运输层:在两个主机的进程之间传送应用层报文。运输层的分组称为报文段(UDP为用户数据报)。通过运输层协议向网络层递交运输层报文段和目的地址。
运输层协议
- TCP(传输控制协议,Transmission Control Protocol):TCP向应用程序提供面向连接的服务,这种服务包括报文的可靠传递和流量控制,TCP将长报文划分为短报文,并提供拥塞控制机制。
- UDP(用户数据报协议,User Datagram Protocol):提供无连接的服务,不保证可靠传输,没有流量控制,也没有拥塞控制。 3、网络层:网络层的主要任务是为要传输的分组(IP数据报)选择一条合适的路径,使发送分组能够正确无误地按照给定的目的地址找到目的主机,交付给目的主机的传输层。网络中的路由器用于找到目的主机。
网络层协议
- IP(网际协议,Internet Protocol):定义了在数据报中的各字段以及端系统和路由器如何作用于这些字段。
- OSPF(开放式最短路径优先,Open Shortest Path First)
- BGP(边界网关协议,Border Gateway Protocol)
4、链路层:数据链路层负责在2个相邻的结点之间的链路上实现无差错的数据帧传输。每一帧包括一定的数据和必要的控制信息,在接收方接收到数据出错时要通知发送方重发,直到这一帧无差错地到达接收结点,数据链路层就是把一条有可能出错的实际链路变成让网络层看起来像不会出错的数据链路。实现的主要功能有:帧的同步、差错控制、流量控制、寻址、帧内定界、透明比特组合传输等。
链路层协议
- 多路访问协议
- 信道划分协议
- 随机接入协议
- 轮流协议
- ARP(地址解析协议,Address Resolution Protocol)
- 以太网
- PPP(点对点协议,Point-to-Point Protocol) 5、物理层:物理层传递信息需要利用一些物理传输媒体,如双绞线、同轴电缆、光纤等。物理层的任务就是为上层提供一个物理的连接,以及该物理连接表现出来的机械、电气、功能和过程特性,实现透明的比特流传输。
一、应用层
应用层协议定义了运行在不同端系统上的应用程序之间如何相互传递报文。应用层协议包括:HTTP协议、SMTP协议、FTP协议、DNS协议
1、HTTP
1.1 HTTP的基本概念和特点
基本概念:超文本传输协议,由两个程序组成:客户端程序和服务端程序,客户端与服务端通过交换HTTP报文进行会话,HTTP协议定义了这些报文的结构以及客户核对服务器进行报文交换的方式。客户端通过URL向服务器发送请求,服务器根据请求向客户端发送响应。HTTP使用TCP作为支撑传输协议,而不是UDP,TCP为HTTP提供可靠数据传输服务。
特点:
- 简单快速
- 客户向服务器请求服务时,只需传送请求方法和路径,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
- 灵活
- HTTP允许传输任意类型的数据对象
- 无连接
- 无连接的含义是限制每次连接至处理一个请求,服务器处理完客户的请求并收到客户的应答后就断开连接。采用这种方式可以节省传输时间
- 无状态
- HTTP协议是无状态协议,对于事务处理没有记忆能力,如果后续处理需要先前的信息,就必须重传,这样导致每次连接传送的数据量很大。但是如果服务器不需要先前信息,它的应答就会比较快。
- 支持客户服务器模式
1.2 HTTP与TCP的联系与区别
联系:HTTP建立在TCP基础上,当客户端需要从服务端获取网页数据时,首先发起一个HTTP请求,HTTP会通过TCP建立客户端到服务器的连接通道,当请求的数据传输完毕,会断开TCP连接。
区别:HTTP属于应用层协议,定义的是数据内容的规范;TCP属于运输层协议,定义的是数据传输和连接的规范。
1.3 HTTP 1.0与HTTP 1.1的区别
参考:mp.weixin.qq.com/s/GICbiyJpI… (包括2.0的区别)
- 缓存处理
- 1.1引入了更多的缓存控制策略
- 带宽优化及网络连接的使用
- 1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象都传输过来;而1.1在请求头引入了range头域,允许只请求资源的某个部分,方便了开发者自由的选择以便于充分利用带宽和连接。
- 错误通知的管理
- 1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除
- Host头处理
- 在1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。1.1的请求消息和响应消息都支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
- 长连接(持久连接)
- 1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在1.1中默认开启Connection: keep-alive,一定程度上弥补了1.0每次请求都要创建连接的缺点。
1.4 长连接与短连接
长连接概念
- 服务器在发送响应后会保持TCP连接打开,在相同的客户端和服务端之间,后续的请求和响应报文能够通过相同的连接进行传送。如果一个连接经过一段时间(可配置的超时间隔)仍未被使用,就会关闭该连接。 短连接概念
- 客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。 长连接优缺点
- 长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。
- Client与server之间的连接如果一直不关闭的话,随着客户端连接越来越多,server负载过大
- 长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,如数据库的连接用长连接 短连接优缺点:
- 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。
- 每次请求一个对象,客户和服务器都要分配TCP的缓冲区和保持TCP变量;每次请求一个对象都要经历两倍的RTT(往返时间)交付时延,一个RTT用于创建TCP,一个RTT用于请求和接收一个对象;如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
1.5 HTTP报文格式
两种报文:请求报文和响应报文
1.5.1 请求报文
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-afent: Mozilla/5.0
Accept-language: fr
1.5.2 响应报文
HTTP/1.1 200 OK
Connection: close
Date: Tue, 18 Aug 2015 15:44:04 GMT
Server:Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT
Content-Length; 6821
Content-Type: text/html
(data data data data data ...)
1.5.3 http的请求方法有哪些?
- GET: 请求指定的页面信息,使用GET方法时请求实体部分为空
- POST:向指定资源提交数据进行处理请求(如提交表单时),数据被包含在请求实体中。POST会导致新的资源的建立或已有资源的修改。
- HEAD:类似GET方法,当服务器收到HEAD请求时,会用一个HTTP报文进行响应,但不返回请求对象;常用于请求报头,进行调试跟踪。
- PUT:常与Web发行工具联合使用,允许用户上传对象到指定Web服务器上的指定路径
- DELETE:允许用户或应用程序删除Web服务器上的对象
1.5.4 GET和POST的区别?
- 作用:get一般用于请求服务器上的资源,所以get具有幂等性,多次请求同一个资源会得到相同数据。post请求多用于改变服务器上的资源,故不具有幂等性
- 位置:GET请求的数据会附在URL之后,不安全,Post的请求放在请求实体中,(不过POST请求的数据也可放在url后面)相对安全
- 大小限制:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。然而在实际开发中可能会存在限制:对于GET来说,由于浏览器和服务器对URL的限制,GET传输的数据会有限制,而POST通过实体传输数据,理论上没有限制
- 获取方式:服务器端使用不同的方法获得请求变量,GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值
1.5.5 常见状态码及分类
******常见状态码******
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
400 - 请求无效,该请求不能被服务器理解
403 - 禁止访问
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
505 - 服务器不支持请求报文使用的HTTP协议
******分类******
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
1.6 cookie和session
cookie:Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
session:session保存在服务器端。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
1.7 cookie和session的区别
- 数据存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。
- 安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
- 服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
- 数据大小:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
- 信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
二、运输层
1、一个运输层协议能够为调用它的应用程序提供哪些服务?
- 可靠数据传输
- 当一个运输层协议可以保证可靠数据传输是,发送进程只要将数据传递进套接字,就可以完全相信该数据可以无差错的到达接收进程。
- 吞吐量(发送进程能够向接收进程发送数据的速率)
- 运输层协议能够以某种特定的速率保证可用吞吐量不会低于某值。当然吞吐量越多越好,带宽敏感的应用具有特定的吞吐量,而弹性应用能够根据当前可用的带宽更改自己的吞吐量需求。
- 定时
- 安全性
- 运输层协议可以通过对数据加密解密来保证数据传输过程的安全性。
2、程序开发者对运输层的控制权限有哪些?
- 选择运输层协议
- 可能允许设定几个运输层参数(如最大缓存、最大报文段长度等)