Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: взаимодСйствиС процСссов». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 110

Автор Уильям БтивСнс

 AUTH_REJECTEDCRED = 2, /* ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡Π°Ρ‚ΡŒ сСанс Π·Π°Π½ΠΎΠ²ΠΎ */

 AUTH_BADVERF = 3, /* ошибка Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма) */

 AUTH_REJECTEDVERF = 4, /* ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ устарСли ΠΈΠ»ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Ρ‹ */

 AUTH_TOOWEAK = 5, /* запрос ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ систСмой бСзопасности */

 /* ошибки ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° */

 AUTH_INVALIDRESP = 6, /* Ρ„Π°Π»ΡŒΡˆΠΈΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ */

 AUTH_FAILED = 7 /* ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° нСизвСстна */

};

union rejected_reply switch (reject_stat stat) {

case RPC_MISMATCH:

 struct {

  unsigned int low; /* наимСньший Π½ΠΎΠΌΠ΅Ρ€ вСрсии RPC */

  unsigned int high; /* наибольший Π½ΠΎΠΌΠ΅Ρ€ вСрсии RPC */

 } mismatch_info;

case AUTH_ERROR:

 auth_stat stat;

};

Рис. 16.7. ΠžΡ‚Π²Π΅Ρ‚ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π² Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΠ΅ UDP

16.10. РСзюмС

БрСдства Sun RPC Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ распрСдСлСнныС прилоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… клиСнтская Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΠ·Π»Π΅, Π° сСрвСрная β€” Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» спСцификации RPC, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния этих ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ функция main ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ сСрвСра, Π° ΠΏΠΎΡ‚ΠΎΠΌ сами эти ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° выглядит Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½Π° просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ сСрвСра, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΈΡ… скрытоС взаимодСйствиС ΠΏΠΎ сСти обСспСчиваСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ RPC.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° rpcgen являСтся ΠΊΡ€Π°Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ RPC. Она считываСт Ρ„Π°ΠΉΠ» спСцификации ΠΈ создаСт Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ сСрвСра, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ XDR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ прСобразования Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° XDR Ρ‚Π°ΠΊΠΆΠ΅ являСтся Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ процСсса. XDR опрСдСляСт стандарт ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ систСмами, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ†Π΅Π»ΠΎΠ³ΠΎ, порядок Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈ Ρ‚. ΠΏ. Как ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, XDR ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ RPC для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² машинно-нСзависимом стандартном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ (сокСты, XTI, дискСты, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диски ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ).

Π’ Sun RPC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ свой стандарт имСнования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. КаТдой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ присваиваСтся 32-разрядный Π½ΠΎΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, 32-разрядный Π½ΠΎΠΌΠ΅Ρ€ вСрсии ΠΈ 32-разрядный Π½ΠΎΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» с сСрвСром RPC Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ отобраТСния ΠΏΠΎΡ€Ρ‚ΠΎΠ² Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (RPCBIND). Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹ RPC ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ TCP ΠΈ UDP ΠΊ своим ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ эти ΠΏΠΎΡ€Ρ‚Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ отобраТСния ΠΏΠΎΡ€Ρ‚ΠΎΠ², указывая Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ вСрсий. ΠŸΡ€ΠΈ запускС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ RPC связываСтся с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ отобраТСния ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΡƒΠ·Π»Π°, Π³Π΄Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ сСрвСр RPC, ΠΈ выясняСт Π½ΠΎΠΌΠ΅Ρ€ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π΅ΠΌΡƒ ΠΏΠΎΡ€Ρ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ связываСтся с самим сСрвСром ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ TCP ΠΈΠ»ΠΈ UDP.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ RPC Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ сСрвСры RPC ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ всС приходящиС запросы. Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ написанию собствСнного прилоТСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр с использованиСм сокСтов ΠΈΠ»ΠΈ XTI. Π’ Sun RPC ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: аутСнтификация Unix (прСдоставляСтся имя ΡƒΠ·Π»Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹), аутСнтификация DES (основанная Π½Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ с сСкрСтным ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ) ΠΈ аутСнтификация Kerberos.

ПониманиС стратСгии Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠ² ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ ΠΏΠ°ΠΊΠ΅Ρ‚Π° RPC Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ использовании RPC (ΠΊΠ°ΠΊ ΠΈ любой Ρ„ΠΎΡ€ΠΌΡ‹ сСтСвого программирования). ΠŸΡ€ΠΈ использовании Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ транспортного ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ TCP, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ RPC Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ потСря ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° транспортном ΡƒΡ€ΠΎΠ²Π½Π΅. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ транспортный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ UDP, ΠΏΠ°ΠΊΠ΅Ρ‚ RPC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π° Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρƒ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ RPC для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° соотвСтствиС ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΌΡƒ запросу. 

Π›ΡŽΠ±ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отнСсСн ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ Β«Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½Β», Β«Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½Β» ΠΈΠ»ΠΈ Β«Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½Β». Для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² этот вопрос ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½ΠΎ ΠΏΡ€ΠΈ использовании RPC эту Ρ€Π°Π·Π½ΠΈΡ†Ρƒ слСдуСт ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ.

Sun RPC β€” это большой ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΈ ΠΌΡ‹ лишь Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ обсудили особСнности Π΅Π³ΠΎ использования. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ свСдСний, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² этой Π³Π»Π°Π²Π΅, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ достаточно для написания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. ИспользованиС rpcgen скрываСт ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ДокумСнтация Sun описываСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ кодирования RPC β€” ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ интСрфСйс, Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, срСдний ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ экспСртов ΠΈ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π½ΠΎ эти ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ достаточно бСссмыслСнны. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ RPC β€” 164, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

