网络基础

网络基础

1、http协议

【超文本传输协议】允许将HTML(超文本标记语言)文档从Web服务器传送到客户端的浏览器。
HTTP协议是 基于TCP/IP通信协议来传输数据的,可以从服务器端获取图片等数据资源。

URI: 【uniform resource identifier】统一的资源标识符,用来唯一的标识一个资源。强调资源!!!
URL: 【uniform resource Location】统一资源定位器,是一种具体的URI。即URL可以用来标识一个资源,而且还指明了如何定位这个资源。强调路径!!!

HTTP协议特点:
(1). 简单快速;
(2). 无连接;【限制每次链接只处理一个请求,服务器处理完客户的请求之后会收到客户端的应答,再断开链接,节省了重复的时间】;
(3). 无状态:【没有记忆能力,】
存在的问题:
(1). 传输数据时,每次都需要重新创建连接,增加了大量的延迟时间;
(2). 传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份;
(3). 使用时,header里携带的内容过大,增加了传输成本。

2、https协议

基本概念: 对工作在以加密连接(SSL / TLS)上的常规HTTP协议。通过在TCP和HTTP之间加入TLS【Transport Layer Security】来加密。
SSL / TLS协议: 安全传输协议,TLS是SSL的升级版,也是现阶段所使用的协议;

HTTPS传输速度:
(1). 通信慢;
(2). SSL必须进行加密处理。

TLS / SSL握手:
(1). 密码学原理
对称加密:加密数据所用的密钥和解密数据所用的密钥相同。
非对称加密:分私有密钥和公有密钥。
(2). 数字证书:互联网通讯中标志通讯各方身份信息的一串数字。
(3). 握手过程

3、http和https的区别

(1). https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
(2). http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
(3). http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(4). http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

4、https实现原理:

(1). 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2). Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3). 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4). 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5). Web服务器利用自己的私钥解密出会话密钥。
(6). Web服务器利用会话密钥加密与客户端之间的通信。

5、Http位于TCP/IP模型中的第几层?为什么说Http是可靠的数据传输协议?

tcp/ip的五层模型: 从下到上:物理层->数据链路层->网络层->传输层->应用层

  其中tcp/ip位于模型中的网络层,处于同一层的还有ICMP(网络控制信息协议)。
  http位于模型中的应用层由于tcp/ip是面向连接的可靠协议,而http是在传输层基于tcp/ip协议的,所以说http是可靠的数据传输协议。

6、HTTP链接的特点

  HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。
  从建立连接到关闭连接的过程称为“一次连接”。

7、TCP和UDP的区别

tcp是面向连接的,由于tcp连接需要三次握手,所以能够最低限度的降低风险,保证连接的可靠性。
udp 不是面向连接的,udp建立连接前不需要与对象建立连接,无论是发送还是接收,都没有发送确认信号。

所以说udp是不可靠的。由于udp不需要进行确认连接,使得UDP的开销更小,传输速率更高,所以实时行更好。

8、Socket建立网络连接的步骤

建立Socket连接至少需要一对套接字,其中一个运行与客户端–ClientSocket,一个运行于服务端–ServiceSocket
(1).服务器监听: 服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
(2).客户端请求: 指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。注意:客户端的套接字必须描述他要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后就像服务器端套接字提出连接请求。
(3).连接确认: 当服务器端套接字监听到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务端套接字则继续处于监听状态,继续接收其他客户端套接字的连接请求。

9、tcp的三次握手四次挥手

网络基础_第1张图片

三次握手:
第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

网络基础_第2张图片

四次挥手:
第一次挥手: Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手: Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手: Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手: Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手,连接关闭

10、为什么是三次握手而不是两次握手或四次握手?

简单点来说就是两次握手不能保证连接的稳定性,四次握手太浪费资源。

知乎一个很有意思的解释:就说两个人视频通话,
如果是三次握手:
男:你听的到吗?
女:我听得到,听得到我的声音吗?
男:我听的到你的,blablabla。。。。
如果是两次握手:
男:你听的到吗?
女:听得到。
男:你听的到吗?
女:听得到
男:你听得到吗?
女:。。。有病吧。
如果是四次握手:
男:你听的到吗?
女:听得到,你听得到我说的么。
男:听的到,你听得到我说得么。
女:。。。。不想和傻子说话。

11、为什么连接的时候需要三次握手,而断开的时候要四次挥手

  只是对于三次握手来说中间的两个步骤是可以合并成一次的,而对于四次挥手来说则是不可以合并,因为四次挥手发送的FIN报文仅仅表示对方不再发送数据了,但是还能接收数据,所以要等自己这边发出FIN之后,才能close。

12、tcp断开连接方式

客户端:close() /closesocket() /shutdown
  确切额说,close()、closesocket用来关闭套接字,将套接字描述符从内存中清除,之后再也不能使用该套接字,shutdown用来关闭连接,而不是套接字,不管调用多少次,套接字依然存在,知道调用close

  默认情况下,close()/close()会立即向网络中发送FIN包,不管输出缓冲区中是否还有数据,而shutdown会等输出缓冲区的数据传输完毕再发送FIN包,也就意味着,调用close将丢失缓冲区中的数据,

你可能感兴趣的:(网络,基础,基础,网络)