客户端是服务的请求放,服务器是服务的提供方。面试
不用区分谁是客户端,谁是服务器,双方都可以向对方请求与提供服务。数据库
每一个分组由首部和尾部组成,包含源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互不影响,所以在同一条传输线路上容许同时传输多个分组,即分组交换不会占用传输线路。浏览器
电路交换用于电话通信系统,两个用户之间创建通讯前须要有一条专用的物理链路,并且在通讯过程当中始终占用该链路。因为通讯过程当中不可能一直在使用传输线路,所以电路交换对线路利用率很低,一般不到 10%.缓存
分组在路由器的输入和输出队列中排队等待所需时间,取决于当前网络的通讯量;安全
主机或路由器接收到分组时进行处理所需时间,通常这些处理包括分析首部、从分组中提取数据、进行差错校验或查找适当路由等;服务器
主机或路由器传输数据帧所需时间:cookie
$$delay = length(bit)/v(bit/s)$$网络
其中 length
表示数据帧的长度,v
表示传输速率;session
电磁波在信道中传输所需时间,电磁波传播速度无限接近于光速:架构
$$delay = length(m)/v(m/s)$$
其中 length
表示信道的长度,v
表示电磁波在信道中的传播速度;
体系结构 | 协议 |
---|---|
物理层 | RJ4五、CLOCK、IEEE802.3(中继器、集线器) |
数据链路 | PPP、FR、HDLC、VLAN、MAC(网桥、交换机) |
网络层 | IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) |
传输层 | TCP(HTTP/S、FTP、POP三、SMTP、TENET、SSH)、UDP(BOOTP、NTP、DHCP)、SPX |
会话层 | NFS、SQL、NETBIOS、RPC |
表示层 | JPEG、MPEG、ASII |
应用层 | FTP、DNS、Telenet、SMTP、HTTP、WWW、NFS |
为把在一个网络结构下开发的系统与在另外一个网络结构下开发的系统互联起来,以实现更高一级的应用,使异种机之间的通讯成为可能,便于网络结构标准化,国际标准化组织(ISO)于1984年造成了开放系统互连参考模型OSI/RM(Open Systems Interconnection Reference Model,简称OSI)的正式文件。
咱们平常网络中使用的体系结构,总共能够分为 5 层,分别是:
不严格遵循 OSI 分层概念,只有四层,至关于将五层协议中的数据链路层和物理层合并为网络结构层。
物理层上传送的数据单位是比特,其做用是实现相邻计算机节点间比特流的透明传送,尽量屏蔽调具体传输介质和屋里设备的差别。根据信息在传输线上的传输方向,能够分为以下三种通讯方式:
两台主机之间的数据传输,老是在一段一段的链路上进行传送的,此时就须要使用专门的链路层协议。在两个相邻节点间传输数据时,数据链路层将网络层交下来的 IP 数据包组装成帧,在两个相邻节点间的链路上传送帧,每帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
互联网的核心,向上提供数据报服务,经过 IP 协议将异构的物理网络链接起来。其任务是选择合适的网间路由和交换节点,从而确保计算机通讯的数据及时传送,配套使用的有以下三个协议:
传输层提供了进程间的逻辑通讯,负责向两台主机进程之间的通讯提供通用的 数据传输服务,向高层用户屏蔽网络层的核心细节,这一层中主要涉及 UDP 和 TCP 两个协议。
应用层的任务是经过应用进程之间的交互来完成特定网络应用,应用层协议定义的是应用进程间的通讯和交互的规则。
对于不一样的网络应用须要不一样的应用层协议,常见的有 DNS、HTTP、SMTP 协议等;
URI = URL + URN
URL:统一资源 定位 符,标示一个具体的资源位置
URN:统一资源名称
主要由如下三部分构成:
Request Header
主要由如下三部分构成:
方法 | 说明 |
---|---|
GET |
请求指定页面信息,并返回实体主体 |
POST |
传输实体主体,向指定资源提交数据进行处理请求,数据被包含在请求体中,可能会致使新资源的创建和/或已有资源的修改 |
PUT |
从客户端向服务器传送的数据取代指定文档的内容,上传文件 ,不带验证机制,存在安全性问题 |
DELETE |
请求服务器删除指定页面,通常是删除文件 |
HEAD |
获取报文首部,相似于 GET ,但不返回报文实体主体部分,主要用于确认 URL 的有效性以及资源更新时间等 |
PATCH |
对资源进行部分修改 |
OPTIONS |
查询支持的方法,查询指定的 URL 能支持的方法,返回 Allow: GET,POST,HEAD,OPTIONS 等内容 |
CONNECT |
要求在于代理服务器通讯时创建隧道,使用 SSL 和 TLS 协议将通讯内容加密后经网络隧道传输 |
TRACE |
追踪路径,服务器将通讯路径返回给客户端 |
服务器返回的响应报文中的第一行是状态行,包含状态码以及缘由短语,用于告知客户端请求的结果,主要分为以下类型,常见的状态码以下:
状态码 | 状态 | 说明 |
---|---|---|
100 | Continue |
到目前为止很正常,客户端能继续发送请求或忽略该响应 |
200 | OK |
表示请求成功 |
204 | No Content |
请求已经成功处理,但返回的响应报文不含实体的主体部分,通常只须要从客户端向服务器发送信息,而无需返回数据时使用 |
206 | Partial Content |
表示客户端进行范围请求,响应报文包含由 Content-Range 指定范围的实体内容 |
301 | Moved Permanently |
永久性重定向 |
302 | Found |
临时性重定向 |
303 | See Other |
和 302 功能相同,但 303 明确要求客户端应该采用 GET 方法获取资源 |
304 | Not Modified |
若请求报文首部包含一些条件,如 If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since ,若不知足条件,则服务器返回 304 |
307 | Temporary Redirect |
临时重定向,相似于 302,但 307 要求浏览器不会把重定向请求的 POST 方法改为 GET 方法 |
400 | Bad Request |
请求报文中存在语法错误 |
401 | Unauthorized |
该状态码表示发送的请求须要有认证信息 |
403 | Forbidden |
请求被拒绝 |
404 | Not Found |
请求的页面不存在 |
500 | Internal Server Error |
服务器正在执行请求时发生错误 |
503 | Service Unavailable |
服务器暂时处于超负载或正进行停机维护,如今没法处理请求 |
有 4 中类型的首部字段:
GET
用于获取资源,通常是查询,而 POST
用于传输实体主体,通常是提交;
GET
和 POST
的请求都能使用额外参数,但 GET
的参数以查询字符串出如今 URL 中,不会对服务器中的内容产生做用,但 POST
的参数存储在实体主体中。可是 POST
的安全性也不能说很高,咱们仍然能够用抓包工具来进行查看。另外一方面,URL 只支持 ASCII,所以 GET 的参数中如有中文等字符时须要先进行编码,可是 POST 的参数支持标准字符集;
GET 方法是安全的,由于它不会改变服务器的状态。可是 POST 非安全,由于 POST 的目的是传送实体主体内容,内容多是用户上传的表单数据,一旦上传成功,服务器就可能把该数据存入数据库,此时状态也就发生了改变。
安全的方法:GET、HEAD、OPTIONS
;
不安全的方法:POST、PUT、DELETE
;
幂等的 HTTP 方法,一样的请求被执行一次和被连续执行屡次的效果是同样的,服务器的状态也同样,即幂等的方法不具备反作用,所以全部安全的方法也都是幂等的。
通常来讲,GET、HEAD、PUT、DELETE
等方法都是幂等的,但 POST
不是。
若要对响应进行缓存,则应该知足一下条件:
GET、HEAD
,可是 PUT、DELETE
不可缓存,POST
在大多数状况下是不可缓存的;Cache-Control
首部字段未指定则不进行缓存;HTTP(Hyper Text Transfer Protocol),超文本传输协议,它是从 Web 服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。
HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法;
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),以安全为目标的 HTTP 通道,通俗来说就是 HTTP 的安全版,加入了 SSL/TLS 层,经过 SSL 证书来验证服务器的身份,并为浏览器和服务器之间的通讯进行加密。HTTPS 的安全基础是 SSL,其主要做用有以下两种:
GET、POST、HEAD
;Content - Type
来标记;HTTP 是 基于 TCP/IP 通讯协议来传递数据的协议,传输的数据类型有 HTML 文件、图片文件、查询结果等。此外,HTTP 协议通常用于 B/S
架构,浏览器做为 HTTP 客户端经过 URL 向 HTTP 服务器即 Web 服务器发送全部请求;
如上图,使用 HTTPS 传输数据的流程以下:
HTTP 协议传输的数据都是未经加密的,即明文的,所以使用 HTTP 协议传输隐私信息不安全。为了保证隐私数据可以加密传输,因而使用 SSL 协议用于对 HTTP 协议传输的数据进行加密,即 HTTPS;
HTTPS 协议是 HTTP + SSL 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 更加安全,二者的区别主要有:
80
端口,而 HTTPS 默认使用 443
端口;区别 | HTTP | HTTPS |
---|---|---|
协议 | 基于 TCP,明文传输,客户端与服务器端均没法验证对方身份 | HTTP + SSL,运行于 TCP 之上,添加了加密和认证机制的 HTTP |
端口 | 80 | 443 |
资源消耗 | 较少 | 因为加解密操做,将消耗更多的 CPU 和内存资源 |
开销 | 无需证书 | 须要证书,通常是向认证机构购买 |
加密机制 | 无 | 共享秘钥加密和公开秘钥加密并用的混合加密机制 |
安全性 | 弱 | 强 |
TCP(传输控制协议,Transmission Control Protocol)是面向链接的,提供可靠交付,有流量控制,拥塞控制,提供 全双工通讯,面向字节流 (将应用层传下来的报文当作字节流,将字节流组织为大小不等的数据块),每条 TCP 链接只能是 点对点(一对一),总结起来有以下特色:
UDP(用户数据表协议,User Datagram Protocol)是面向无链接的,尽最大可能交付,无拥塞控制,面向报文(对应用层中传下来的报文不合并也不拆分,只添加 UDP 首部),支持 一对1、一对多、多对一和对多点的交互通讯,总结起来有以下特色:
TCP | UDP | |
---|---|---|
是否链接 | 面向链接 | 无链接 |
是否可靠 | 可靠传输,使用流量控制和拥塞控制 | 不可靠传输,不使用流量控制和拥塞控制 |
链接对象个数 | 只能一对一 | 支持一对1、一对多、多对一和多对多 |
传输方式 | 面向字节流 | 面向报文 |
首部开销 | 首部最小 20 字节,最大 60 字节 | 首部开销小,仅 8 字节 |
场景 | 传输可靠,好比文件传输等 | 实时应用,好比视频会议、直播等 |
SYN-SENT
状态;SYN-RECEIVED
状态;ESTABLISHED
状态,服务端收到该应答后也进入 ESTABLISHED
状态,此时链接就创建成功了。CLOST_WAIT
状态,此时代表 A 到 B 的链接已经释放,再也不接收 A 发的数据。可是 TCP 是双向通讯的,因此 B 此时仍能够向 A 发送数据;LAST-ACK
状态;TIME-WAIT
状态并持续一段时间(通常是 2MSL),若在该时间段内没有来自 B 的重发请求,就进入 CLOSED
状态。当 B 收到确认应答后,也进入 CLOSE
状态。cookie
是由 Web 服务器保存在用户浏览器上的小文件(key-value
格式),包含用户相关信息。客户端向服务器发起请求,若服务器须要记录该用户状态,则使用 response
向客户端浏览器颁发一个 cookie
。客户端浏览器将 cookie
保存起来,当浏览器再请求该网站时,浏览器将请求的网址连同该 cookie
一块儿提交给服务器,服务器检查该 cookie
,以此来确认用户身份。
session
依赖于 cookie
实现,session
是服务端对象。session
浏览器和服务器会话过程当中,服务器分配的一块存储空间。服务器默认为浏览器在 cookie
中设置 sessionid
,浏览器在向服务器请求过程当中传输 cookie
包含 sessionid
,服务器将根据 sessionid
获取出会话中存储的信息,而后确认会话的身份信息。
cookie
所保存的数据不能超过 4k,许多浏览器都会限制一个站点最多能保存的 cookie
数(通常是 20),可是 session
没有该限制;session
必定时间保存在服务器上,当访问增多时,占用服务器性能,考虑到服务器性能方面,应当使用 cookie
;cookie
数据放在客户端,安全性较差,session
数据放在服务器上,安全性相对较高;由于考虑到链接时丢包的问题,若是是 2 次,那么第二次握手时若是服务器响应给客户端的确认报文段丢失,但此时服务器端已经准备好接收数据,而客户端一直没收到服务端的确认报文,客户端就不清楚服务端是否已经准备好了。这样一来,客户端既不会向服务端发送数据,也会忽略服务端所发送过来的数据。
一样是出于考虑丢包问题,若第四次挥手的报文丢失,服务器未确认 Ack 报文就会重发第三次挥手的报文,若报文一来一去的最常时间就是 2 MSL,因此须要等这么长时间来确认服务端确实已经收到。