当前位置: 首页 > news >正文

了解RPC、HTTP、TCP

了解RPC、HTTP、TCP

TCP(Transmission Control Protocol):传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。

HTTP(Hyper Text Transfer Protocol):超文本传输协议,运行在TCP之上,是一种通用的、无状态的协议。

在了解TCP、HTTP之前,先熟悉下7层模型和4层模型。

图一

OSI 7层模型

应用层(Application Layer):为网络用户之间的通信提供专用的程序。

表示层(Presentation Layer):主要用于处理两个通信系统中数据或信息的表示方式。它包括数据格式交互,数据加密与解密,数据压缩与解压缩等功能。

会话层(Session Layer):主要功能是在不同的主机上组织各种进程进行会话,并管理数据交换。

传输层(Transport Layer):传送数据的单元是报文Message。向用户提供可靠的端到端的数据服务,透明的传送报文。

网络层(Network Layer):传输数据的单位是分组或包Packet,网络层的主要任务是通过路由算法,为数据包通过通信子网选择最合适的路径。
网络层要实现路由选择、拥塞控制和网络互连等功能。

数据链路层(Data Link Layer):传输数据的单位是帧Frame,采用差错控制和流量控制,使有差错的物理线路变成无差错的数据链路。

物理层(Physical Layer):传输数据的单位为比特bit。主要功能是利用物理传输介质为数据链路层提供物理连接,透明的传递比特流。

TCP/IP 4层模型

应用层(Application Layer):负责实现一切与应用程序相关的功能。一般是可见的,如利用FTP传输一个文件,请求一个和目标计算机的连接,在传输文件的过程中,用户和远程计算机交换的一部分是能看到的。

常见协议:

  • HTTP:超文本传输协议。

  • FTP:文件传输协议。

  • Telnet:远程终端协议。

  • SMTP:简单邮件传输协议。

  • DNS:域名服务器协议。

传输层(Transport Layer):负责提供可靠的传输服务。其功能包括:格式化信息流;提供可靠传输。

常见协议:

  • TCP:控制传输协议。

  • UDP:用户数据报协议。

网络层(Inter-network Layer):负责网络间的寻址。管理离散的计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法,确保信息包能正确到达目的机器。

常见协议:

  • IP:网际协议。

  • ICMP:Internet 控制消息协议。

  • ARP:地址解析协议。

  • RARP:反向地址解析协议。

网络接口层(Host-to-Net Layer):负责实际数据的传输。

常见协议:

  • Ethernet:以太网。

  • FDDI:光纤分布式数据接口。

  • PPP:点对点协议。

TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。

TCP三次握手、四次挥手

三次握手

一个正常的TCP连接需要进行三次握手。

第一次握手:客户端发送一个SYN请求报文,设置随机序列号为seq=x,并进入SYN_SENT(请求连接)状态。

第二次握手:当服务器收到该连接请求后,会发送一个SYN + ACK(x + 1)的响应报文,设置数据包的随机序列号为seq=y,此时服务器进入SYN_RECV(等待连接确认)状态。

第三次握手:客户端收到服务器的响应后,会给服务器返回一个ACK(y + 1)确认消息报文。此时连接建立完成,可以发送数据。

网图。图二

四次挥手

四次挥手(释放资源):

  • client 发送FIN 包;

  • server 回复FIN + ACK包;

  • server 再发送FIN;

  • client 回复ACK。

概念:

  • SYN: (同步序列编号,Synchronize Sequence Numbers)。

  • ACK: (确认编号,Acknowledgement Number)。

  • FIN: (结束标志,Finish)。

注:如果同一虚拟机内部应用调用,三次握手是纳秒级别的耗时,因为是在内存中完成的,会有用户态内核态的调用,但不涉及硬件物理网卡的耗时。

Socket

Socket的中文叫套接字或套接口。起源于UNIX。是针对TCP或UDP的具体接口实现。

Socket套接字是在应用层和传输层之间的一个抽象层,把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中的通信。

网图。图三

HTTP

HTTP是第7层(应用层)协议,它运行在TCP传输层协议之上。

HTTP长连接:复用tcp连接,节省tcp连接建立和断开的消耗。HTTP1.0默认短连接,HTTP1.1默认长连接,客户端和服务端的HTTP首部的Connection都要设置为keep-alive,才能支持长连接。

HTTP1.1/HTTP2.0区别:HTTP1.1基于文本格式传输数据,HTTP2.0采用二进制格式传输数据,多路复用,头部压缩。
HTTP1.1中,单个tcp连接,同一时间只能处理一个HTTP请求,请求会排队处理。可以建立多个tcp连接并发处理请求。

网图。图四

RPC

RPC是远程过程调用(Remote Procedure Call),是一种框架。RPC中可以使用HTTP作为通讯协议,通讯协议只是RPC中的一部分。RPC中还有序列化、反序列化等等。

RPC的本质是提供了一种轻量无感知的跨进程通信方式。

 

参考资料

1.《Red Hat Enterprise Linux 6.0系统管理》
2.《大学计算机基础》

相关文章:

  • Android集成IJKFFMPEG总结
  • 【二叉树】最长同值路径
  • 使用缓冲区提高并发
  • Windows10环境下Python 开发环境搭建
  • JavaEE TCP协议
  • 51单片机DS18B20温度报警器proteus仿真设计_可调上下限
  • SSRF漏洞
  • 猿创征文|平凡的应届生四年学习之路
  • mysql8忘记密码如何重置(禅道的mysqlzt服务和mysql服务冲突)
  • Nginx 配置 SSL(HTTPS)
  • 用css实现简单的动画——“奔跑的小子”(有知识梳理和图片)
  • macbook m1芯片 实现vscode下debug(解决无法读入的问题)
  • 前端:下载文件(多种方法)
  • 猿创征文|【JavaSE】 Collection集合全家桶
  • 【Coppeliasim+Add-on】附加组件-喷涂路径自动生成及喷涂仿真
  • JavaScript-如何实现克隆(clone)函数
  • (三)从jvm层面了解线程的启动和停止
  • 2019年如何成为全栈工程师?
  • es6(二):字符串的扩展
  • gcc介绍及安装
  • go append函数以及写入
  • MySQL-事务管理(基础)
  • Otto开发初探——微服务依赖管理新利器
  • Vue实战(四)登录/注册页的实现
  • webgl (原生)基础入门指南【一】
  • 聚簇索引和非聚簇索引
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 问题之ssh中Host key verification failed的解决
  • 阿里云ACE认证学习知识点梳理
  • ​flutter 代码混淆
  • $ git push -u origin master 推送到远程库出错
  • (9)STL算法之逆转旋转
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (javascript)再说document.body.scrollTop的使用问题
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (接口封装)
  • (数据结构)顺序表的定义
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • .Net - 类的介绍
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 调用php,php 调用.net com组件 --
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET微信公众号开发-2.0创建自定义菜单
  • @RestControllerAdvice异常统一处理类失效原因
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [20190401]关于semtimedop函数调用.txt
  • [C#]winform部署PaddleOCRV3推理模型
  • [C#基础]说说lock到底锁谁?
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用