面试必备:计算机网络核心知识点梳理

计算机网络是互联网企业研发岗面试的基础,本人针对一些面试经验和网络上的资料对本部分内容进行了复习和简单的梳理,希望对大家有帮助。

1. OSI参考模型与TCP/IP参考模型

OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。

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模型中最下面两层成为网络接口层。

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特点

  1. 面向非连接
  2. 不维护连接状态,支持同时向多个客户端传输相同的消息
  3. 数据包报头只有8个字节,额外开销较小
  4. 吞吐量值受限于数据生成速率、传输速率以及机器性能
  5. 尽最大努力,不保证可靠交付,不需要维持复杂的连接状态表

4.2 TCP和UDP区别:

 
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 请求/响应的步骤

  1.     客户端连接web服务器
  2.     发送HTTP请求
  3.     服务器接受请求并返回HTTP响应
  4.     释放连接TCP连接
  5.     客户端浏览器解析HTML内容

5.4 在浏览器地址栏键入url,按下回车之后经历的流程

  1. DNS解析浏览器缓存-系统缓存-路由器缓存IPS
  2. TCP连接(三次握手)
  3. 发送HTTP请求
  4. 服务器处理请求返回HTTP报文
  5. 浏览器解析渲染页面
  6. 连接结束

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更安全

  • 若考虑减轻服务器负担,应当使用Cookie

5.7 HTTP状态码分类和常用状态码

HTTP状态码分类:
分类
分类描述
1**
信息,服务器收到请求,需要请求者继续执行操作
2**
成功,操作被成功接收并处理
3**
重定向,需要进一步的操作以完成请求
4**
客户端错误,请求包含语法错误或无法完成请求
5**
服务器错误,服务器在处理请求的过程中发生了错误
常见HTTP响应状态码:
请求收到,继续处理:
            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 - 网关超时

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 GMT
  • Pragma:设置值只能固定为no-cache
  • Trailer:对于放置在尾部的头字段,需要使用Trailer字段说明。例如:Trailer:Date 
  • Transfer-Encoding:目前的标准设置值只有chunked
  • Upgrade:允许客户机指定他所支持并希望将当前协议切换到的通信协议
  • 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-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:用于指定当前文档应该在什么时候被认为过期,浏览器到那个时候以后不能再继续使用本地的缓存,而是在有需要的时候向服务器发出新的访问请求

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数据传输流程

  1. 浏览器键支持的加密算法信息发送给服务器

  2. 服务器选择一套浏览器支持的算法加密,以证书的形式回发浏览器

  3. 浏览器验证证书的合法性,并结合证书公钥加密信息发送给服务器

  4. 服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器

  5. 浏览器解密响应信息,并对消息进行验真,之后进行加密交互数据

6.3 HTTP和HTTPS的区别

  • HTTPS需要到CA申请证书,HTTP不需要

  • HTTPS密文传输,HTTP明文传输

  • 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口

  • HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全

 
posted @ 2019-03-10 21:59  James_Shangguan  阅读(3408)  评论(0编辑  收藏  举报