面试复习——Android工程师之网络基础

各层网络协议相关

1、OSI,TCP/IP,五层协议的体系结构

  1. OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
  2. TCP/IP分层(4层):网络接口层(连接层)、 网络层、传输层、 应用层
  3. 五层协议 (5层):物理层、数据链路层、网络层、传输层、 应用层

TCP/IP口诀:从网络接口(层)获取数据时,需经过网络(层)访问,传输(层)到我们的应用(层)

各层网络协议的作用

  • 物理层:连接两台主机之间的物理介质,单纯的01传输电信号
  • 数据链路层:数据链路层规定电信号的分组方式,使用广播的方式在子网络中通过Mac地址的匹配,实现不同电脑上的数据传输
  • 网络层:通过arp协议,使用ip来区分不同的计算机是否属于同一个子网络,再通过广播的方式在子网络中通过Mac地址的匹配,实现不同电脑上的数据传输
  • 传输层:建立一个端口到另一个端口的通信(TPC/IP协议)
  • 应用层:规定应用程序的数据格式(HTTP协议)

IP地址的分类

  1. A类地址: 第一个字节范围:0~127(0.0.0.0 - 127.255.255.255),默认子网掩码255.0.0.0
  2. B类地址: 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255),默认子网掩码255.255.0.0
  3. C类地址:第一个字节范围:192~223(192.0.0.0 - 223.255.255.255),默认子网掩码255.255.255.0

网络请求之Get和Post的区别

  1. 传递方式:Get通过地址栏传输,Post通过报文传输
  2. 传递长度:Get提交数据最多1024字节,Post则没有限制
  3. 传递用途:Get是从服务器中获取数据,Post是向服务器发送数据

TCP三次握手和四次挥手

1、相关概念

  • TCP三次握手:在客户端发送connect()的时候调用触发,即建立TCP连接,总共需要客户端和服务端共发送3个包来确保连接的建立
  • TCP四次挥手:在客户端发送close()的时候调用触发,即断开TCP连接,总共需要客户端和服务端共发送4个包来确保连接的断开

2、相关术语

  • 序号:Seq序号(Sequence number顺序号码),占32位,用来标识从TCP源端向服务端发送的字节流
  • 确认序号:Ack序号(Acknowledge number确认号码),占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1
  • 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN,具体含义如下:
    1. URG:紧急指针有效(urgent紧急)
    2. ACK:确认序号有效(acknowledgement 确认)
    3. PSH:接收方应该尽快将这个报文交给应用层(push传送)
    4. RST:重置连接(reset重置)
    5. SYN:发起一个新连接(synchronous建立联机)
    6. FIN:释放一个连接(finish结束)

需要注意:不要将确认序号Ack与标志位中的ACK搞混了

3、TCP三次握手过程

这里写图片描述

  • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态
  • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了

4、TCP四次挥手过程

情况一:由于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状态,完成四次挥手

情况二:客户端和服务端同时发起主动关闭挥手操作,其四次挥手操作与上面的操作原理是一样的,这里不做解释

这里写图片描述

5、相关状态

  • CLOSED:表示初始状态
  • LISTEN:表示服务器端的某个socket处于监听状态,可以接受连接
  • SYN_RCVD:表示接受到了SYN报文
  • SYN_SENT:表示客户端已发送SYN报文
  • ESTABLISHED:表示连接已经建立
  • FIN_WAIT_1:表示等待对方的FIN报文
  • FIN_WAIT_2:表示等待对方的FIN报文,和FIN_WAIT_1的区别是,FIN_WAIT_2表示有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接
  • TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文
  • CLOSING:正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。这种情况,只有在双方几乎在同时close一个socket的时,那么就出现了双方同时发送FIN报文的情况,同时也会出现CLOSING状态,表示双方都正在关闭socket连接
  • CLOSE_WAIT:表示在等待关闭
  • LAST_ACK:表示被动关闭一方在发送FIN报文后,最后等待对方的ACK报文

6、为什么TCP连接是三次握手,断开是四次挥手?

  1. 在三次握手的时候,服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端,所以有三次发送包的机会
  2. 在四次挥手的时候,当服务端收到客户端的FIN报文时,仅仅表示客户端不再发送数据,但是还能接收数据,服务端也未必把全部数据都发送给客户端了,所以服务端可以立即close,也可以发送一些数据给客户端后,再发送FIN报文给客户端来表示同意现在关闭连接,因此,服务端ACK和FIN一般都会分开发送,所以有四次发送包的机会

TCP和UDP的区别

TCPUDP
面向连接,需要三次握手进行连接面向非连接
传输可靠,采用字节流传输传输不可靠,采用报文传输
能传输大量的数据能传输少量数据
传输速度慢传输速度快
连接方式有点对点连接连接方式有一对一,一对多,多对多
提供超时重发,丢弃重复数据,流量控制等功能没有超时重发等机制

