iOS秋招复习——网络

网络篇复习

1.浏览器输入url到网页显示经历了什么过程?

答:1.输入网址
2.发送到DNS服务器,解析域名,编程ip地址
3.浏览器与web服务器建立TCP链接 三次握手
4.浏览器向web服务器发送http请求
5.web响应请求并返回url数据
6.浏览器下载web服务器返回的数据及解析html源文件
7.生成DOM树,解析css和js,渲染页面,直至显示完成

2.TCP三次握手:具体是怎么握手?为什么要三次握手?两次行不行?为什么不行?三次握手,第二次和第三次分别因为什么?

答:
TCP三次握手
1.客户端主动打开,发送连接请求报文段,将SYN标识位置为1(SYN:同步序列编号(Synchronize Sequence Numbers)),Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态

2.服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RCVD状态,这个状态被称为半连接状态

3.客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态

不可以两次握手,第三次握手主要为了防止已失效的连接请求报文段突然又传到了B,因而产生错误。
所谓“已失效的连接请求报文段”的意思就是,A传给B一个报文段,但因为某种原因没有传过去,于是需要超时重传,结果第二次传过去了,于是TCP三次握手建立,等数据传输完成之后,释放连接。但这时第一次的报文传到了B,误以为A又请求连接,所以B就会发出确认建立连接,但A并没有发出请求,所以不会理睬B,不会发送任何数据,但B一直等A发送,就导致B的许多资源就这样白白浪费了。

拓展:TCP释放连接(即四次挥手)
1.客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态

2.服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态

3.服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态

4.客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态

3.HTTPS的过程

首先HTTP是明文传输,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。而HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。

HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。

HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。所以HTTPS一共需要三个秘钥:1.客户端生成的随机密钥,用来进行对称加密 2.服务器端的公钥私钥,用来进行非对称加密

一个HTTPS请求实际上包含了两次HTTP传输可以细分为8步
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口
2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
3.服务器将自己的公钥发送给客户端。
4.客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密密钥,我们将该密钥称之为client key,即客户端密钥。然后用服务器的公钥客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后客户端密钥发送给服务器。
6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文
7.然后服务器将加密后的密文发送给客户端。
8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

下图源自limboy的博客
HTTPS请求

补充: SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。其最新的版本是3.0,TLS的全称是Transport Layer Security,即安全传输层协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。

未完待续…luhh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值