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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lkforce/article/details/79308906

结构模型篇


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框架举例

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

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

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

展开阅读全文

没有更多推荐了,返回首页