计算机网络的各种基本概念总结(七层模型,TCP,HTTP,socket,RPC 等)

结构模型篇

OSI 网络结构的七层模型

第七层:应用层

定义了用于在网络中进行通信和数据传输的接口 - 用户程式;提供标准服务,比如虚拟终端、文件以及任务的传输和处理;

第六层:表示层

掩盖不同系统间的数据格式的不同性; 指定独立结构的数据传输格式; 数据的编码和解码;加密和解密;压缩和解压缩

第五层:会话层

管理用户会话和对话; 控制用户间逻辑连接的建立和挂断;报告上一层发生的错误

第四层:传输层

管理网络中端到端的信息传送; 通过错误纠正和流控制机制提供可靠且有序的数据包传送;提供面向无连接的数据包的传送;

第三层:网络层

定义网络设备间如何传输数据;根据唯一的网络设备地址路由数据包;提供流和拥塞控制以防止网络资源的损耗

第二层:数据链路层

定义操作通信连接的程序;封装数据包为数据帧;监测和纠正数据包传输错误

第一层:物理层

定义通过网络设备发送数据的物理方式;作为网络媒介和设备间的接口;定义光学、电气以及机械特性。

五层结构

五层结构其实是把七层结构的应用层、表示层、会话层合在一起,统一叫做应用层。

协议篇

TCP 协议

TransmissionControl Protocol,传输控制协议,又叫三次握手协议,建立 TCP 连接时需要经过三次握手,关闭 TCP 连接时需要四次握手。

TCP 协议是传输层协议,是面向连接的协议。

UDP 协议

UserDatagram Protocol, 用户数据报协议,UDP 是传输层协议,面向数据报,不提供可靠性,没有三次握手,不保证数据到达,没有超时重发,传输速度非常快。

IP 协议

InternetProtocol,网络互连协议,规定了网络上计算机通信时的规则。

TCP/IP 协议

和 TCP 协议不同,TCP/IP 协议是一个协议族,包含了应用层,传输层,网络层的很多协议。

应用层:HTTP 协议,FTP 协议,SNMP 协议,TELNET 协议。

传输层:TCP 协议,UDP 协议。

网络层:IP 协议,ICMP 协议,ARP 协议。

HTTP 协议

HTTP 协议是超文本传送协议 (HyperText TransferProtocol) 的缩写.

HTTP 协议是应用层协议。

HTTP2.0

HTTP2.0 使用了多路复用技术,可以在一个连接中并发处理多个请求,每个请求都有一个 id。另外在 HTTP1.1 的基础上进行了很多优化和改进,大幅提高了性能。

HTTP2.0 是向下兼容的。

WebSocket 协议

WebSocket 协议是应用层协议,和 socket 不是一回事。层级划分上来说,WebSocket 协议和 http 协议一样都是基于 TCP 协议,用来传输数据的。

WebSocket 协议依赖 HTTP 协议进行第一次握手,然后就直接从 TCP 通道传数据,不再需要 HTTP 协议。

基于 WebSocket 建立的连接是一种全双工的连接,连接双方没有主次关系,任何一方都可以主动向另一方发起请求,是一种真正的持久连接,这一点和 HTTP 协议的长连接或者轮询连接是不一样的。

连接篇

HTTP 连接

基于 HTTP 协议,采用请求 - 响应机制,需要客户端先发消息给服务端,而服务端无法主动发消息给客户端。

HTTP 连接中的长连接和短连接都是基于 TCP 连接的长连接和短连接。

http 连接分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。

HTTP 连接中的长连接:

从 HTTP1.1 开始,默认使用长连接,支持的方法是默认在请求头中添加:”connection:keep-alive”。有些情况比如服务端连接次数过多时,在服务端给客户端返回的内容里面会加入这么一条:Connection:close”, 表示连接已经被关闭。除了 Connection:keep-alive 之外,还会设置 Keep-alive:timeout=20,表示 TCP 连接保持 20 秒。

