OSI 七层模型

物理层 -> 数据链路层 -> 网络层 -> 传输层 -> 会话层 -> 表示层 -> 应用层

每一层只专注做一件事,每一层都需要使用下一层提供的功能,但是比较复杂不实用,而且功能会在上层重复复现,运行效率很低层次多。

HTTP

基于 TCP, 端口号是 80,http 请求由请求行(Method Request-URI HTTP-Version CRLF)、请求头、请求体组成。

GET 通过 URL 传输数据,通过历史记录,缓存很容易查到数据信息,POST 通过请求体传输数据因为在请求主体内,所以有一定的安全性保证。

http1 是文本协议,而 http2.0 是一个二进制协议,二进制帧中标识了属于哪个 request,使得网络传输变得十分灵活。

HTTPS

端口号是 443,需要到 CA 申请证书。

数据使用对称加密传输,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输。

对称和非对称加密

SSL

安全套接层协议,对网络连接进行加密。

TLS

安全传输层协议,对网络连接进行加密,它建立在 SSL 3.0 协议规范之上,但是它们所支持的加密算法不同,所以不能互操作。

TCP/IP 四层模型

目前被广泛采用的一种模型,是七层模型的精简版。

网络接口层(以太网) -> 网络层 (IP,路由器)-> 传输层(TCP,UDP) -> 应用层(HTTP,FTP,SSH)

IP 协议

IP 协议为了完成不同主机的通信,通过IP地址,IP 协议就能够帮我们把一个数据包单向发送给对方。

TCP 传输控制协议

TCP协议 在 IP 协议的基础上,位于IP层之上,应用层之下的中间层,提供可靠的连接(传输带有回执信息),系统资源要求较多,有序传输,适合大量的数据,传输速度一般,全双工(可以同时进行双向传输 : A→B B→A)。

三次握手

TCP 的连接建立需要客户端和服务器总共发送3个包,执行 connect() 操作产生挥手操作。

第一次握手 - 客户端发送一个标志位(SYN 同步序列号)1的包,客户端进入SYN_SEND状态;

第二次握手 - 服务器接收后,发送回确认包(ACK 报头的控制位)1,服务器端进入SYN_RCVD状态;

第三次握手 - 客户端再次发送确认包(ACK)1,SYN标志位为0,客户端进入 established 状态,服务器接收后,也进入 established 状态,TCP 握手结束。

缺点

慢,效率低,占用系统资源高,易被攻击,TCP在传递数据之前,要先建连接,消耗时间,而且在数据传递时,确认、重传、拥塞等机制都会消耗大量的时间,维护传输连接会占用系统的CPU、内存等资源,三次握手机制,这些也导致TCP容易被人利用,比如DOS、DDOS、CC等攻击。

案例

电子邮件,文件传输,浏览器,远程登录。

四次挥手

TCP 的连接的拆除需要发送四个包,客户端或服务器均可主动发起挥手动作,执行 close() 操作产生挥手操作。

第一次挥手 - 假设是客户端关闭连接,客户端先发送一个标志位(FIN)1的包,进入 FIN_WAIT_1 状态;

第二次挥手 - 服务器接收后发送一个确认包,进入 CLOSE_WAIT 状态,客户端接收到这个包后,进入 FIN_WAIT_2 状态,等待服务器关闭;

第三次挥手 - 服务器端准备好关闭连接,向客户端发送结束连接请求,FIN设置为1,服务端进入 LAST_ACK 状态;

第四次挥手 - 客户端接收到来自服务器的关闭请求,发送一个确认包,并进入 TIME_WAIT 状态,等待可能出现的要求重传的 ACK 包;

       服务器端接收到这个确认包之后,关闭连接,客户端进入 CLOSED 状态后,没有收到服务器端的消息,会认为服务器端已正常关闭,也关闭连接,进入 CLOSED 状态。

UDP 用户数据报协议

无需建立连接,“ping”命令的原理就是通过 udp 向对方主机发送数据,系统资源要求少,可能丢包,无序传输,适合轻量级数据,传输速度较快,可多对多传输。

缺点

udp没有 tcp 的确认等机制,被攻击者利用的漏洞就要少一些,在数据传递时,如果网络质量不好,就会很容易丢包。

案例

即时通讯(qq),语言 视频电话。

Socket 套接字(IP 地址+端口号)

基于 TCP/UDP 的 API框架,Stream Socket 基于 TCP 实现,Datagram Socket(无连接)基于 UDP 实现 ;

Socket 属于一个抽象层(应用层与TCP/IP协议中间),是一组接口,向应用层进程发送报文来传送数据包。

在 Linux 系统中,有万物皆文件的说法,也就是虚拟文件系统(Virtual File System);

Socket 在 Linux 系统中也看作是一个虚拟文件,数据解构中包含 ip 地址端口等信息,通过这些信息,可以在 VFS 系统中定位到这个 Socket 文件,然后进行读写达到通信的目的。

心跳包

客户端每隔一段时间,向服务端发送一个心跳包,服务端受收到包以后,会更新客户端最近一次在线时间。一旦服务端超过规定时间没有接收到客户端发来的包,则视为掉线。

WebSocket

h5的一种双向通讯协议(可以在浏览器跟服务器之间双向发送或接受信息),基于 TCP/IP 协议的应用层;

首先通过 tcp 的三次握手,在建立握手时,数据是通过HTTP传输的,成功后通过TCP进行通信。

 Okhttp 自带有心跳机制,pingInterval(30L, TimeUnit.SECONDS),一般30秒发送一次心跳。

心跳会照成耗电,加重服务器压力,判定时间在30-40秒比较不错。如果要求高就10秒

thrift:Facebook 开源的一个高性能,轻量级 RPC 服务框架,是一套全栈式的 RPC 解决方案,包含序列化与服务通信能力,并支持跨平台/跨语言。

posted on 2022-03-24 11:00  翻滚的咸鱼  阅读(181)  评论(0编辑  收藏  举报