计算机网络是互联网企业研发岗面试的基础,本人针对一些面试经验和网络上的资料对本部份内容进行了复习和简单的梳理,但愿对你们有帮助。nginx
OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通讯系统间互联的标准体系,通常称为OSI参考模型或七层模型。web
TCP/IP参考模型是计算机网络的祖父ARPANET和其后继的因特网使用的参考模型。面试
两者的对应关系、每层功能和协议族以下表所示:算法
OSI七层模型
|
TCP/IP模型
|
功能
|
TCP/IP协议族
|
应用层
|
应用层
|
直接向用户提供服务,完成用户但愿完成的各类网络操做
|
HTTP,FTP,TFTP,DNS,Telnet,SMTP
|
表示层
|
进行数据编解码,数据加解密和格式转换
|
没有协议
|
|
会话层 |
解除或创建与别的节点的联系,组织和协调两个会话进程之间的通讯,并对数据交换进行管理
|
没有协议
|
|
传输层
|
传输层
|
向两台主机中进程之间的通讯提供通用的数据传输服务,实现端到端链接
|
TCP,UDP
|
网络层
|
网络层
|
为分组交换网上的不一样主机提供通讯服务,也就是进行IP选址和路由选择
|
IP,ICMP,RIP,IGMP
|
数据链路层
|
数据链路层
|
在物理层提供的比特流基础上,经过差错控制、流量控制的方法,将由差错的物理线路变为无差错的、能可靠传输数据帧的数据链路
|
SLIP,CSLIP,PPP,ARP,RARP,
|
物理层
|
物理层
|
利用传输介质为数据链路层提供物理链接,实现相邻计算机节点之间比特流的透明传输
|
IEEE802.1 A,IEEE802.2到IEEE802.11
|
说明:有时为了方便,也能够把TCP/IP模型中最下面两层成为网络接口层。浏览器
TCP Flags:缓存
URG:紧急指针标志安全
ACK:确认序号标志服务器
PSH:push标志网络
RST:重置链接标志session
SYN:同步序号,用户创建链接过程
FIN:finish标志,用于释放链接
“握手”是为了创建链接,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状态,完成三次握手。
“挥手”是为了终止链接,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状态,完成四次挥手。
确保有足够的时间让对方收到ACK包。若是服务端没有收到,到达等待时间会请求客户端从新发送,若是客户端在2MSL中没有收到消息,证实客户端已经收到了断开链接的确认信息,这时能够关闭客户端了。
由于全双工,发送方和接收方都须要FIN和ACK报文才会断开链接。
|
TCP
|
UDP
|
链接
|
面向链接
|
面向无链接 |
可靠性
|
可靠,无差错,不丢失,不重复
|
不保证可靠
|
速度
|
慢
|
快
|
量级
|
重
|
轻
|
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:客户端通知服务器返回本次请求结果后关闭链接
GET方式:当使用GET方式提交表单内容的时候,浏览器将各个表单自断元素及其数据按照URL参数的格式附加在请求行中的资源路径后面。使用GET方式传送的数据量是有限制的,通常限制在1KB一下。表单提交的时候默认是GET方式。
POST方式:当使用POST方式提交表单的时候,浏览器将各表单元素及其数据做为HTTP消息的实体内容发送给Web服务器,而不是做为URL地址的参数传递。所以,使用POST方式传送的数据量要比使用GET方式传送的数据量大得多。使用POST方式传递数据时,必须设置Content-Type消息头和Content-length消息头。
Cookie是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端;客户端再次请求的时候,会把Cookie回发;服务器收到后,会解析Cookie生成与客户端相对应的内容
Session是服务器端的机制,在服务器上保存信息;解析客户端请求并操做session id,按需保存状态信息;
Session的实现方式:使用Cookie来实现;使用url会写来实现
Cookie数据村凡在客户的浏览器上,Session数据放在服务器上
Session相对于Cookie更安全
若考虑减轻服务器负担,应当使用Cookie
分类
|
分类描述
|
1**
|
信息,服务器收到请求,须要请求者继续执行操做
|
2**
|
成功,操做被成功接收并处理
|
3**
|
重定向,须要进一步的操做以完成请求
|
4**
|
客户端错误,请求包含语法错误或没法完成请求
|
5**
|
服务器错误,服务器在处理请求的过程当中发生了错误
|
请求收到,继续处理: 100 客户端必须继续发出请求 101 客户端要求服务器根据请求转换HTTP协议版本 操做成功收到,分析,接受: 200 交易成功 201 提示知道新文件的URL 202 接受和处理、但处理未完成 203 返回信息不肯定或不完整 204 请求收到,但返回信息为空 205 服务器完成了请求,用户代理必须复位当前已经浏览过的文件 206 服务器已经完成了部分用户的GET请求 重定向: 300 请求的资源可在多处获得 301 永久重定向,在Location响应首部的值仍为当前URL(隐式重定向) 302 临时重定向,在Location响应首部的值仍为新的URL(显示重定向) 303 建议客户端访问其余URL或访问方式 304 Not Modified 请求的资源没有改变 能够继续使用缓存 305 请求的资源必须从服务器指定的地址获得 306 前一版本HTTP中使用的代码,现行版本中再也不使用 307 声明请求的资源临时性删除 客户端错误: 400 错误请求,如语法错误 401 未受权 HTTP 401.1 未受权,登陆失败 HTTP 401.2 未受权,服务器配置问题致使登陆失败 HTTP 401.3 ACL 禁止访问资源 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 - 网关超时
通用信息头:
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-alive
Authorization:当客户端访问受口令保护的网页文件时,web服务器要求客户机使用Authorization请求头来应答。
Expect:用于指定客户机请求服务器采起的特殊行动
Form:用于指定请求发送者的Email地址
Host:用于指定资源所在的主机名和端口号,格式与资源的完整URL中的主机名和端口号部分同样,若是端口号等于链接服务器时所使用的端口号,则能够省略。
Host:analytics.163.com
User-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.36
Referer:浏览器向服务器发出的请求,多是直接在浏览器地址栏中输入URL而发出,也能够是单击另外一个网页上面的超连接而发出的。对于第二种状况,浏览器使用Referer头字段指定发出请求的超连接源的URL。对于第一种状况,浏览器不该发送Referer请求头。
Referer:http://mp.163.com/article/postpage/W3324714890220385556?wemediaId=W3324714890220385556 If-Modified-Since:Wed, 24 May 2017 14:07:32 Asia/Shanghai If-None-Match:5b54f9bd1d3396a5bc687a18ce578363
响应头:
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=5184000 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-proxy3
Server:用于指定服务器软件的产品名称
Content-Type:用于告诉浏览器多接受的数据是那种格式的数据
Expires:用于指定当前文档应该在何时被认为过时,浏览器到那个时候之后不能再继续使用本地的缓存,而是在有须要的时候向服务器发出新的访问请求
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。
加密的方式
对称加密:加密和解密都使用同一个秘钥
非对称加密:加密使用的秘钥和解密使用的秘钥是不相同的
哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆
数字签名:证实某个消息或者文件时从某人发出/认同的
浏览器键支持的加密算法信息发送给服务器
服务器选择一套浏览器支持的算法加密,以证书的形式回发浏览器
浏览器验证证书的合法性,并结合证书公钥加密信息发送给服务器
服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器
浏览器解密响应信息,并对消息进行验真,以后进行加密交互数据
HTTPS须要到CA申请证书,HTTP不须要
HTTPS密文传输,HTTP明文传输
链接方式不一样,HTTPS默认使用443端口,HTTP使用80端口
HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全