Задний план
Любая программа клиентских сокетов (C) через TCP/IP выглядит так:
/* Socket creation */ sockfd = socket(AF_INET, SOCK_STREAM, 0); /* Do nothing for dynamic address assignment to that client socket */ /* Identify the server, we use to send a request for connection */ bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); inet_pton(AF_INET, serv_ip, &servaddr.sin_addr); /* Connect request to listening socket of server */ ret_val = connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); /* * Communication code ================== Here comes the code for application layer protocol using read() & write() call that follow FTP, HTTP, SMTP specific rules. * */Любая программа серверных сокетов (C) через TCP/IP выглядит так:
/* Create listen socket */ listfd = socket(AF_INET, SOCK_STREAM, 0); /* Assign protocol family(AF_INET) & address to that socket */ bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(8004); retval = bind(listfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); /* Enable the communication on that socket */ listen(listfd, 5); /* with a specific server model(iterative/threaded/multiprocess/..) accept client request */ connfd = accept(listfd, (struct sockaddr *) &cliaddr, &clilen); /* * Communication code ================== Here comes the code for application layer protocol using read() & write() call that follow FTP, HTTP, SMTP specific rules. * */
Ранние протоколы между хостами были ориентированы на взаимодействие человека с компьютером, например: электронная почта 1971 г., FTP и совместимый Telnet: 1973 г.
Был интерес к протоколу между приложениями — RFC 707, в котором описывается способ выполнения вызова сетевой процедуры.
RPC — это передача структуры данных с клиентской заглушки на серверную через libnsl.so.1 в мире ansi C (скажем). Структура данных может содержать сообщение для операции добавления (скажем), как показано ниже.
-------------
| proc: "add" |
-------------
| int: val(i) |
-------------
| int: val(j) |
-------------
Типичный поток RPC для удаленной add(i, j) операции,
Клиент и сервер могут различаться представлениями данных (с прямым порядком байтов и с прямым порядком байтов). Представление внешних данных (add_xdr.c) — это абстракция данных, необходимая для машинно-независимой связи.
Является ли RPC независимой от машины связью?
В мире RPC код обработки пакетов между клиентской заглушкой и серверной заглушкой ведет себя аналогично клиентскому сокету и серверному сокету ? с разницей в коммуникационном коде, несущем структуру данных, содержащую информацию о процедуре
add(i, j)
