OSI(Open System Interconnection 开放系统互联)
总得来说就是将你需要发送的数据通过一层层的封装最后一比特流的形式发送到目的进程。
TCP/IP协议 四层模型
这里的TCP/IP指的可不是tcp/ip两种协议,而是一种网络模型
各层级对应的常用的协议,可以看出Http协议和ftp协议都是属于应用层的。而我们常用的socket是在应用层和传输层之间的。
TCP/IP模型
网络接口层
- 封装数据/解封数据
- 控制帧传输
- 流量控制
网络层
我们熟知的主要是ip协议,网络层之上的协议包括TCP.UDP等协议数据都是以IP数据报格式传输的。
IP协议主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机
ip协议只管将数据从源IP传输到目标IP,其他的诸如数据安全都不关注。
传输层
主要协议有 TCP/UDP协议
不同的应用进程使用不同的协议。
UDP协议
用户数据报协议
传输速度快,开销小,无连接,无阻塞,不可靠,不稳定。
支持一对一,一对多,多对一,多对多通信
TCP协议
传输控制协议
点对点连接,可靠有序,全双工通信(双方可以互发数据),面向字节流
TCP协议建立连接的三次握手
- 客户端发送连接请求报文段
- 服务端收到连接请求,并返回确认
- 客户端再次发送确认报文段(指自己已经收到服务端的确认报文),这个时候发送的报文段已经可以携带数据
TCP协议断开连接的四次挥手
- 客户端发送断开请求
- 服务器收到断开请求,并返回确认
- 服务器发送断开连接的请求
- 客户端返回确认
socket
位于传输层之上,应用层之下,是对传输层的封装。
两个进程如何通信最主要的前提是能够唯一标示一个进程,在本地进程通讯中我们可以使用pid来唯一标示一个进程。
但是在网络中两个进程的pid有很大几率会冲突。所以通过ip地址+协议+端口号唯一标示网络中的一个进程。
IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程
socket是TCP/IP的抽象和封装,简化TCP/IP的操作难度,socket主要用来进行进程间的通信。
实际上网络间的通信还是基于TCP/IP的协议。
应用层
不同的应用对应具体的需求,同时也需要使用不同的应用层协议。之后会对http协议进行进一步解读。
socket解读
概念解释
Socket非常类似于电话插座。以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于Socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket;同时要知道对方的号码,相当于对方有一个固定的Socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。假如对方在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向Socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭Socket,撤消连接。
socket又称套接字,底层建立连接通道,通过套接字建立连接。
socket是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中断点的抽象标示,包含进行网络通信的必须得五种信息
- 连接协议(tcp/ip)
- 源ip
- 源端口
- 目标ip
- 目标端口
socket的通信流程图
HTTP协议解读
http协议属于应用层协议,也是离数据最近的一层。
http发送是以报文的形式发送,报文的每一个地段都是ASCII码串。
Http请求报文,由4部分组成,请求行,请求头部,空行,请求体。
请求行
- 请求方法:GET,POST,HEAD(只返回响应头),PUT等
- URL:www.baidu.com
- 版本协议:HTTP/1.1
请求头
键值对的形式
- User-Agent:产生请求的浏览器类型。
- Accept:客户端可识别的内容类型列表。
- Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
- Accept-Language:客户端可接受的自然语言。
- Accept-Encoding:客户端可接受的编码压缩格式。
- Accept-Charset:可接受的应答的字符集。
- connection:连接方式(close 或 keepalive)。
- Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie。
空行
分割请求头和请求体的作用,表示接下来的内容为请求体。
请求体
主要是http请求的参数,GET请求中不需要这部分内容。
实例:username=11111&password=00000
这部分内容在GET请求中是加在URL后的。
响应报文
响应报文跟请求报文差不多,状态行,响应头,空行,响应体。
状态行
状态码:三位数字
最后
由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
mg-lESemb0I-1715335464594)]
[外链图片转存中…(img-WsMeMafc-1715335464595)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!