β–  11 auth_ (аутСнтификация);

β–  26 clnt_ (клиСнтскиС);

β–  5 pmap_ (доступ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ отобраТСния ΠΏΠΎΡ€Ρ‚ΠΎΠ²);

β–  24 rpc_ (ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния);

β–  44 svc_ (сСрвСрныС);

β–  54 xdr_ (прСобразования XDR).

Для сравнСния ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ интСрфСйсы сокСтов ΠΈ XTI содСрТат ΠΏΠΎ 25 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° интСрфСйсы Π΄Π²Π΅Ρ€Π΅ΠΉ, ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний Posix ΠΈ System V, сСмафоров ΠΈ раздСляСмой памяти содСрТат ΠΏΠΎ 10 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. 15 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² стандартС Posix, 10 β€” для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с условными ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. 11 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ чтСния-записи Posix ΠΈ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ записСй fcntl.

УпраТнСния

1. ΠŸΡ€ΠΈ запускС сСрвСр рСгистрируСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ отобраТСния ΠΏΠΎΡ€Ρ‚ΠΎΠ². Π§Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ сСрвСра, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, клавишСй Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°? Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π½Π° этот сСрвСр впослСдствии ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°?

2. ΠšΠ»ΠΈΠ΅Π½Ρ‚ взаимодСйствуСт с сСрвСром RPC ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UDP, ΠΈ кэш Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½. ΠšΠ»ΠΈΠ΅Π½Ρ‚ посылаСт запрос Π½Π° сСрвСр, Π½ΠΎ сСрвСру трСбуСтся 20 сСкунд Π΄ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚ посылаСт запрос ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 15 сСкунд, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ запуску ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ сСрвСра. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ сСрвСра?

3. Π’ΠΈΠΏ XDR string всСгда кодируСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ напишСм char с[10] вмСсто string s<10>?

4. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ string Π² листингС 16.11 со 128 Π½Π° 10 ΠΈ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ write. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚? Π£Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ сравнитС Ρ„Π°ΠΉΠ» data_xdr.с с Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан, ΠΊΠΎΠ³Π΄Π° Π΄Π»ΠΈΠ½Π° Π±Ρ‹Π»Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°. Π§Ρ‚ΠΎ измСнилось?

5. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ xdrmem_create (Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π°) Π² листингС 16.13 Π½Π° 50 ΠΈ посмотритС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

6. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 16.5 ΠΌΡ‹ описали Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ кэша ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ использовании ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° UDP. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный кэш Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°. О Ρ‡Π΅ΠΌ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΈ ΠΊΠ°ΠΊ Π²Π΅Π»ΠΈΠΊ этот кэш Ρƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TCP? (Подсказка: ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP опрСдСляСт, Ρ‡Ρ‚ΠΎ принята копия ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π½Π΅Π΅ Π΄Π°Π½Π½Ρ‹Ρ…?)

7. Π•ΡΡ‚ΡŒ ΠΏΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись Π² кэшС сСрвСра. Π’ ΠΊΠ°ΠΊΠΎΠΌ порядкС слСдуСт ΠΈΡ… ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство сравнСний?

8. ΠŸΡ€ΠΈ просмотрС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tcpdump Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° 16.5, Π³Π΄Π΅ использовался TCP, ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ запроса 48 Π±Π°ΠΉΡ‚, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π° 32 Π±Π°ΠΉΡ‚ (Π±Π΅Π· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² TCP ΠΈ IPv4). ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ этот Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ· рисунка 16.3. Каков Π±Ρ‹Π» Π±Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ использовании UDP вмСсто TCP?

9. ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ RPC Π² систСмС, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ сСрвСра, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²? Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΈ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 16.2? 

10. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ read ΠΈΠ· листинга 16.19 ΠΌΡ‹ выдСляли мСсто ΠΏΠΎΠ΄ Π±ΡƒΡ„Π΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считывался Ρ„Π°ΠΉΠ», ΠΈ этот Π±ΡƒΡ„Π΅Ρ€ содСрТал ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ vstring_arg. Но Π³Π΄Π΅ хранится строка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ vstring_arg? Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ вашС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

11. Sun RPC опрСдСляСт Π½ΡƒΠ»Π΅Π²ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 0 (ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΌΡ‹ всСгда Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ с 1, ΠΊΠ°ΠΊ Π² листингС 16.1). Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, любая Π·Π°Π³Π»ΡƒΡˆΠΊΠ° сСрвСра, созданная rpcgen, автоматичСски опрСдСляСт эту ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ (Π² Ρ‡Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, посмотрСв тСкст любой Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ, созданной для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²). НулСвая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚. Часто ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра ΠΈ измСрСния скорости ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° сСрвСр ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Но Ссли ΠΌΡ‹ посмотрим Π½Π° Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ Π½Π΅ содСрТится Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ для этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ clnt_call ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π΅ для Π²Ρ‹Π·ΠΎΠ²Π° Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ для любого сСрвСра этой Π³Π»Π°Π²Ρ‹.

12. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² Ρ‚Π°Π±Π» А.1 Π½Π΅Ρ‚ записи для сообщСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 65536 для Sun RPC ΠΏΠΎΠ²Π΅Ρ€Ρ… UDP? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅Ρ‚ записСй для сообщСний Π΄Π»ΠΈΠ½ΠΎΠΉ 16384 ΠΈ 32768 Π² Ρ‚Π°Π±Π». А.2 для Sun RPC ΠΏΠΎΠ²Π΅Ρ€Ρ… UDP?

13. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° xdr_free ΠΈΠ· листинга 16.19 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

for(;;) {