本文鉴于个人搜集资料文章总结所得,若有错误请尽快联系我!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ClwAUQh-1590151948375)(https://github.com/CyC2018/Interview-Notebook/raw/master/pics/1005dc9d-9049-4b06-9524-6171e56ebd8c.png)]
为特定应用程序提供数据传输服务,例如 HTTP、DNS 等。数据单位为报文。
提供的是进程间的通用数据传输服务。由于应用层协议很多,定义通用的运输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
为主机之间提供服务,而不是像运输层协议那样是为主机中的进程提供服务。网络层把运输层传递下来的报文段或者用户数据报封装成分组来进行传输。
网络层针对的还是主机之间,而主机之间可以有很多链路,链路层协议就是为相邻结点之间提供服务。数据链路层把网络层传来的分组封装成帧。
考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使物理层上的数据链路层感觉不到这些差异。
用于报文交换网络的一种面向数据的协议,是TCP/IP协议中网络层的主要协议;
主要根据源主机和目的主机的地址传送数据;有IPv4和IPv6;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9NBZQEe-1590151948377)(https://github.com/CyC2018/Interview-Notebook/raw/master/pics/163cf8b4-5f30-46c9-af00-316a71b3c890.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LVlVfU0u-1590151948379)(https://github.com/CyC2018/Interview-Notebook/raw/master/pics/8681db55-0873-434b-aa98-83d07e8392ae.jpg)]
版本 : 有 4(IPv4)和 6(IPv6)两个值;
首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选部分的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
区分服务 : 用来获得更好的服务,一般情况下不使用。
总长度 : 包括首部长度和数据部分长度。
标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbalX1am-1590151948380)(https://github.com/CyC2018/Interview-Notebook/raw/master/pics/45c86855-9b18-4cf4-a9a7-f8b6eb78d133.png)]
生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
把IP地址映射位物理地址;反之为RARP;
32位地址,1表示网络位,0表示主机位;指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识是主机的位掩码,必须和IP地址结合使用;
作用:将某个Ip地址分成网络地址和主机地址;
TCP/IP是一类协议系统,用于网络通信的一套协议集合;
现在的 TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。
运输层: 运输层提供了应用进程间的逻辑通信。运输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看见的好像在两个运输层实体之间有一条端到端的逻辑通信信道。
TCP: 是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块)
意义:应用层之间需要可靠的像管道一样的连接,网络层不提供,只提供不可靠的包交换,因此需要运输层的协调;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPVfiipE-1590151948381)(https://github.com/CyC2018/Interview-Notebook/raw/master/pics/21a00b02-c0a6-4bcd-9af0-5ec6bb66e34c.jpg)]
seq序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
ack确认号 :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。
窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
seq数据包本身序列号;ack期望继续发送数据包序列号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d62KyWVK-1590151948382)(https://github.com/CyC2018/Interview-Notebook/raw/master/pics/086871db-5871-460f-97b7-126cd738bb0e.jpg)]
TIME_WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间。这么做有两个理由:
确保最后一个确认报文段能够到达。如果 B 没收到 A 发送来的确认报文段,那么就会重新发送连接释放请求报文段,A 等待一段时间就是为了处理这种情况的发生。
可能存在“已失效的连接请求报文段”,为了防止这种报文段出现在本次连接之外,需要等待一段时间。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6sfykgQ7-1590151948383)(https://github.com/CyC2018/Interview-Notebook/raw/66d63de8b875ff9be79763fb9bbed93f183403cb/pics/223fc26e-2fd6-484c-bcb7-443cac134f15.jpg)]
窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。
所以需要设置一个慢开始门限ssthresh状态变量:
当cwnd < ssthresh, 使用慢启动算法
当cwnd > ssthresh, 使用拥塞避免算法, 停用慢启动算法
开始发送方先设置cwnd(拥塞窗口)=1, 发送第一个报文段M1, 接收到接收方的确认后, 把cwnd 加倍(2), 接着一直重复下去
为了防止cwnd增加过快而导致网络拥塞, 每经过一个RTT事件就把发送方的cwnd+1, 这里不是加倍;
当发送方判断网络出现拥塞(没收到确认), 就把门限ssthresh设置为出现拥塞时的拥塞窗口值的一半(除以2), 再把cwnd设为1, 重新开始慢启动算法(目的是较少发送到网络种的分组数, 使得积压的分组被处理完毕)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDtCnlzQ-1590151948384)(http://p2e1umi3v.bkt.clouddn.com/18-3-9/81168366.jpg)]
接收方每次接受到报文段都会对已收到的有序报文段确认, 例如已经接收到M1,M2,此时收到M4, 应当发送对M2的确认
发送方如果收到三个重复的确认, 那么可以确认下一个报文段丢失, 例如收到三个M2, 那么M3丢失, 此时启动快重传
只是丢失个别报文段的这种情况下, 一般不会网络拥塞, 所以执行快恢复, 设ssthresh = cwnd/2 ,cwnd =ssthresh, 并且启动拥塞避免;
是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部)。
不提供对IP协议的可靠机制、流控制以及错误恢复功能,在数据传输之前不需要建立连接。
较简单,比TCP负载消耗少;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RNf9VgBr-1590151948384)(https://github.com/CyC2018/Interview-Notebook/raw/master/pics/bd6c05f3-02ee-4c8a-b374-40c87154a898.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8QUGhrBf-1590151948385)(http://p2e1umi3v.bkt.clouddn.com/18-3-9/50470979.jpg)]
Hyper Text Transfer Protocal超文本传输协议;用于万维网服务器传输超文本到本地浏览器的传输协议;基于TCP/IP的应用层协议
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SZo0mHLi-1590151948385)(http://p2e1umi3v.bkt.clouddn.com/18-3-9/67661190.jpg)]来源: 菜鸟教程
HTTPS以安全为目标的HTTP通道,在HTTP加入SSL层,HTTPS的安全基础就是SSL(Secure Sockets Layer),加密的详细内容需要SSL;
两种方式确保安全:建立信息安全通道;确认网站的真实性;
客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后传给服务器。
服务器用私钥解密“对称密码”(此处的公钥和私钥是相互关联的,公钥加密的数据只能用私钥解密,私钥只在服务器端保留。然后用其作为服务器和客户端的“通话密码”加解密通讯。同时在SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑤中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑤中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
Http协议是无状态的, 而Http/1.1引入了Cookie来保存状态信息;
有两种缓存方法:让代理服务器进行缓存和让客户端浏览器进行缓存。
Cache-Control 用于控制缓存的行为。Cache-Control: no-cache 有两种含义,如果是客户端向缓存服务器发送的请求报文中含有该指令,表示客户端不想要缓存的资源;如果是源服务器向缓存服务器发送的响应报文中含有该指令,表示缓存服务器不能对资源进行缓存。
Expires 字段可以用于告知缓存服务器该资源什么时候会过期。当首部字段 Cache-Control 有指定 max-age 指令时,比起首部字段 Expires,会优先处理 max-age 指令。
HTTP 0.9是第一个版本的HTTP协议,已过时。它的组成极其简单,只允许客户端发送GET这一种请求,且不支持请求头。由于没有协议头,造成了HTTP 0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片。
HTTP 0.9具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。由此可见,HTTP协议的无状态特点在其第一个版本0.9中已经成型。一次HTTP 0.9的传输首先要建立一个由客户端到Web服务器的TCP连接,由客户端发起一个请求,然后由Web服务器返回页面内容,然后连接会关闭。如果请求的页面不存在,也不会返回任何错误码。
关键的性能优化: keepalive连接,chunked编码传输,字节范围请求,请求流水线等
HTTP 2.0是下一代HTTP协议,目前应用还非常少。主要特点有:
多路复用(二进制分帧)
不会改动HTTP 的语义,HTTP 方法、状态码、URI 及首部字段,等等这些核心概念上一如往常,却能致力于突破上一代标准的性能限制,改进传输性能,实现低延迟和高吞吐量。而之所以叫2.0,是在于新增的二进制分帧层。在二进制分帧层上, HTTP 2.0 会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码 ,其中HTTP1.x的首部信息会被封装到Headers帧,而我们的request body则封装到Data帧里面。
头部压缩[ 像来自同一个网页的图像,将会有大量的请求看上去几乎同样的,这就需要压缩技术对付这种几乎相同的信息。]
随时复位
服务器端推流: Server Push
优先权和依赖