HTTP1.0和1.1的区别

  • 长连接:HTTP1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接
  • 节约带宽:HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器,客户端如果接受到401,客户端就可以不用发送body信息,节约了带宽
  • HOST域:HTTP1.0是没有host域的,HTTP1.1才支持这个参数

Http1.1和2.0的区别

  • 多路复用:HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级
  • 数据压缩:HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快
  • 服务器推送:当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取,服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的

HTTP协议简述

  • HTTP协议是请求-应答式协议,客户端发送一个请求,服务端需做出对应的应答
  • HTTP协议用于Internet上发送和接收信息
  • 所有的请求和应答都是HTTP包
  • HTTP协议依靠可靠的TCP连接,默认端口是80
  • HTTP协议第一个版本是0.9,之后发展到1.0、1.1,到现在的2.0

HTTP特点

  1. 简单快速
  2. 无连接:只要一次连接就能互相发送数据
  3. 无状态:对于用户上一次的页面操作没有记忆功能

HTTP报文结构

1、请求报文结构如下

< 请求行>
< 请求头>
< 空行>
< 请求体>

  1. 请求行:请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1
  2. 请求头:请求头由关键字/值对组成,每行一对,关键字和值用英文冒号分隔。请求头通知服务器有关于客户端请求的信息,例如,User-Agent:Firefox/13.0.1
  3. 空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头
  4. 请求体:请求体不在GET方法中使用,而是在POST方法中使用,POST方法适用于客户端填写表单的场合。请求体通常存放的是请求的数据内容

2、响应报文结构如下

< 状态行>
< 响应头>
< 空行>
< 响应体>

  1. 状态行:状态行由HTTP协议版本字段、状态码和状态码的描述文本3 个字段组成,它们用空格分隔。例如,HTTP/1.1 200 OK
  2. 响应头:响应头由关键字/值对组成,每行一对,关键字和值用英文冒号分隔。响应头通知客户端有关于服务端请求的信息,例如,Connection:close
  3. 空行:最后一个响应头之后是一个空行,发送回车符和换行符,通知客户端以下不再有响应头
  4. 响应体:响应体不在GET方法中使用,而是在POST方法中使用,响应体通常存放的是响应的数据内容

HTTPS简述

HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,主要用到对称加密、非对称加密、证书等技术进行加密,其默认端口为443。它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息,它使用安全套接字层(SSL,SSL使用40位关键字作为RC4流加密算法)进行信息交换,简单来说它是HTTP的安全版

HTTP和HTTPS的区别

HTTPHTTPS
URL以http://开头URL以https://开头
不安全的安全的
默认端口是80默认端口是443
工作于OSI模型中的应用层工作于OSI模型中的传输层
传输的数据无需加密传输的数据进行加密
传输速度快传输速度慢
访问无需证书访问需要认证证书

URI和URL

1、URI(uniform resource identifier):统一资源标识符,表示某一互联网资源名称的字符串

URI的组成:(如:file://128.1.2.2:8080/abc/wo.txt)

  1. 访问资源的命名机制
  2. 存放资源的主机名
  3. 资源自身的名称(路径+文件名)

2、URL(uniform resource locator):统一定位资源符,表示从互联网上得到的资源的位置和访问方法,是互联网上标准资源的地址

URL的组成:(如:www.baidu.com

  1. 协议
  2. 存有资源的IP地址
  3. 资源的具体目录地址

Cookie和Session的区别

  • 存放位置:Cookie保存在客户端,Session保存在服务端
  • 存取方式:Cookie存储的是ASCLL字符串,Session能存储任何类型的值
  • 安全问题:Cookie是不安全,客户端可以修改,Session是安全的,服务器对客户端是不可见的
  • 有效期:Cookie可以设置有效期大小,Session依赖于SessionId,如果SessionId设置为-1,关闭浏览器Session就会失效
  • 对服务器造成压力:对于高并发的网络请求,Session压力比Cookie大

对称加密和非对称加密

对称加密:加密数据用的密钥,跟解密数据的密钥是一样的
非对称加密:私有密钥由一方保管,公有密钥双方公开

数字证书

数字证书是一个文件,表示互联网通讯中标识通讯各方身份信息的一串数字

数字签名

数字签名用于验证传输的内容是不是真实服务器发送的数据,判断发送的数据有没有被篡改过

TLS/SSL握手过程

这里写图片描述

详细介绍一下图中过程:

  1. 客户端给出协议版本号、一个客户端随机数A(Client random)以及客户端支持的加密方式
  2. 服务端确认双方使用的加密方式,并给出数字证书、一个服务器生成的随机数B(Server random)
  3. 客户端确认数字证书有效,生成一个新的随机数C(Pre-master-secret),使用证书中的公钥对C加密,发送给服务端
  4. 服务端使用自己的私钥解密出C
  5. 客户端和服务器根据约定的加密方法,使用三个随机数ABC,生成对话秘钥,之后的通信都用这个对话秘钥进行加密

DNS

DNS用来将主机名和域名转换为IP地址

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许英俊潇洒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值