对于Android面试来说问到的网络的相关知识并不少,但是你必须要会,虽然你是专业做Android开发的,但是面试官问你你必须要会,可以不是很深入,但是一定要会这些基础性的知识。
接下来我们就来说一说最长问到的UDP与TCP。
网络分层就是将网络节点所要完成数据发送或转发、打包、拆包,以及控制信息的加载或拆出等工作,分别由不同的硬件和软件模块来完成。有的网络分层分为五层,有的分为七层,我们这里只讲一下五层的,比较好理解。
1.物理层
就是将计算机连接起来的物理手段,该层负责比特流在节点之间通信,及负责物理传输。该层的协议既与链路有关,也与传输介质有关。
2.数据链路层
该层控制网络层与物理层之间的通信,主要功能就是如何在不可靠的物理线路上进行数据的可靠传递。
3.网络层
该层决定如何将数据从发送方路由到接收方。网络层通过综合考虑优先权、网络拥塞程度、服务质量以及可选路由的花费来决定从一个网络中的节点A到另一个网络中节点B的最佳路径。
4.传输层
该层为两台主机上的应用程序提供端到端通信。传输层有两个协议TCP(传输控制协议)和UDP(用户数据报协议)
5.应用层
应用程序接收到传输层的数据之后,进行解读。应用层就是规定应用程序的数据格式的。主要协议有HTTP、FTP、Telnet、SMTP、POP3等。
1.概念
TCP:传输控制协议
UDP:用户数据报协议
2.面试题-两者的区别
TCP | UDP | |
可靠性 | 可靠 | 不可靠 |
连接性 | 面向连接 | 无连接 |
报文 | 面向字节流 | 面向报文 |
效率 | 传输效率低 | 传输效率高 |
双工性 | 全双工 | 一对一、一对多、多对一、多对多 |
流量控制 | 有 | 无 |
拥塞控制 | 有(慢开始、拥塞避免、快重传、快恢复) | 无 |
传输速度 | 慢 | 快 |
面试题-什么是面向连接,什么叫无连接?
面向连接:面向连接维护了分组之间的状态,使用这种协议的应用程序通常会进行长期对话,记住这些状态,协议就可以提供可靠的传输。比如:发送端可以记住那些数据已经发送但还没有被确认以及数据是何时发送的。如果在某段时间间隔内没有收到确认,发送端可以进行重传。接收端可以记住接受了哪些数据,并将重复的数据丢弃。如果分组不是按序到达的,接收端可以先将其保存下来,直到逻辑上先于他的分组到达为止。
无连接:无连接中的分组被称为数据报,每个分组都是独立寻址,并由应用程序发送的。从协议角度来看,每一个分组都是一个独立的实体,在于两个相同的对等实体之间传送的任何其他数据报都没有关系,这就意味着连接是不可靠的。就是会尽力传送每一个数据报,但并不保证数据不丢失、不延迟、不错序传输。
面试题-三次握手+四次挥手
首先我们要知道为什么要进行三次握手而不是四次握手?
首先三次握手就能达到四次握手以及更多次握手的效果,所以只需三次握手就行而不需要在进行多余的握手。三次握手就是防止已经过期的连接再次传递到被连接的主机。
比如客户端A和服务端B进行连接,A向B发送了连接请求,但是由于某些原因B没有收到,于是A又向B发送了连接请求,这次B收到了连接请求,并将收到的确认信息发送给A,这样就建立了连接,当没有数据后两者链接就断开了,此时之前B没有收到的A的连接请求信息B现在收到了,现在又向B发送了确认信息,此时A和B就建立了连接,B就等待A发送数据过去,但此时已经数据已经发送完毕了,但又建立了连接。
三次握手机制
第一次握手:就是建立连接。首先客户端发送请求报文段,,将SYN设为1,seq设为x,接下来客户端就进入SYN_SEND状态,等待服务器确认。
第二次握手:服务端收到客户端的请求报文段,并进行确认,将ack设为x+1,seq设为y,同时还要发送一段自己的请求信息:SYN设为1,ACK设为1,一并发送给客户端,之后服务端进入SYN_RECV状态。
第三次握手:客服端收到服务端的报文,并将seq设为x+1,ack设为y+1,ACK设为1再发送给服务端,发送完之后两端都进入ESTABLISHED状态,完成三次握手,之后就可以进行数据传输。
四次挥手
第一次挥手:客户端向服务端发送FIN报文,设置seq为u,发送完之后客户端进入FIN_WAIT_1状态,表示客户端没有数据发送给服务端了。
第二次挥手:服务端收到了客户端的FIN报文段,并回复一个ACK报文。
第三次挥手:服务端向客户端发送FIN报文,请求关闭连接,并设置seq为w,ack为u+1,发送完之后服务端进入LAST_ACK状态。
第四次挥手:客户端收到服务端的FIN报文之后,回复一个ACK报文,seq设为u+1,ack设为w+1,之后客户端进入TIME_WAIT状态,服务端收到之后就会关闭连接,此时客户端等待2MSL(最大报文生存时间)后依然没有收到回复,则说明服务器正常关闭,客户端也就随之关闭。
TCP/IP(网际传输协议)
TCP/IP由四个层次组成:数据链路层、网络层传输层、应用层
应用层包含的协议:TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet
传输层包含的协议:TCP、UDP
网络层:IP、ICMP、OSPF、IGMP
数据链路层:SLIP、PPP
基本上Android面试的话问到最多的就是TCP与UDP的区别以及TCP的三次握手以及四次挥手,一定要理解这个东西在面试的时候脑海中凭借图来叙述出来。