RPC协议

问题一:如何规定远程调用的语法?客户端如何告诉服务端,我是一个加法,而另一个是乘法。我是用字符串“add”传给你,还是传给你一个整数,比如 1 表示加法,2 表示乘法?服务端该如何告诉客户端,我的这个加法,目前只能加整数,不能加小数,不能加字符串;而另一个加法“add1”,它能实现小数和整数的混合加法。那返回值是什么?正确的时候返回什么,错误的时候又返回什么?问题二:如果传递参数?我是先传两个整数,后传一个操作符“add”,还是先传操作符,再传两个整数?是不是像咱们数据结构里一样,如果都是 UDP,想要实现一个逆波兰表达式,放在一个报文里面还好,如果是 TCP,是一个流,在这个流里面,如何将两次调用进行分界?什么时候是头,什么时候是尾?把这次的参数和上次的参数混了起来,TCP 一端发送出去的数据,另外一端不一定能一下子全部读取出来。所以,怎么才算读完呢?问题三:如何表示数据?在这个简单的例子中,传递的就是一个固定长度的 int 值,这种情况还好,如果是变长的类型,是一个结构体,甚至是一个类,应该怎么办呢?如果是 int,不同的平台上长度也不同,该怎么办呢?在网络上传输超过一个 Byte 的类型,还有大端 Big Endian 和小端 Little Endian 的问题。假设我们要在 32 位四个 Byte 的一个空间存放整数 1,很显然只要一个 Byte 放 1,其他三个 Byte 放 0 就可以了。那问题是,最后一个 Byte 放 1 呢,还是第一个 Byte 放 1 呢?或者说 1 作为最低位,应该是放在 32 位的最后一个位置呢,还是放在第一个位置呢?最低位放在最后一个位置,叫作 Little Endian,最低位放在第一个位置,叫作 Big Endian。TCP/IP 协议栈是按照 Big Endian 来设计的,而 X86 机器多按照 Little Endian 来设计的,因而发出去的时候需要做一个转换。

此文章为10月Day2学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。

你可能感兴趣的:(网络协议,网络协议,网络)