RPC 是什么?HTTP 是什么?
作为一个程序员,假设我们需要从A电脑的进程发送一段数据到B电脑的进程,我们一般会在代码中使用 Socket 进行编程。
此时,可选性一般就是 TCP 和 UDP 二选一,由于 TCP 可靠、UDP 不可靠,只要对可靠性有要求,一般就选 TCP 了。
Socket 本质是个代码库,我们需要先创建类似于:
其中 SOCK_STREAM
是指使用字节流传输数据。说白了就是 TCP 协议。
在定义了 socket
之后,我们就可以对这个 socket
进行操作。
比如使用 bind()
方法绑定 IP 端口;
用 connect()
方法发起建联,里面就包含了常见的 TCP 三次握手流程;
在建立连接之后就可以使用 send()
方法发送数据;
accept()
方法接收数据。
光这个“纯裸”的 TCP 连接就可以收发数据了,那是不是就够了?
不行。
八股文常背 TCP 有三个特点:面向连接、可靠、基于字节流。
这里关注“基于字节流”,字节流可以理解为双向通道里流淌的二进制数据,就是一堆“01”串。“纯裸”的 TCP 连接收发的这些“01”串是没有任何边界的,你无法知道一条完整消息的起始位置。