概述
为了使全球范围内不同的计算机厂家能够相互之间能够比较协调的进行通信,这个时候就有必要建立一种全球范围内的通用协议,以规范各个厂家之间的通信接口,这就是网络七层模型的由来。
网络七层模型图解:
(高三层)
应用层:为应用进程提供网络服务。 表示层:数据格式转换、加密、压缩等。 会话层:建立、管理、终止应用进程之间的会话和数据交换。
传输层:TCP、UDP
(低三层)
网络层:网络路由选择、流量控制。(IP) 链路层:校验、确认、反馈、重发等机制保障数据传输稳定。 物理层:原始比特流的传输介质。(010101)
高三层通常我们也会看作一个应用层,高三层的功能通常被应用服务器实现,例如tomcat、nginx等
传输层主要定义了传输的协议,如TCP或者UDP,我们做应用开发基本也是只关注到这一层。
TCP\UDP
TCP协议
TCP协议(传输控制层协议),是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流服务。应用程序在使用TCP之前,必须建立TCP连接。
TCP协议中内容
- 数据和头部信息; 源端口号16位和目的端口号16位,tcp完成的事就是根据端口号找到应用 ,建立应用之间的连接;
- 确认序号、 序号都是32位 主要进行做占位
- 标志位 syn 建立连接 fin 关闭连接 ack 确认序号。 psh 有数据传输 rst 连接重置 用来建立连接使用保证连接能够正常建立和取消
TCP握手机制
通过请求头标志位建立连接 确认网络是通的,然后可以建立连接
- 客户端syn_send等待确认 客户端发送信息 头部 syn=1 seq=1 建立连接 客户端发送要准备建立连接
- 服务端返回 syn=1 ack=1 携带着, ack_seq=x+1; syn_recv收到请求等待确认 确认客户端是否可以建立连接
- 客户端established 发送seq=x+1 ack_seq=y+1 发送给服务段建立起连接。 发送给服务端建立起来了
请求头标志位去断开连接,断开掉
- 客户端等待确认状态 头部标志位 fin=1 seq=u
- 服务端 处于半开闭状态 ack=1 seq=v,ack_seq=u+1 客户端处于等待释放状态
- 服务端处理数据,等待确认状态 fin=1 ack=1 seq=w ack_seq=u+1
- 客户端发起 seq=u+1 ack_seq=w+1 ack=1 确定好服务端断开连接
UDP协议
用户数据协议UDP是Internet传输层协议。提供、无连接、不可靠、数据报尽力传输服务。
少了标志位和建立连接得步骤,这样数据量更新,并且建立连接得时间更短;控制在源端口和目的端口号
在UDP上构造应用,关注下面几点:
- 应用进程更容易控制发送什么数据及何时发送
- 无需建立连接
- 无连接状态
- 首部开销小
在头部少了标志位,来校验连接是否正常,因此说它不可靠,但是可以在应用层做处理,对于一些视频流的传输,可以允许视频流有少量的丢失,因此基本都采用udp进行视频流传输。
TCP和UDP对比
TCP进行多建立连接,通过头部标志位,进行三此握手和四次挥手,才有了他的特性,安全可靠,但是相对UDP来说会导致速度变慢,并且资源占用多。
UDP
UDP的报文比TCP简单,首部开销小。 UDP无需建立连接,也没有连接状态,只要知道目标端口就可以发送,至于收没收到不关心... 和TCP相比UDP更快,资源占用更小,但是不可靠。 UDP适合对数据可靠性要求不高的场景或者实时场景,比如直播,视频,音频,及时更新数据。
Socket 通常我们网络编程都是用的Socket的api,Socket有面向tcp的或者udp的,也有直接面向网络层的接口。
《OKhttp手册》以上就是对网络七层模型TCP、UDP的一些解析与比较;这是OKhttp网络框架中学习的一小部分基础知识。有学习更多OKhttp网络框架意向的可以参考资料。
架构师的技能是慢慢积累的,尤其在程序员这一块。随着经验的增长和技术的学习才会出来一批资深架构。活在当下,才能抓住未来!架构师的技能是慢慢积累的,尤其在程序员这一块。随着经验的增长和技术的学习才会出来一批资深架构。活在当下,才能抓住未来!
网友评论