目录
目录
1. OSI参考模型与TCP/IP参考模型2. TCP的三次握手2.1 传输控制协议TCP简介:
2.2 TCP报文头:
2.3 三次握手
3. TCP的四次挥手3.1 四次挥手的过程
3.2 为什么会有TIME_WAIT状态?
3.3 为什么需要四次挥手才能断开连接?
4. TCP和UDP的区别4.1 UDP特点
4.2 TCP和UDP区别:
5. HTTP详解5.1 协议简介
5.2 HTTP主要特点
5.3 请求/响应的步骤
5.4 在浏览器地址栏键入url,按下回车之后经历的流程
5.5 HTTP请求方式
5.6 Cookie和Session的区别
5.7 HTTP状态码分类和常用状态码
5.8 HTTP信息头
6. HTTP和HTTPS的区别6.1 HTTPS简介
6.2 HTTPS数据传输流程
6.3 HTTP和HTTPS的区别
计算机网络是互联网企业研发岗面试的基础,本人针对一些面试经验和网络上的资料对本部分内容进行了复习和简单的梳理,希望对大家有帮助。
1. OSI参考模型与TCP/IP参考模型
OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。
TCP/IP参考模型是计算机网络的祖父ARPANET和其后继的因特网使用的参考模型。
二者的对应关系、每层功能和协议族如下表所示:
说明:有时为了方便,也可以把TCP/IP模型中最下面两层称为网络接口层。
2. TCP的三次握手
2.1 传输控制协议TCP简介:
面向连接的、可靠的、基于字节流的传输层通信协议将应用层的数据流分割成报文段并发送给目标节点的TCP层数据包有序号,对方收到则发送ACK确认,未收到则重传使用校验和来检验数据在传输过程中是否有误2.2 TCP报文头:
TCP Flags:
URG:紧急指针标志
ACK:确认序号标志
PSH:push标志
RST:重置连接标志
SYN:同步序号,用户建立连接过程
FIN:finish标志,用于释放连接
2.3 三次握手
“握手”是为了建立连接,TCP三次握手的流程图:
第一次握手:建立连接时,客户端发送SYN包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端接收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
为什么要三次握手,两次不行吗?
如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。如果采用三次握手,服务端没有收到客户端的再次确认,就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
3. TCP的四次挥手
3.1 四次挥手的过程
“挥手”是为了终止连接,TCP四次挥手流程图:
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传输,Client进入FIN_WAIT_1;
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态;
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传输,Server进入LAST_ACK状态;
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
3.2 为什么会有TIME_WAIT状态?
确保有足够的时间让对方收到ACK包。如果服务端没有收到,到达等待时间会请求客户端重新发送,如果客户端在2MSL中没有收到消息,证明客户端已经收到了断开连接的确认信息,这时可以关闭客户端了。
3.3 为什么需要四次挥手才能断开连接?
因为全双工,发送方和接收方都需要FIN和ACK报文才会断开连接。为什么这么说呢?因为图中的第二次和第三次挥手不能合并成为ACK+FIN请求,为什么不能合并,因为此时 Client 和 Server 都可能有未完成的工作。比如对 Server 而言,可能还存在之前发给 Client 但是还没有收到 ACK 的请求。
4. TCP和UDP的区别
4.1 UDP特点
面向非连接不维护连接状态,支持同时向多个客户端传输相同的消息数据包报头只有8个字节,额外开销较小吞吐量只受限于数据生成速率、传输速率以及机器性能尽最大努力,不保证可靠交付,不需要维持复杂的连接状态表4.2 TCP和UDP区别:
5. HTTP详解
5.1 协议简介
HTTP(HyperText Transfer Protocol)超文本传输协议,是TCP/IP协议集中的一个应用层协议,用于定义浏览器和Web服务器之间交换数据的过程以及数据本身的格式。HTTP 1.0的会话方式:
这个过程是短暂的,始于浏览器发出请求,终于服务器返回结果,与浏览器窗口打开时间无关。
浏览器访问一个包含许多图像的网页的时候,需要多次请求和响应。HTTP 1.0的时候,每次请求和响应都会建立一个单独的连接,每次连接只传输一个文件,上一次和下一次请求完全分离,导致需要建立多次连接,建立连接是一个费时的过程,严重影响了客户机和服务器的性能。
HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个请求和响应,减少建立连接和关闭连接的消耗和延时。类似于Redis的Pipeline功能,建立一次连接,执行多条命令。如下图所示:
HTTP 1.1增加请求头来实现实现持续连接,例如Host、Connection
Connection:keep-alive:客户端通知服务器返回本次请求结果后保持连接Connection:close:客户端通知服务器返回本次请求结果后关闭连接5.2 HTTP主要特点
支持客户机/服务器模式简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。5.3 请求/响应的步骤
客户端连接web服务器发送HTTP请求服务器接受请求并返回HTTP响应释放连接TCP连接客户端浏览器解析HTML内容5.4 在浏览器地址栏键入url,按下回车之后经历的流程
DNS解析浏览器缓存-系统缓存-路由器缓存IPSTCP连接(三次握手)发送HTTP请求服务器处理请求返回HTTP报文浏览器解析渲染页面连接结束5.5 HTTP请求方式
GET方式:当使用GET方式提交表单内容的时候,浏览器将各个表单自断元素及其数据按照URL参数的格式附加在请求行中的资源路径后面。使用GET方式传送的数据量是有限制的,一般限制在1KB一下。表单提交的时候默认是GET方式。
POST方式:当使用POST方式提交表单的时候,浏览器将各表单元素及其数据作为HTTP消息的实体内容发送给Web服务器,而不是作为URL地址的参数传递。因此,使用POST方式传送的数据量要比使用GET方式传送的数据量大得多。使用POST方式传递数据时,必须设置Content-Type消息头和Content-length消息头。
5.6 Cookie和Session的区别
Cookie是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端;客户端再次请求的时候,会把Cookie回发;服务器收到后,会解析Cookie生成与客户端相对应的内容
Session是服务器端的机制,在服务器上保存信息;解析客户端请求并操作session id,按需保存状态信息;
Session的实现方式:使用Cookie来实现;使用url会写来实现
Cookie数据存放在客户的浏览器上,Session数据放在服务器上Session相对于Cookie更安全若考虑减轻服务器负担,应当使用Cookie5.7 HTTP状态码分类和常用状态码
HTTP状态码分类:
常见HTTP响应状态码:
请求收到,继续处理: 100客户端必须继续发出请求 101客户端要求服务器根据请求转换HTTP协议版本 操作成功收到,分析,接受: 200交易成功 201提示知道新文件的URL 202接受和处理、但处理未完成 203返回信息不确定或不完整 204请求收到,但返回信息为空 205服务器完成了请求,用户代理必须复位当前已经浏览过的文件 206服务器已经完成了部分用户的GET请求 重定向: 300请求的资源可在多处得到 301永久重定向,在Location响应首部的值仍为当前URL(隐式重定向) 302临时重定向,在Location响应首部的值仍为新的URL(显示重定向) 303建议客户端访问其他URL或访问方式 304Not Modified 请求的资源没有改变 可以继续使用缓存 305请求的资源必须从服务器指定的地址得到 306前一版本HTTP中使用的代码,现行版本中不再使用 307声明请求的资源临时性删除 客户端错误: 400错误请求,如语法错误 401未授权 HTTP 401.1未授权,登录失败 HTTP 401.2未授权,服务器配置问题导致登录失败 HTTP 401.3ACL禁止访问资源 HTTP 401.4未授权授权被筛选器拒绝 HTTP 401.5未授权ISAPI或CGI授权失败 402保留有效ChargeTo头响应 403禁止访问 HTTP 403.1禁止访问禁止可执行访问 HTTP 403.2禁止访问禁止读访问 HTTP 403.3禁止访问禁止写访问 HTTP 403.4禁止访问要求SSL HTTP 403.5禁止访问要求SSL 128 HTTP 403.6禁止访问IP地址被拒绝 HTTP 403.7禁止访问要求客户端证书 HTTP 403.8禁止访问禁止站点访问 HTTP 403.9禁止访问连接的用户过多 HTTP 403.10 禁止访问配置无效 HTTP 403.11 禁止访问密码更改 HTTP 403.12 禁止访问映射器拒绝访问 HTTP 403.13 禁止访问客户端证书已被吊销 HTTP 403.15 禁止访问客户端访问许可过多 HTTP 403.16 禁止访问客户端证书不可信或者无效 HTTP 403.17 禁止访问客户端证书已经到期或者尚未生效 404 没有发现文件、查询或URL 405 用户在Request-Line字段定义的方法不允许 406 根据用户发送的Accept拖,请求资源不可访问 407 类似401,用户必须首先在代理服务器上得到授权 408 客户端没有在用户指定的饿时间内完成请求 409 对当前资源状态,请求不能完成 410 服务器上不再有此资源且无进一步的参考地址 411 服务器拒绝用户定义的Content-Length属性请求 412 一个或多个请求头字段在当前请求中错误 413 请求的资源大于服务器允许的大小 414 请求的资源URL长于服务器允许的长度 415 请求资源不支持请求项目格式 416 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值, 请求也不包含If-Range请求头字段 417 服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长 服务器端错误: 500 - 内部服务器错误 HTTP 500.100 - 内部服务器错误 HTTP 500-11 服务器关闭 HTTP 500-12 应用程序重新启动 HTTP 500-13 - 服务器太忙 HTTP 500-14 - 应用程序无效 HTTP 500-15 - 不允许请求 501 - 未实现 502 - 网关错误 503 - 服务不可用 504 - 网关超时5.8 HTTP信息头
通用信息头:
Cache-Control:①位于请求头,用于通知位于客户机和服务器之间的代理服务器如何使用已缓存的页面(no-cache、no-store、max-age、max-stale、no-transform、only-if-cached……);②位于响应头,用于通知客户端和代理服务器如何缓存该页面(public、private、no-chche、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage……)Connection:用于指定处理完本次请求/响应之后,客户端和服务器之间是否还要继续保持连接(Keep-Alive、close)Date:用于表示HTTP消息产生的当前时间,必须是GMT格式。 例如:date:Fri, 03 Aug 2018 09:35:08 GMTPragma:设置值只能固定为no-cacheTrailer:对于放置在尾部的头字段,需要使用Trailer字段说明。例如:Trailer:DateTransfer-Encoding:目前的标准设置值只有chunkedUpgrade:允许客户机指定他所支持并希望将当前协议切换到的通信协议Via:用于指定HTTP消息所途径的中介代理服务器名称和所使用的协议,这个头字段由代理服务器产生,每个代理服务器必须把它的信息追加到Via字段的最后,以反映HTTP消息途径的多个代理服务器的顺序Warning:用于说明其他头字段和状态吗不能说明的一些附加警告信息,例如,返回的实体内容可能已经过时。请求头:
Accept:用于指出客户端程序(通常是浏览器)能够处理的MIME(Multipurpose Internet Mail Extension,多用途Internet邮件扩展)类型Accept-Charset:用于指出客户端程序可以使用的字符集Accept-Encoding:用于指定客户机能够解码的数据编码方式,通常是指某种压缩方式Accept-Language:用于指定客户机期望服务器返回那个国家语言的文档,可以指定多个,以逗号隔开。例如:Accept:image/webp,image/apng,image/*,*/*;q=0.8 Accept-Encoding:gzip, deflate Accept-Language:zh-CN,zh;q=0.9 Connection:keep-aliveAuthorization:当客户端访问受口令保护的网页文件时,web服务器要求客户机使用Authorization请求头来应答。Expect:用于指定客户机请求服务器采取的特殊行动Form:用于指定请求发送者的Email地址Host:用于指定资源所在的主机名和端口号,格式与资源的完整URL中的主机名和端口号部分一样,如果端口号等于连接服务器时所使用的端口号,则可以省略。Host:analytics.163.comUser-Agent:用于指定浏览器或者其他客户端程序的类型和名称,以便服务器针对不同类型的浏览器返回不同的内容User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36Referer:浏览器向服务器发出的请求,可能是直接在浏览器地址栏中输入URL而发出,也可以是单击另一个网页上面的超链接而发出的。对于第二种情况,浏览器使用Referer头字段指定发出请求的超链接源的URL。对于第一种情况,浏览器不应发送Referer请求头。Referer:?wemediaId=W If-Modified-Since:Wed, 24 May 2017 14:07:32 Asia/Shanghai If-None-Match:5b54f9bd1d3396a5bc687a18ce响应头:
HTTP/1.1 200 OK Server: nginx Date: Sun, 05 Aug 2018 01:43:41 GMT Content-Type: image/gif Content-Length: 43 Connection: keep-alive Cache-Control: must-revalidate, no-cache, private Pragma: no-cache Last-Modified: Sat, 1 Jan 2000 00:00:00 GMT Expires: Sat, 1 Jan 2000 00:00:00 GMT X-Server-ID: S170 Accept-Ranges:bytes Access-Control-Allow-Credentials:false Access-Control-Allow-Methods:GET Access-Control-Allow-Origin:* Age:1 Cache-Control:max-age= cdn-ip:116.242.0.33 cdn-source:chinanetcenter cdn-user-ip:14.131.25.108 Connection:keep-alive Content-Encoding:gzip Content-Type:application/font-woff Date:Sun, 05 Aug 2018 01:35:06 GMT Expires:Fri, 24 Aug 2018 11:17:12 GMT Last-Modified:Mon, 19 Jan 2015 06:08:45 GMT Transfer-Encoding:chunked Vary:Accept-Encoding X-Via:1.1 shuangxian186:1 (Cdn Cache Server V2.0), 1.1 hangkuan193:6 (Cdn Cache Server V2.0), 1.1 hkuan33:1 (Cdn Cache Server V2.0) X_cache:HIT from bjzw-img-proxy3Server:用于指定服务器软件的产品名称
Content-Type:用于告诉浏览器多接受的数据是那种格式的数据
Expires:用于指定当前文档应该在什么时候被认为过期,浏览器到那个时候以后不能再继续使用本地的缓存,而是在有需要的时候向服务器发出新的访问请求
6. HTTP和HTTPS的区别
6.1 HTTPS简介
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
SSL(Security Socket Layer,安全套阶层)
为网络通信提供安全及数据完整性的一种安全协议是操作系统对外的API,SSL3.0后更名为TLS采用身份验证和数据加密保证网络通信的安全和数据的安全性加密的方式
对称加密:加密和解密都使用同一个秘钥
非对称加密:加密使用的秘钥和解密使用的秘钥是不相同的
哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆
数字签名:证明某个消息或者文件时从某人发出/认同的
6.2 HTTPS数据传输流程
浏览器键支持的加密算法信息发送给服务器服务器选择一套浏览器支持的算法加密,以证书的形式回发浏览器浏览器验证证书的合法性,并结合证书公钥加密信息发送给服务器服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器浏览器解密响应信息,并对消息进行验真,之后进行加密交互数据6.3 HTTP和HTTPS的区别
HTTPS需要到CA申请证书,HTTP不需要HTTPS密文传输,HTTP明文传输连接方式不同,HTTPS默认使用443端口,HTTP使用80端口HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全作者:码上暴富原文链接:https://www.cnblogs.com/sgh1023/p/10507526.html