参考
易于实现和标准化,各层独立,就可以把大问题分割成多个小问题,利于实现;灵活性好:如果某一层发生变化,只要接口不变,不会影响其他层;分层后,用户只关心用到的应用层,其他层用户可以复用;各层之间相互独立:高层不需要知道底层的功能是采取硬件来实现的,只需要知道通过底层的接口来获得所需要的服务。OSI七层模型是理论模型,一般用于理论研究,他的分层有些冗余,实际应用,选择TCP/IP的四层模型
DNS 协议运行在 UDP 协议之上,使用端口号 53。 ① 浏览器先检查自身缓存中有没有被解析过这个域名对应的 ip 地址; ② 如果浏览器缓存没有命中,浏览器会检查操作系统缓存中有没有对应的已解析过的结果。在 windows 中可通过 c 盘里 hosts 文件来设置; ③ 还没命中,请求本地域名服务器来解析这个域名,一般都会在本地域名服务器找到; ④ 本地域名服务器没有命中,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,则去根域名服务器请求解析; ⑤ 根域名服务器返回给本地域名服务器一个所查询域的主域名服务器; ⑥ 本地域名服务器向主域名服务器发送请求; ⑦ 接受请求的主域名服务器查找并返回这个域名对应的域名服务器的地址; ⑧ 域名服务器根据映射关系找到 ip 地址,返回给本地域名服务器; ⑨ 本地域名服务器缓存这个结果; ⑩ 本地域名服务器将该结果返回给用户;
如果本地域名服务器用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环
参考、参考
用nslookup来判断是否真的是DNS解析故障更换本地域名服务器地址 114.114.114.114是国内移动、电信和联通通用的DNS,解析成功率相对来说更高,国内用户使用的比较多,速度相对快、稳定,是国内用户上网常用的DNS。 8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用。 目前国内有不少的免费、安全而且无毒的DNS,常见的如百度提供的180.76.76.76、阿里提供的223.5.5.5和223.6.6.6清除DNS缓存信息 ipconfig/flushdnsDNS占用53号端口,同时使用TCP和UDP协议。DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。参考
DNS区域传输的时候使用TCP协议:
1.辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。
2.TCP是一种可靠连接,保证了数据的准确性。
域名解析时使用UDP协议:
1.客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。
2.不用经过三次握手,这样DNS服务器负载更低,响应更快。
3.理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
(1)HTTP请求报文由3部分组成(请求行+请求头+请求体):
请求行: ①是请求方法,PUT、DELETE、 POST、GET、HEAD、OPTIONS、TRACE。 ②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。 ③是协议名称及版本号。(2)HTTP的响应报文也由三部分组成(响应行+响应头+响应体)
响应行: ①报文协议及版本; ②状态码及状态描述;响应头: ③响应报文头,也是由多个属性组成;响应体: ④响应报文体,即我们真正要的“干货”200 – 请求成功 301 – 资源(网页等)被永久转移到其它URL 400 – 客户端请求的语法错误,服务器无法理解 404 – 请求的资源(网页等)不存在 500 – 内部服务器错误 502Bad Gateway充当网关或代理的服务器,从远端服务器接收到了一个无效的请求 504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
GET 和 POST 本质上就是 TCP 链接,并无差别。但是由于 HTTP 的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同;(HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。)
HTTP规定,当执行GET请求的时候,把传送的数据放在url中,以方便记录。如果是POST请求,数据放在请求体里。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略。区别
(0)get产生一个TCP 数据包,post 产生两个 TCP 数据包;
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 !并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。(1)安全性:Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。 (2) 传送数据量:Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
url长度根据浏览器及服务器的不同而有不同限制。 若要支持IE的话,最大的长度为2083字符。(3)对数据类型的限制:Get只接受ASCII字符;而Post没有限制。 (4)执行效率:Get执行效率却比Post方法好。Get是form提交的默认方法。 (5)历史:Get 参数保留在浏览器历史中,而 post 参数不会保留在浏览器历史中;
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。参考
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。 (2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送给客户端。 (3)客户端对服务器的证书进行验证,并抽取服务器的公钥。 (4)客户端建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。 (5)Web服务器利用自己的私钥解密出会话密钥。 (6)Web服务器利用会话密钥加密与客户端之间的通信。