注意:HTTP 的长连接并不是真正的持久连接,只是可以在一次连接时效内处理多个请求,每次请求都是需要带着请求头的,这一点和全双工的 WebSocket 是不同的。

有的文章中讨论的 HTTP 连接其实指的是 HTTP 的短连接。

TCP 连接

TCP 协议下可以建立长连接或者短连接,长连接和短连接在建立连接的时候都需要 3 次握手,不同之处在于,短连接在传送完信息之后连接就会关闭,长连接则不会立即关闭。

socket 篇

socket 概念

socket 的中文名字是套接字,是支持 TCP/IP 协议的网络通信的基本操作单元。形象的来说就是 TCP/IP 网络中建立连接的两端。

socket 位于应用层和传输层之间,算是一个抽象层,是对 TCP/IP 协议的封装并抽象出了一组接口,供应用层调用。

传输层的 TCP 协议和 UDP 协议 socket 都可以用,如果一个 socket 连接基于 TCP 协议,那么建立 socket 连接的时候也需要三次握手。

socket 本身不是协议。

从设计模式的角度来说,socket 属于门面模式。

就像用 PID 来区分系统内部的进程一样,socket 可以用来区分网络上的进程。socket 用以下五种信息来标识网络的进程:连接使用的协议,本机 IP,本地进程的端口,远程主机 IP,远程进程端口。

socket 连接

socket 作为套接字,只是网络通信的两端,本身没有连接的概念,平时所谓的 socket 连接,往往指的都是 HTTP 的长连接。

为了维持连接,一般需要发送心跳信息,信息格式随意,只要是双方都支持的格式就可以。

建立 socket 连接

1,socket 连接建立之前,需要有一对套接字,客户端上的客户端套接字 ClientSocket,服务端上的服务端套接字 ServerSocket。

2,服务器监听。服务端套接字在监听状态下不指定具体的客户端套接字,等待客户端的连接。

3,客户端发起请求。

4,连接确认。服务端响应客户端请求,建立一个新的线程,把服务端套接字发给客户端,客户端确认后正式建立连接。此时建立的连接是长连接,不会因为传送完信息就自动断开。

服务和接口篇

HTTP 接口

HTTP 接口基于 HTTP 协议,特点是简单,开发方便,可以传输 JSON 或 XML 格式的信息。

RPC

RPC 是 Remote Procedure Call 的缩写,即远程过程调用。

RPC 协议是 Remote Procedure CallProtocol,远程过程调用协议。

RPC 服务给开发者的感觉就是:像本地调用一样进行远程调用。

RPC 服务的四部分:

Client,服务调用方。

Client Stub,存放服务端的地址,打包客户端请求并发送给服务端。

Server,服务提供方。

Server Stub,接收客户端请求,解包,调用本地方法。

RPC 服务的运作模式

对 java 来说,RPC 服务一般需要声明一些接口,这些接口需要进行封装(比如打成 jar),服务端引用这些接口,并提供对应的实现,客户端也引用这些接口,用来调用(形式上是本地调用)。RPC 框架会完成从客户端调用到服务端接收处理,最后返回客户端的整个过程。

RPC 服务可以以 HTTP 协议为基础,也可以以 socket 为基础。多数情况下讨论的 RPC 服务都是以 socket 为基础的。

RPC 服务可以使用同步调用,也可以使用异步调用。

RPC 服务的特点

RPC 基于 socket,socket 基于 TCP 协议,比 http 服务少了应用层、表示层、会话层,比 http 服务快一点。

socket 往往使用 HTTP 长连接,连接建立之后不需要三次握手,比 HTTP 协议短连接的接口要快。

可以有注册中心,方便监控、发布、下线接口。

开源的 RPC 框架举例

1,gRPC,Google 开源的 RPC 框架,基于 HTTP2.0 协议,支持多种编程语言,底层是 Netty 框架。

2,Thrift,FaceBook 开源的 RPC 框架,支持多种编程语言。

3,Dubbo,阿里巴巴开源的 RPC 框架,在 java 上使用,接口使用 java 的 interface,依托 Spring 框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值