网络协议相关的面试知识点

关键字:Http,Https,TCP,UDP,Socket,面试

一、 Http,Https(应用层协议)

Http协议,超文本传送协议(Hypertext Transfer Protocol ),Http协议是基于TCP协议之上的一种应用。
Https协议(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的Http通道,简单讲是Http的安全版。即Http下加入SSL层,Https的安全基础是SSL,因此加密的详细内容就需要SSL。

Https和Http的区别主要为以下四点:

  1. Https协议需要到CA(数字证书签发机构)申请数字证书,一般免费证书很少,需要交费。
  2. Http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议。
  3. Http和Https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. Http的连接很简单,是无状态的;https协议是由SSL/TLS(Secure Sockets Layer/Transport Layer Security)+Http协议构建的可进行加密传输、身份认证的网络协议,比Http协议安全。

Https简单原理解析(对称加密,非对称加密,中间人攻击,公钥,私钥,数字证书,数字签名): 也许,这样理解HTTPS更容易

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个非对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

二、 网络七层模型

20世纪70年代中,为了优化数据库系统设计,支持数据库系统的访问,美国的一个互联网研究小组提出了一个结构化的分布式通信系统体系结构(共七层),他们内部称之为分布式系统体系结构(DSA),1977年英国标准化协会向国际标准化组织(ISO)提议,为了定义分布处理之间的通信基础设施,需要一个标准的体系结构。后来,ISO就开放系统互联(OSI)问题成立了一个专委会(TC 97, Subcomittee 16),指定由美国国家标准协会(ANSI)开发一个标准草案。1978年3月,在ISO的OSI专委会在华盛顿召开的会议上,与会专家很快达成了共识,认为这个分层的体系结构能够满足开放式系统的大多数需求,而且具有可扩展的能力,能够满足新的需求。于是,1978年发布了这个临时版本,1979年稍作细化之后,成了最终的版本。七层模型内容如下,左侧列出的是简化后的四层模型。


网络协议相关的面试知识点_第1张图片
OSI网络七层模型

1.实体层:连接网络的硬件设备,就是将电脑连接起来的物理手段. 如光缆/电缆/无线电波
2.数据链路层 (Link):建立逻辑连接、进行硬件地址寻址、差错校验等功能,如32位和64位计算机,他们的解码方式是不一样的,数据链路层就规定个二进制数据的解读方式。
3.网络层 (Network):进行逻辑地址寻址,实现不同网络之间的路径选择。网络层建立了主机之间的通信,它在网络层引入了一套地址机制:网络地址.简称网址(Ip地址),我们可以通过Ip地址,可以找到唯一的一台计算机,通过主机MAC地址来接收和发送信息。
4.传输层 (Transport):定义传输数据的协议端口号,以及流控和差错效验,定义了端口和端口之间的通信,帮助我们使不同的应用程序能够接收到自己所需要的的数据。
5.会话层(Session Layer):包括建立、管理、终止会话,用来建立和管理应用程序之间的通信,实现自动寻址,自动收发数据。
6.表示层(Presentation Layer):数据的表示、安全、压缩。比如我们要用基于Unix系统的mac电脑给pc机发送数据,表示层为我们解决了通信间语法的问题。
7.应用层 (Application):网络服务与最终用户的一个接口。比如不同的文件类型要用不同的应用程序打开,应用层中就规定了不同应用程序的数据格式。

三、TCP/IP,IP,TCP,UDP,Socket

IP协议对应于网络层,TCP,UDP协议对应于传输层,而HTTP协议对应于应用层。

TCP/IP协议是一个协议簇,由网络层的IP协议和传输层的TCP协议组成。TCP/IP层次模型共分为四层:应用层、传输层、网络层、数据链路层

IP协议(网络层协议),为计算机网络相互连接进行通信而设计的协议。

TCP/UDP(传输层协议),基于二进制流的控制间传输协议:TCP是面向连接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。

TCP与UDP区别总结:
1.TCP是面向连接的;UDP是无连接的,即发送数据之前不需要建立连接
2.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
3.UDP具有较好的实时性,传输速度比TCP快,适用于对高速传输和实时性有较高的通信或广播通信。
4.TCP对系统资源要求较多,UDP对系统资源要求较少。

Socket相当于调用接口(API),用来调取TCP/IP协议。**

四、使用Socket建立网络

网络上两个程序通过双向通信实现数据交换,Socket又叫套接字,每个应用程序开启后,都会在传输层端口上绑定一个Socket,不同应用程序之间通过端口找到Socket实现数据通信。

Socket连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。

五、 TCP三次握手过程

1.主机A通过向主机B发送一个含有同步序列号的标志位的数据段,向主机B请求建立连接。通过这个数据段,主机A告诉主机B两件事:我想要和你通信以及你可以用那个序列号作为起始数据段来回应我。

2.主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用那个序列号作为起始数据段来回应我。

3.主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:“我已收到回复,我现在要开始传输实际数据了”。这样3次握手就完成了,主机A和主机B就可以传输数据了。

六、Post和Get的区别?

  1. 一般发送Get请求向服务器索取数据,发送Post请求向服务器提交数据。
  2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看 到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
  4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
  5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

建议:
1)get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2)在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

七、请求头和响应头部分字段的含义:

  • Host:指定服务器域名,可用来区分访问一个服务器上的不同服务
  • Connection:keep-alive表示要求服务器不要关闭TCP连接,close表示明确要求关闭连接,默认值是keep-alive
  • Accept-Encoding:说明自己可以接收的压缩方式
  • User-Agent:用户代理,是服务器能识别客户端的操作系统(Android、IOS、WEB)及相关的信息。作用是帮助服务器区分客户端,并且针对不同客户端让用户看到不同数据,做不同操作。
  • Content-Type:服务器告诉客户端数据的格式,常见的值有text/plain,image/jpeg,image/png,video/mp4,application/json,application/zip。这些数据类型总称为MIME TYPE。
  • Content-Encoding:服务器数据压缩方式
  • Transfer-Encoding:chunked表示采用分块传输编码,有该字段则无需使用Content-Length字段。
  • Content-Length:声明数据的长度,请求和回应头部都可以使用该字段。

八、其他相关文章

HTTP 必知必会的那些
TCP/IP、Socket 和协议设计
Http协议与TCP协议简单理解

你可能感兴趣的:(网络协议相关的面试知识点)