开发者社区 > 博文 > 深入浅出RPC服务(二)不同层的网络协议
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

深入浅出RPC服务(二)不同层的网络协议

  • 冰雪****
  • 2023-07-12
  • IP归属:北京
  • 10480浏览

    导读:✍️

    本系列文章从RPC产生的历史背景开始讲解,涉及RPC核心原理、RPC实现、JSF的实现等,通过图文类比的方式剖析它的内部世界,让大家对RPC的设计思想有一个宏观的认识。 
    作者:王禹展 部门:京东健康-技术产品部-供应链研发部-2B平台研发组

    上篇文章:深入浅出RPC服务(一)RPC来源-论文解读

    网络协议

    为什么需要网络协议?

    网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

    网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。就像我们说话用某种语言一样,在网络上的各台计算机之间也有一种语言,这就是网络协议,不同的计算机之间必须使用相同的网络协议才能进行通信。

    一次请求都需要用到那些协议?

    1. 要传输数据,首先如何知道对应的机器的地址?通过IP可以确认具体的机器(网络层的IP层协议)。
    2. 找到目标机器后,需要知道该机器上那个程序接受本次请求?通过端口就能确定具体的程序(传输层的TCP层协议)。
    3. 确定完程序后,怎么区分不同的请求,每一个请求如何关联对应的响应呢?(应用层的RPC协议)通过消息id区分。
    4. 以上这些最后是由物理层的光缆、电缆、无线信道等支持的,如何控制信号在物理层之上的传递,还需要PPP协议、ARP协议等。


    不同层的协议简介

    应用层的协议

    HTTP协议

    超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

    HTTPS协议

    全称:Hyper Text Transfer Protocol over SecureSocket Layer,是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

    RPC协议

    一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

    RTMP协议

    全称:Real Time Messaging Protocol(实时消息传输协议)。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。

    P2P协议

    点对点技术又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。P2P网络通常用于通过Ad Hoc连接来连接节点。这类网络可以用于多种用途,各种档案分享软件已经得到了广泛的使用。P2P技术也被使用在类似VoIP等实时媒体业务的数据通信中。

    DNS协议

    DNS是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统。DNS系统采用递归查询请求的方式来响应用户的查询,为互联网的运行提供关键性的基础服务。目前绝大多数的防火墙和网络都会开放DNS服务,DNS数据包不会被拦截,因此可以基于DNS协议建立隐蔽信道,从而顺利穿过防火墙,在客户端和服务器之间传输数据。

    GTP协议

    全称:GPRS隧道协议(GPRSTunnelingProtocol),可以分解成三种独立的协议,GTP-C(控制面)、GTP-U(用户面)及GTP'(计费传输)。GTP-C用于GPRS核心网络中,用于不同网络节点之间的信令数据。GTP-U 用于承载用户数据。 GTP可以用在UDP或TCP上,GTP v1仅用于UDP上。用于 GPRS2.5代通信技术)、UMTS3G移动通信技术)、LTE3G与4G技术之间的过渡) 和 5G 网络

    DHCP协议

    全称:Dynamic Host Configuration Protocol(动态主机配置协议),通常被应用在大型的局域网络环境中,主要作用是集中地管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

    其它协议

    FTP·、Gopher IMAP4 、 IRC  、 NNTP  、XMPP 、POP3 、SIP 、SMTP  、SNMP 、SSH 、TELNET 、RTCP  、RTP  、RTSP 、 SDP 、 SOAP 、STUN 、 NTP 、SSDP  、BGP等。

    传输层协议

    TCP传输控制协议

    全称:Transmission Control Protocol,是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

    网络层协议

    IP协议

    IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

    链路层协议

    PPP协议

    点对点协议(Point to Point Protocol,PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP-IP 协议集中它是一种用来同步调制连接的数据链路层协议OSI模式中的第二层),替代了原来非标准的第二层协议,即 SLIP。除了 IP 以外 PPP 还可以携带其它协议,包括 DECnet 和 Novell 的 Internet 网包交换协议(IPX)。

    每层协议之间的关系


    发送端的流程

    1. 发送端将用户数据抛给RPC层时,RPC协议将用户的数据(消息体)加上RPC头部,然后抛给下一层“传输层“
    2. ”传输层”收到“应用层”的数据后,不会考虑上一次的协议是啥,它会将整个传递进来的数据作为‘消息体’,加上TCP头部后继续向下一层“网路层”抛。
    3. ”网络层“收到数据后,也不会考虑上一次的协议是啥,会将整个传递进来的数据作为‘消息体’并加上IP头部,继续继续抛向下一层”数据链路层“。
    4. ”数据链路层“同样加上MAC头部,最后由物理层通过光电信号传输到接收端。

    接收端的流程

    1. 接受端收到数据后,”数据链路层“开始解析,识别以太网头部,取出数据后向上抛给”网络层“。
    2. ”网络层“识别IP头部后,取出数据,向上抛给”传输层“。
    3. ”传输层“收到数据后,识别TCP头部,取出数据后继续向上抛给”应用层“。
    4. ”应用层“识别RPC协议头部,最终取出发送端的用户数据。

    每层协议的设计

    TCP协议

    设计的目的

    在网络发展的过程中,IP协议提供了让彼此相连的主机之间能够进行数据传送。但是IP协议无法让接收信息的主机知道从远处传送来的数据究竟要给到哪一个进程进行处理。TCP(传输控制协议)就是为了解决进程间的通信问题而发展出来的协议。

    1. 源端口号和目标端口号:没有这两个端口号。数据就不知道应该发给哪个应用。
    2. 包的序列号:为什么要给包编号呢?是为了解决乱序的问题。不编好号怎么确认哪个应该先来,哪个应该后到呢。
    3. 确认序列号:发出去的包应该有确认,要不然我怎么知道对方有没有收到呢?如果没有收到就应该重新发送,直到送达。这个可以解决不丢包的问题。
    4. 状态位:SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。
    5. 窗口大小:TCP 要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处理能力,发的太快处理不过来,发的太慢就会有空闲,使用窗口大小来达到一个最佳的处理水平。






    陷入代码的深海,等小编爬上岸就能继续编写了,各位大佬请稍等....