Upload
natalia
View
120
Download
2
Embed Size (px)
DESCRIPTION
Создание Сетевых Приложений в Среде Linux
Citation preview
Linux
2001
www.books-shop.com
32.973.26018.2.75
681.3.07
""
"" : [email protected], http://www.williamspublishing.com
, .
Linux. : . . . : "", 2001. 464 .: . : . .
ISBN 5845901936 (.)
Linux. , , . ,
( , HTTP), UDP . , TCP/IP, .
,
. Java C++.
RPC, SSL, IPv6.
, ,
.
32.973.26018.2.75
.
, ,
, SamsPublishing.
Authorized translation from the English language edition published by Sams Publishing Copyright 2001All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, elec
tronic or mechanical, including photocopying recording or by any information storage retrieval system, withoutpermission from the Publisher.
Russian language edition published by Williams Publishing House according to the Agreement with R&I En
terprises International, Copyright 2001
ISBN 5845901936 (.) "", 2001ISBN 0672319357 (.) Sams Publishing, 2001
www.books-shop.com
I. 23
1. 24
2. TCP/IP 41
3. Internet 58
4. 79
5. 99
II. 115 6. 116
7. : 131
8. 167
9. 188
10. 213
III. 231
11. 232
12. Java 248
13. C++ 263
14. 279
IV. 291
15. (RPC) 292
16. 308
17. , 326
18. 336
19. IPv6: IP 345
V. 357
. 358
. 379
. API 407
. 434
www.books-shop.com
19
I. 23
1. 24
27 : TCP/IP 28 : 29
socket() 30 32 35 39
: . 40
2. TCP/IP 41IP 42
42 Internet , 43 45 46 46
IP 48 50
50 52
56 UNIX 56: IP 57
3. Internet 58 59
version 61 header_len 61 serve_type 62 ID 62 dont_frag, more_frag frag_offset 62 time_to_live (TTL) 63 protocol 63 options 64 data 64
64 65 67
75 tcpdump 76 77: 78
4. . 79, 80
80 80 82
www.books-shop.com
: HTTP , 84 HTTP 84 HTTP 84
, 85 , 86 87/ 88
89 90 92 93
UDP 94 UDP 94 95 . 96 96 97
: 97: 98
5. 99
100 100 102 103
. 104 OSI 105
1: 105 2: ' 106 3: 107 4: 107 5: ' 107 6: 108 7: 108
Internet 108 1: 108 2: (IP) 109 2: (ICMP) 110 3: (UDP) 110 3: (TCP) 111 4: 112
OSI IP 112 113: 113
II. 115
6. 116 : ,' 117 118
119 121 122 123
124
www.books-shop.com
? 125 ? 125 ? 125 ? 125 ? 126 ? 126 ? 126 ? 126 ? 127
: HTTP 127: 130 7. : 131 : 132
134 135 136 136 139 _clone() 142 145
: 155 155 156 Pthreads 158 . 158
159 159 : 160
162 () 163 166 8. 167 : ? 168 ? 170 170 171 172
173 175 . 176
177 ' 179 180 181
poll() select() 182 185: 186 9. 188 189
189 191 193
www.books-shop.com
select() , , 195 ,. 195 select() 196 select() 197 198 199
200 201 IP 203 IPv6 205 TCP 206
206 : . 207 208 : 208
send() 208 recv() 209
209 212 10. 213 214 215 217
SIGPIPE 218SIGURG 219SIGCHLD 219SIGHUP 220SIGIO 220SIGALRM 220
221 221 ("") 221 223 , 223
223 224 224 225 226
227 228 228
229: 230
III. 231
11. 232 233
: 233 : 234 : 235 : 235
236
www.books-shop.com
236 237
238 238 239 240 241
241 241
241 242 242 242 242
243 ' . 243
243 243 244
. 244 244
245 245 245
246 246 246
: 247 12. Java 248 249
250 UDP 253 254
Java 256 256 257
. . . 258 258 . 259
259 259 260 261
262 ' , 262 13. C++ 263 C++? 264
264 264 ' 265 265
265 266
10
www.books-shop.com
267 269 271
274.! , 275
277 278
/ 278 278
: 278 14. 279 280
280 281 281 282 282 282 friend 283 283
284 284 284
285 285 286 286
287 287 288 288
: . 289
IV. 291
15. (RPC) 292 OSI 293 294
294 295
297 298 298 299
RPC rpcgen 300 rpcgen 300 300 302 304
305 305 305 306 306
11
%RRNVVKRS
: RPC 307 16. 308 309
309 310
Internet 310 311 311 TCP/IP 312
313 313 313 314 316
318 319 319 319
SSL 320 OpenSSL 320 SSL 321 SSL 323
: 324 17. , 326 327
IP 327 328 329
329 330 332 332 333 ' 334
: 335 18. 336 ' 337
ICMP 337 IP 337 338
338 339
339 ICMP 339 340 IP 341 341
ping 341 MyPing 342 MyPing 342
' 343: 344
12
www.books-shop.com
19. IPv6: IP 345 346
346 IPv6 . 346 IPv4 IPv6? 348
IPv6 348 348 349 IPv4 IPv6 349 IPv6 351 ICMPv6 352 352
IPv6 354 Linux 354
: 355
V. 357
. 358: socket() 359: socket() 363 364 Internet ( 100 ) 365 HTTP 1.1 366 ( get/setsockopt()) 368 372 ICMP ' 374 IPv4 375 IPv6 375Ko lCMPv6 376 IPv6 377 IPv6 378
. . 379
380socket() 380bind() 381listen() 382accept() 383connect() 384socketpair() 385
386send() 387sendto() 388sendmsg() 389sendfile() 390
recv() 391recvfrom() 393recvmsg() 394
395shutdown() 395
396htons(), htonl() 396ntohs(), ntohl() 397
13
www.books-shop.com
inet_addr() 397inet_aton() 398inet_ntoa() 399inet_pton() 399inet_ntop() 400
401getpeername() 401gethostname() 402gethostbyname() 403getprotobyname() 404
405setsockopt() 405getsockopt() 406
. API 407 408
fork() 408_clone() 409exec() 410sched_yield() 412wait(), waitpid() 413
415pthread_create() 415pthread_ join() 416pthread exit() 416pthread_detach() 417
418pthread_mutex_init(), pthread_mutex_destroy() 418pthread_mutex_lock(), pthread_mutex_trylock() 419pthread_mutex_unlock() ~ 420
421signal() 421sigaction() 422
sigprocmask() 423 424
bzero(), memset() 424fcntl() 425
pipe() 427poll() 427read() 429select() 430write() 432close() 433
. 434 C++ 435
Exception () 435NetException () 435
C++ 436SimpleString () 436HostAddress () 436
C++ 437Message ( ) 437TextMessage () 437
C++ 438
14
www.books-shop.com
Socket() 438SocketStream () 440SocketServer () 440SocketClient () 440Datagram () 441Broadcast () 441MessageGroup () 442
Java 442java.io.lOException () 442java.net.SocketException () 443
Java 443java.net.DatagramPacket () 443java.net.lnetAddress () 444
Java 444java.io.lnputStream ( ) 445java.io.ByteArraylnputStream () 445java.io.ObjectlnputStream () 445java.io.OutputStream ( ) 446java.io.ByteArrayOutputStream () 447java.io.ObjectOutputStream () 447java.io.BufferedReader () 448java.io.PrintWriter () 449
Java 450java.netSocket () 450java.net.ServerSocket () 451java.net.DatagramSocket () 452java.net.MulticastSocket () 453
454
15
www.books-shop.com
www.books-shop.com
1990 .
, ,
. 1988 .
. ,
BSD. , HewlettPackard, (PostScript PCL), LaserJet 4 . 8052,
.
UNIX, Linux, HPUX, Ultrix, SunOS System V. , ,
, .
, ,
, Java C++. 1998 .
Java Java. Nationwide Enterprise
.
www.books-shop.com
.
, ,
. , , . ,
Linux, ,
, . , ,
, .
www.books-shop.com
, , . , ,
. , , .
, , ,
.
Linux (
) . ,
, .
.
, , .
,
.
. , .
,
.
I, " " ,
, ,
.
II, " " , , .
III, " . .
IV, " " ,
, , IPv6 .
19
www.books-shop.com
V,""
, . ,
. .
Web , HTML PDF, RFC HTML.
. : ,
, . .
.
. . .
. "" , ,
.
. , ,
, . ,
. , , .
. , , , (, , API
). .
,
, .
, . , :
Java (
);
;
. (
). Linux
,
. , ,:
20
www.books-shop.com
, C++ Java;
;
;
.
,
. , , ,
, ,
. .
. ,
..
, .
Internet RFC (Request For Comments
). , , [RFC875].
21
%RRNVVKRS
www.books-shop.com
...
1.
2. TCP/IP
3. Internet
4.
5.
www.books-shop.com
... 27
: TCP/IP 28
: 29
: 40
1
www.books-shop.com
. ! . ! .
CMOS! ! ?, .
. ? , ?!
, . , . Internet ,
. , , ,
, , ..
. . , .
, , ? , :
;
, , ; , ,
;
, .
, , .
, . ,
( , ). ,
.
. , . . : () (). , , .
: , ( ). () (), . ,
(. /etc/services), , .
1. 25
www.books-shop.com
,
, , , , , : inetd . 127.0.0.1 (a ). , Linux , .
. . , : "
?" ,
. :
. ,
.
: , , . , (. 1.1). ,
. 1.1. ,
.1. . .
2. ().
. , ( 9, "
").
26 I.
www.books-shop.com
3. / ().
IP, . , IP ( 2, "TCP/IP").
4. / ().
. , .
5. (). : . ,
.
6. / ().
, , .
7. . , :
, .
:
.
. , UNIX UUCP (UNIXto
UNIX ). . , . ,
.
, .
.
. Socket API (Application ProgrammingInterface) .
,
. ,
.
. ,
.
1. 27
www.books-shop.com
.
7, " :
", "" 10," ".
.
, .
II, " ".
Internet . ,
. , . (). , ( )
, . . . .
:
TCP/IP
.
, .
. TCP/IP (Transmission Control Protocol/Internet Protocol)
.
,
.
, ,
. , . , .
TCP/IP : , , , . Socket API .
UNIX,
.
. , TCP/IP, . , , ,
, , on() (
) fopen () ( )
. (TCP/IP,
28 I.
www.books-shop.com
IPX, Rose) socket(). .
,
. ,
.
, .
, Internet, IP
, 32 . , , .
TCP/IP .
, . , ,
.
IP : [0255]. [0255].[0255].[0255],
123.45.6.78. 0 255 . ,
( IP 2, "TCP/IP"). :
[0255].[0255].[0255].[0255]:[065535]
, 128.34.26.101:9090 (IP 128.34.26.101, 9090)!
:
[0255].[0255].[0255].[0255].[065535]
, 64.3 .24.24.9999 (IP 64.3.24.24, 9999).
, .
IP 65000 , ( 2, " TCP/IP").
:
,
, . , , 13. , Linux
, ,
/etc/inetd.conf. ,
BSD, HPUX Solaris,
.
, .
Telnet 21 (FTP):
* telnet 127.0.0.1 21
1. 29
www.books-shop.com
,
. Telnet FTP,
, 1.1.
, . .
1.1. TCP/***********************************//*** ***//***********************************/ .
. , .
. .
socket()
socket() ,
/ . Linux/UNIX. n(),
, socket () , . , . :
#include #include int socket(int domain, int type, int protocol);
. , " ". . 1.1.
1.1. socket ()
domain PF_INET IPV4; TCP/IP
PF_LOCAL BSD; ,
PF_IPX Novell '
PF_INET6 IPv6; TCP/IP
type SOCK_STREAM ( ) (TCP)
30 I.
www.books-shop.com
. 1.1SOCK_RDM (
)
SOCK_RDM ( )
SOCK_DGRAM (UDP User Datagram Protocol)
SOCK_RAW
protocol 32 ( 2, " TCP/IP"). : 0 (), SOCK_RAW 0 255
, ,
: domain=PF_INET, type=SOCK_STREAM, protocol=0.
PF_ AF_
" socket () PF_ (protocol family ). F_ (address family ). , .
TCP :
int sd;sd = socket(PF_INET, SOCK_5TREAM, 0);
sd ,
:
int fd;fd = open(.. .);
socket () errno. .
EPROTONOSUPPORT.
. protocol .
EACCES. . SOCKRAW PF_PACKET root.
EINVAL. .
domain type.
, , . Linux :
1. 31
%RRNVVKRS
#include /* */#include /*
*/#include /*
*/
sys/socket.h Socket API( socket(), ). sys/types.h , .
resolv.h, c . , Mandrake6.07.0 , sys/types.h ( netinet/in.h, , )., Linux UNIX .
socket () , . n(),
.
bind().
, , , . bind(),connect( ) , . ( bind(), ; 4," ").
.
connect ( ) , . , ,
,
. IP .
, IP .
, ,
. , . , , , .
,
,
.
,
.
, . , ,
32 I.
www.books-shop.com
( ) .
connect () :
#include iinclude int connect(int sd, struct sockaddr *server, int addr_len);
(sd) , socket(). , , sockaddr, , . , socket()
.
socket () : PF_INET PF_IPX. . sockaddr. connect(). (
, " ".
sockaddr . sockaddr 8 , . , , sockaddr. . . , : push, (), () .. sockaddr _family : , . 16 .
PF_INET ( ):
struct sockaddr { struct sockaddr_in {unsigned short int sa_family; sa_family_t sin_family;unsigned char sa_data[14]; unsigned short int sin_port;
}; struct in_addr sin_addr;unsigned char _ pad[];
sockaddr
, socket ( ), , sockaddr ( : PF_, AF_). , PF_INET6, AF_INET6, . ' ,
: sa_family sin family . , ,
1. 33
www.books-shop.com
. , ( 2, " TCP/IP"). (sa_data _pad) .
sockaddr sockaddr_in 16 ( IPv6 sockaddr_in6 24 ), .
, , , __pad[] . ,
, (
sockaddr_in ). sockaddr_in . , ,
, .
.
, .
sin family
sin port
sin addr
IP
AF_INET
13
127.0.0.1
connect(),
. 1.2 , ( Web). , Linux sockaddr_in sockaddr. , .
sockaddr
UNIX sockaddr. . , , ( Linux ).
1.2. connect ()
/*** , ***//*** connect(). ***/
idefine PORT_TIME 13struct sockaddr_in dest;char *host "127.0.0.1";int sd;/**** ****/
bzero(Sdest, sizeof(dest)); /* */dest.sin_family = AF_INET; /* */
34 I.
www.books-shop.com
dest.sin_port = htons ( PORT_TIME ) ; /* */inet_aton(host, &dest.sin_addr) ; /* */
if ( connect (sd, &dest, sizeof (dest)) != 0 ) /* ! */{
perror ( " socket connection " ) ;abort();
. sockaddr_in. , , .
, , , socket(). bzero() sockaddr_in . sin_family AF_INET. IP
. htons () inet_aton(),
, 2, " TCP/IP".
, .
, connect(). , .
, sd,
, .
,
(, HTTP 1.0
). , , .
, , . . ,
. : "!" .
, .
read ( ) :
#include ssize_t read(int fd, void *buf, size_t count);
.
, (fd), (sd). read( ):
int sd, bytes_read;sd = socket (PF_INET, SOCK_STREAM, 0); /* */
/**** ****/
1. 35
www.books-shop.com
bytes_read = read(sd, buffer, MAXBUF); /* .*/if ( bytes_read < 0 )
/* ; */
(FILE*), .
, ,
f s c a n f ( ) (, , ):
char Name[NAME], Address[ADDRESS], Phone[PHONE];FILE *sp; 'int sd;sd = socket(PF_INET, SOCK_STREAM, 0); /* */
/**** ****/
if ( (sp = fopen(sd, "r")) == NULL ) /* FILE* */
perror("FILE* conversion failed");else if ( fscanf(sp, "%*s, %*s, %*s\n", /*
*/NAME, Nm, ADDRESS, Address,PHONE, Phone) < 0)
{perror("fscanf");
FILE*. : UDP . ,
, . , : , . , FILE*, . , . ( 3, " Internet".)
, ,
. ,, : , fprintf() f s c a n f ( ) . , , fscanf ( ) , .
, . . . .
36 I.
www.books-shop.com
read(), ,
.
EAGAIN. ,
. ,
.
EBADF. , . , socket () ( ).
EINVAL. , .
read() , . Linux , recv(),
: /
#include #include int recv(int sd, void *buf, int len, unsigned int flags);
, read(),
.
(1 | 2 | ...). . , recv()? He read()? : recv() , . , ,
.
, . , "".
MSG_OOB, . . , :
. , ( 10," ").
MSG_PEEK. . , .
, (, ; " ").
MSG_WAITALL. ,
.
, "". "" .
MSG _DONTWAIT. ,
. ( )
1. 37
www.books-shop.com
. , , , . , , ,
, EWOULDBLK. (
Linux . , ' f c n t l ( ) 0_NONBLOCK.
.)
. , . recv(), . MSG_PEEK recv() : , 500 , 750. MSG_WAITALL.
recv() , read(). ,
( read()):
int bytes_read;bytes_read = recv(sd, buffer, MAXBUF, 0);
:
int bytes_read;bytes_read = recv(sd, buffer, MAXBUF, MSG_PEEK);
:
int bytes_read;bytes_read = recv(sd, buffer, MAXBUF, MSG_OOB | MSG_PEEK);
. ,
.
. , ?
, . , .
recv() , read(), .
ENOTCONN. .
ENOTSOCK. ,
, socket().
38 I.
www.books-shop.com
, read() , , , , recv().
, . , .
close():
#include int close(int fd); (fd) (sd)
.
0.
, . "" . , . 6 , .
close () .
EBADF. .
shutdown()
, . , stdin stdout.
shutdown
shutdown () shutdown (. 8 UNIX), .
shutdown() , :
Iinclude int shutdown(int s, int how);
how .
0
1
2
1. 39
www.books-shop.com
:
TCP, . .
. , (. 1.2).
1.2. ,
1. socket(): ( ) , 2. connect(): () , bind()
3. , ( ) 4. () 5. ,
() 6. ()
() 7. , .
, . , (, )
8.
, connect(). , , (
, , ,
..). Socket API
.
. socket(), . "" . read() write()J . recv().
TCP/IP , . IP, , .
40 I.
www.books-shop.com
TCP/IP
2 ...IP 43
IP 49
51
57
UNIX 57
: IP 58
%RRNVVKRS
Internet . . ,
, , .
, . Socket API ,
IP, ,
.
IP
TCP/IP .
IP
. , , .
. , Internet.
( ) . , .
Bob Sasha, ,
. . .
, ( ). ; , , . , (, DHCP). ( ) .
,
. , . , , , ' , , .
.
, , . , .
,
.
, , ,
(Media Access Control ). Ethernet.
42 I.
www.books-shop.com
, .
Ethernet 6 , 00:20:45:FE:A9:OB. , .
,
. . , . ,
. , ( , ).
,
. , : ( ) ( ). IP.
IP
. , ( ).
, ,
. IP
ARP (Address Resolution Protocol
) [RFC826].
ARP
ARP IP . , . , . , , IP. , ARP, . , , . , , I.
Internet
Internet " ". . , , (. 2.1).
. 2.1. IP! ,
2. TCP/IP 43
www.books-shop.com
IP . . , , , .
, , , , , , .
Internet . , : .
. .
,
0.0.0.00.255.255.255 () 1.0.0.0 126.255.255.255 2242, 16777214 .
126 . , . Internet
127.0.0.0 127.255.255.255 ( )
128..0.0191..255.255 2162, 65534 . 64x256 . , , . ( , 129.5.0.0).
192...0 223.xxx.xxx.255 282, 254 . 32x65536 . Internet
D 224.0.0.0239.255.255..255 2282, 268435454 . ,
240.0.0.0255.255.255.255 2282, 268435454 . . , 255.255.255.255 IP
, ,
. ,
0. 1,
0.
: 0 (00000000) 126 (01111110) : 128 (10000000) 191 (10111111) : 192 (11000000) 223 (11011111) D: 224 (11100000) 239 (11101111) : 240 (11110000) 255 (11111111)
Internet ( 4 ) ,
.
44 I.
www.books-shop.com
CIDR (Classless Internet Domain Routing
). (
RFC 15171519).
IP .
, :
, . : ,
. , , , ,
. , .
, ,
, .
, , , .
., 16 , ,
. Linux
, , , . CIDR, .
.
,
. , . , . , .
,
, ,
187.35.209.208. 208 (11010000). , ,
ll0lxxxx, ! . : 187.35.209.208 (),187.35.209.209 ( 1) .. 187.35.209.222.
,
.
. . , . . , , , , 187.35.209.223. , , : 11011111. ( ) , .
2. TCP/IP 45
www.books-shop.com
, . , ,
.
Internet .
, . , ( ), .
,
, ( ) . , , . , .
, , ,
, . ,
, ,
. .
, . .
IP, ,
.
. , .. . (
), ,
. ,
, ARP .
Ethernet ,
. , , , Ethernet IP. ARP.
, .
: ( ), ( ). ,
, , 2. : .
. : 0.0.0.0 0.255.255.255 127.0.0.0 127.255.255.255.
46 I.
www.books-shop.com
"" . ,
128.187.0.0, 0.0.25.31
128.187.25.31.
1992 . Internet (TAB Internet ActivitiesBoard) [RFC 1160], Internet(Internet Architecture Board), Internet.
, 450 .
, 2% . ?
, . , .
,
.
, , 128 . 30. 10 , . , , .
. , . Internet
. .
?
? Internet (ICANN Internet Corporation for Assigned Names and Numbers) , , .
DHCP (Dynamic HostConfiguration Protocol
) [RFC2131], IP
. IP . ,
.
, , ,
DHCP.
, DHCP. , ( ) .
.
. , IP! ( ).
2. TCP/IP 47
www.books-shop.com
IP
, . . ping 127.0.0.1 . , . Red Hat Linux( ) /etc/sysconfig/network /etc/sysconfig/networkscripts/ifcfg*.
IP. IPv6 [RFC2460].
: 128 , 32! :
8008:4523:FOE1:23:830:CF09:1:385
, . IPv6
. 31038
( 19, "IPv6: IP").
IP
. , , ,
. ,
. TCP/IP . , .
. TCP/IP , . : ,
.
IP
. 16 .
. ( read() recv()). , ( write() send()),
.
.
, , EINVAL. , SO_REUSEADDR ( 9," ").
, , ; , : , . , , , .
48 I.
www.books-shop.com
. /etc/services ( , "
"). .
1
7
9
13
20
21
23
25
37
42
70
79
80
,
tcpmux
echo
discard
daytime
ftpdata
ftp
telnet
smtp, mail
time, timeserver
nameserver
gopher
finger
www, http
TCP
/dev/null
/
FTP
F
Telnet
UNIX
(DNS)
Gopher
Finger
Web
. Telnet. /etc/services : , , .
: , (, Mandrake Linux ). , /etc/services, . .
. bind(). bind() , .
, , 1024, root. , ( 13), root , SUID. "setuser ID" . . SUID , , . , /usr/bin/at ( ) cron, root. . . UNIX. : SUID . , , , .
2. TCP/IP 49
www.books-shop.com
, ,
. . Linux BSD: 1024 .
, :* , (
root);* ::* .
. , . . : ( ) ( ). ,
, , ,
, . , 214259635.
557. :
: 00 01 02 03 04: 5 57 ...
, () . :
: 00 01 02 03 04: 57 5 DC ...
().
. , . ", ,
ASCII?" , . ,
, . ,
, . ,
, .
,
. , ? , . ,
sockaddr. :
.
50 I.
www.books-shop.com
. 1," ":/**************************************************************//*** : ***//*** sockaddr_in. ***/
struct sockaddr_in dest;char *dest_addr = "127.0.0.1";
dest.sin_family = AF_INET;dest.sin_port = htons(13); /* 13 ( ) */if (inet_aton(dest_addr, &dest.sin_addr) == 1) {
: sin_family, sin_port sin_addr.
, . . sin_port (13) htons(), .
htons () 16
htonl() 32
ntohs () 16
ntohl () 32
, " ".
, ,
, .
inet_aton() IP ASCII , (.. htonl()). .
inet_aton() (###.###.###.###) ; ,
inet_addr() ( inet_aton()), ; 1 ( 255.255.255.255 )
inet_ntoa() IP, , ASCII
gethost ( www.linux.org) byname () IP
2. TCP/IP 51
%RRNVVKRS
. , . ," ".
, , , : Linux , . . , .
. write():
#include ssize_t write(int fd, const void *buf, size_t count);
read(), , .
,
.
EBADF.
. , ( ,
socket()).
EINVAL. ,
. , .
EFAULT. . buf , ,
EPIPE. , . , , SIGPIPE, , write() EPIPE. . :
1) ;
2) , ( );
3) .
, write () :
52 I.
www.books-shop.com
int sd, bytes_written = 0, retval;sd = socket(PF_INET, SOCK_STREAM, 0);
/*** ***/while ( bytes_written < len) /* , */{ /* */
retval = write(sd, buffer+bytes_written, len);if ( retval >= 0)
bytes_written += retval;else
/* */}
fprintf (), , FILE*:
FILE *spint sd;Sd = socket(PF_INET, SOCK_STREAM, 0);
/*** ***/sp = fdopen(sd, "w"); /*
*/if ( sp == NULL)
perror("FILE* conversion failed");fprintf(sp, "%s, %s, %s\n", Name, Address, Phone);
,
while . , , . , FILE*
:
, .
send(),
. , recv(). :
#include #include int send(int sd, const void *msg, int len, unsigned int f lags);
, write().
, ,
.
MSG_OOB. . ,
. , SIGURG.
MSG_DONTROUTE. .
2. TCP/IP 53
www.books-shop.com
. , ENETUNREACH ( ). .
MSG_DONTWAIT. He send().
, . ,
SIGIO.
send (), , errno EAGAIN.
MSG_NOSIGNAL. He SIGPIPE. ,
SIGPIPE. , .
.
send():
/************************************************************//*** ****//*************************************************************/
int bytes_sent;bytes_sent = send(sd, buffer, MAXBUF, 0);
/* */int bytes_sent;bytes_sent = send(sd, buffer, MAXBUF, MSG_OOB | MSG_NOSIGNAL);
,
send().
EBADF. . ,
socket ().
ENOTSOCK. .
EMSGSIZE. , .
( ) , .
EAGAIN. ,
. , , " ".
.
EPIPE. . SIGPIPE, MSG_NOSIGNAL.
send()
. , Finger,
79, .
.
.
54 I.
www.books-shop.com
, ( Web):/***************************************************************//*** : ****//*** . ****/
int main(int count, char *strings[]){ int sockfd;
struct sockaddr_in dest;char buffer[MAXBUF];
/* */sockfd = socket(PF_INET, SOCK_STREAM, 0);bzero(&dest, s izeof(dest));dest.sin_family = AF_INET;dest.sin_port = htons(atoi(strings[2]));inet_addr(strings[1], &dest.sin_addr.s_addr);
/* */if ( connect(sockfd, sdest, sizeof(dest)) != 0 )
PANIC("connect() fai led");sprintf(buffer, "%s\n", strings[3]);sendfsockfd, buffer, strlen(buffer), 0) ;/* */bzero(buffer, MAXBUF);recv(sockfd, buffer, MAXBUF1, 0);printf("%s", buf fe r ) ;close(sockfd);return 0;
}
, :/************************************************//*** , ***//*** . ***//*************************************************//* */do{
bzero(buffer, MAXBUF);bytes = recv(sockfd, buffer, MAXBUF, 0);printf("%s", buffer);
}while ( bytes > 0);close(sockfd); ,
. "".
,
. ,
, . , .
2. TCP/IP 55
www.books-shop.com
. , . .
TCP/IP
Novell
AppleTalk
PF LOCAL
PF_INET
PF_IPX
PF_APPLETALK
;
TCP/IP
Novell
AppleTalk
," ".
, Socket API,
. , , , ,
TCP/IP.
UNIX
: , ? ,
.
Socket API.
( ) . , .
; ,
.
, : TCP, UDP.
sockaddr. :
/****************************************************************//*** ****//****************************************************************/linclude int sockfd;struct sockaddr_un addr;sockfd = socket(PF_LOCAL, SOCK_STREAM, 0) ;bzerof(&addr, sizeof(addr));addr.sun_family = AF_LOCAL;strcpy(addr.sun_path, "/tmp/mysocket"); /* */if ( bind(sockfd, Saddr, sizeof(adrr)) != 0 )
perror("bind() failed");
. sun_path
104 ( NULL).
56 I.
www.books-shop.com
.
.
/tmp, . , .
: IP$
Socket API
. ,
.
TCP/IP ,
.
: , , ARP.
, ""
.
TCP/IP .
. .
, ,
. Socket API , (inet_addr(), inet_aton(), inet_ntoa()), (htons(), ntohs(), htonl()).
TCP UDP.
Internet
.
2. TCP/IP 57
www.books-shop.com
Internet
:
tcpdump
:
60
65
77
77
79
79
3
www.books-shop.com
, Novell (IPX), Microsoft (NetBEUI), AppleTalk , , TCP/IP. , , .
, .
Internet : ,ICMP, UDP ( ) TCP (). (. 3.1). , , .
. 3.1. Socket API
, , ?
, : , . , .
, (, UUCP),
.
IP (Internet Protocol) [RFC791] , : , .
. , , , .
Internet. ( , ), .
3. Internet 59
www.books-shop.com
. , . . ( ) , o . , Linux .
2, " TCP/IP", () . , ( 3.1) (. 3.2) .
0
2
4
6
8
10
12
16
20
2060
0 OF MF
( 40 )
( 65535 )
. 3.2. IP!
3.1. IP
struct ip_packet {uint version:4;uint header_len:4;
uint serve_type:8;uint packet_len:16;uint ID:16;uint _reserved:1;uint dont_frag:1;uint more_frags:1;uint frag_offset:13;
/* *//*
*//* *//* *//* *//* 0 *//* , *//* *//* */
60 I.
/****************************************************************//*** IP ***//****************************************************************/#typedef unsigned int uint;#typedef unsigned char uchar;
www.books-shop.com
uint time_to_live:8; /* */uint protocol:8; /* : ICMP, UDP, TCP */uint hdr_chksum:16; /* */uint IPv4_source:32; /* IP */uint IPv4_dest:32; /* IP */uchar options[]; /* 40 */uchar data[]; /* 64 */
}
, ,
, . IP
. , dont_frag
, :
.
,
3.1. . , .
version IP.
, . (. 3.1).
3.1. version
4 IPv4
5 ( )
6 IPv6
7 TP/IX (Internet )
8 Internet ""
9 TUBA (TCP and UDP with Bigger Addresses TCP UDP )
,
,
( IP_HDRINCL). 0. , .
header_len
. 15 (60 ). ,
, , IP_HDRINCL. IP
3. Internet 61
%RRNVVKRS
20 , 5 (20/4).
serve__type , .
: (
), (TOS type of service).
setsockopt() : , ,
. ( 9," ").
IDIP .
16 , ,
. , ,
, , , .
.
(IP_HDRINCL),
.
: , . IP . , .
dont_frag, more__frag frag_offset
.
(
)
(). "" . , .
, Linux. (, ). , " , . , .
62 I.
www.books-shop.com
dont_frag ,
. , , , ICMP
.
more_frags ,
. (
).
0.
frag_offset , . , . , . frag_offset 13 64 .
8 .
, ( ) 8. : IP
.
,
.
time_to_live (TTL) ,
.
.
( ), .
time_to_live 8 , 255 , . , . , , .
"" .
time_to_live IP_TTL ( 9, " "). , .
protocol Internet : ICMP
(IPPROTO_ICMP, 1), UDP (IPPROTO_UDP, 17) TCP (IPPROTO_TCP, 6). , . , socket()
SOCK_RAW.
netinet/in.h. (He , , , .)
3. Internet 63
www.books-shop.com
optionsIP .
, , ,
.. 40 . , .
data , 65535
( 60 ). . , ICMP 4 , UDP 8, TCP 2060.
IPv4.
.
Internet ,
. IP,
. , , .
TCP, UDP, ICMP . (. 3.2).
3.2.
()
()
2060
65535
ICMP
2060+[4]
65535
UDP
2060+[8]
65535
TCP
2060+[2060]( )
, ,
. , , .
.
64 I.
www.books-shop.com
.
, . 3.2.
, , .
, ,
.
, , .
( )
, .
. . 3.2 .
,
.
. , TCP,
, IP (65536 ).
, , .
. , . .
,
. , . , . , , .
,
. , .
. , , . , , Telnet, HTTP,
, .. , .
3. Internet 65
www.books-shop.com
HTTP HTTP 1.0 UDP, TCP. , . , .
. , .
, .
, : , .
,
. , , . , . ,
.
. CRC (Cyclical RedundancyCheck ).
.
, .
.
.
. , /: , ..
, ,
. , , , , .
,
. , FTP, Web, /.
,
. ,
, Web.
, . , .
, .
66 I.
www.books-shop.com
, .
, , , , .
,
. ,
.
, ,
. , . ,
.
IP, . .
. , , , . , , , .
, .
IP. . . 3.3.
3.3.
() 2060 () 65535 (65515 ) ( ) ( ) ( )
Linux TCP/IP( Internet 5," "). TCP/IP IP. .
3. Internet 67
www.books-shop.com
IP , socket () SOCK_RAW.
, , , root.
IP. :
. UDP, . .
, .
, .
. 18," ".
ICMP
ICMP (Internet Control Message Protocol Internet) IP. , Internet (, ,
), , . , traceroute ping. . 3.4.
3.4. ICMP
() 2464 () 65535 (65511 ) ( , ) ( , ) ( , ) ( )
ICMP,
. sendmsg() sendto() (
). .
ICMP , . , . , ICMP .
: . , .
ICMP. , , , .
IP, ICMP IP,
( 3.2).
68 I.
www.books-shop.com
3.2. ICM
/***/***/***
ICMP.
netinet/ip_icmp.h.
*/***/***/***/
typedef unsigned char ui8;typedef unsigned short int ui16;
struct ICMP_header {ui8 type; /* */ui8 code; /* */ui16 checksum; /* */uchar msg[]; /* */
0
2060
2262
2464
IP (2060 )
ICMP | ICMP
( 65535 )
. 3.3. ICM!
, "". msg ,
.
UDP
UDP (User Datagram Protocol ) ().
. UDP . 3.5.
3.5. UDP
() ()
286865535 (65511 )
TCP/IP, . UDP
3. Internet 69
www.books-shop.com
. , .
, UDP,
. , , , . , , . ICMP,
.
, . , . ,
UDP,
, .(: ,
. .)
UDP
. ,
, . , Internet ,
, . . ,
, .
UDP . , .
, . . , .
.
. , . , , .
CRC.
. CRC , , . ,
.
. , ,
, . , .
TCP, .
UDP IP. UDP IP (. 3.4). 3.3.
70 I.
www.books-shop.com
3.3. UDP
/*** UDP. ***//*** netinet/udp.h. ***/
typedef unsigned char ui8;typedef unsigned short int ui16;
struct UDP_header {ui16 src_port; /* */ui16 dst_port; /* */ui16 length; /* */ui16 checksum; /* */uchar data[]; /* */
0
2060
2262
2464
26662868\
IP (2060 )
( 65535 )
. 3.4. UDP
UDP , $ . IP$ $ . bind(), (. $ 2, " TCP/IP").
TCP
TCP (Transmission Control Protocol ) $ , Internet. $ read() write() $ . TCP . 3.6.
3.6. TCP
()
()
40120
( )
( )
( )
( )
3. Internet 71
%RRNVVKRS
, , , . UDP , , .
TCP.
, , , . ,
. WWW, TCP ,
UDP.
, Internet:
, .
.
, . , , . , , ( )
, . Internet . , ,
, , . . ,
, , .
TCP ,
, . ,
10 . TCP , ,
. , TCP
.
" " . ' "; , . ' . . (Nagle). ( 9," ").
,
. , . TCP
,
.
, , . , ,
72 I.
www.books-shop.com
, TCP
.
,
.
. ,
.
UDP , , ,
. IP ,
.
, TCP
. , . , . TCP 536
1500 .
MSS (maximum segment size ) ( 9, "
").
,
TCP , .
TCP . ,
.
TCP$ TCP ,
TCP . TCP UDP. 3.4.
3.4. TCP
/*** TCP. ***//*** netinet/tcp.h. ***//**************************************************************/typedef unsigned char ui8;typedef unsigned short int ui16;typedef unsigned int ui32;typedef unsigned int uint;
struct TCP_header {ui16 src_port; /* */ui16 dst_port; /* */ui32 seq_num; /* */ui32 ack_num; /* */
3. Internet 73
www.books-shop.com
uint data_off:4;uint res:6;uint urg_flag:1;uint ack_flag:1;uint psh_flag:1;uint rst_flag:1;uint syn_flag:1;uint fin_flag:1;ui16 window;ui16 checksum;ui16 urg_pos;ui8 options[];ui8 padding[];
uchar data[];
/* *//* () */ ./* , *//* *//* *//* *//* () *//* *//* , *//* *//* *//* TCP *//* (
data[]) *//* */
0
2060
2262
2464
90 eg
3272
3474
3676
3878
4080
I (2060 )
| |urg|ack|psh|rst|syn|fin
TCP f
( 65536 )
. 3.5. TCP!
, data_off . , header_len IP
, , , 32
.
, . .
TCP , UDP. seq_num ack_num . , IP (seq_num).
,
74 I.
www.books-shop.com
(ack_num), ,
. .
TCP
, . 3.7.
3.7.
SYN=1 (syn_flag) ()
=0 (ack_flag)
SYN=1 (syn_flag)
=1 (ack_flag)
SYN=0 (syn_flag)
ACK=1 (ack_flag)
. ().
, , .
, , . 3.8.
3.8. TCP
FIN=1 (syn_flag)
=1
=1
=1
FIN=1
.
TCP , . , .
.
, , , : ? ,
3. Internet 75
www.books-shop.com
. , , , .
ICMP, UDP, TCP IP . ,
. , TCP , ICMP.
Linux TCP/IP, .
ICMP, UDP TCP IP
. .
tcpdump
, , ,
. tcpdump , . "" IP, TCP
.
root.
,
.
. root, ,
. , Linux , , , .
,
Ethernet. 2, " TCP/IP",
, Ethernet 6
. .
Ethernet
OEM (Original Equipment Manufacturer ) ( PCI PCMCIA), ( Ethernet). , . , , . .
76 I.
www.books-shop.com
. tcpdump , , .
.
( )
(, )
; , ""
v ( TTL )
vv
w
tcpdump
. , , ARP Ethernet IP. 100 :
tcpdump v t 100
t .
, .
tcpdump "". ,
, . ,
ping 127.0.0.1,
.
( tcpdump, ), , , .
root. :
sd = socket(PF_INET, SOCK_PACKET, )!,bytes_read = recvfrom(sd, buffer, s izeof(buffer), 0, 0, 0 ) ;
: SOCK_PACKET. , .
3. Internet 11
www.books-shop.com
. IP , . :
__802_3 802.3
__25 .25
ETH_P_ALL ( !)
__802_2 802.2
ETH_P_ALL. socket() :
sd = socket(PF_INET, SOCK_PACKET, ETH_P_ALL);
recvfrom() ( ). (, Ethernet) .
SOCK_PACKET ,
.
, . , .
IP ,
.
Web snooper.
,
(Intel) GNU
.
:
tcpdump
. IP , (ICMP), (UDP) (TCP). .
. ICMP, UDP TCP
IP, 20 120 .
.
TCP , . Internet,
. TCP , fprintf() fgets().
UDP , . ,
. UDP
, .
78 I.
www.books-shop.com
..., 82
: HTTP 86
, 87
92
UDP 97
: 100
: 101
4
www.books-shop.com
: (TCP) (UDP).
, .
TCP , .
. UDP . .
.
,
Linux ( UNIX)
,
socket(). (
IP, UDP TCP, 3, " Internet")
, . , TCP,
. , . TCP .
.
/ ,
. ,
.
TCP , . ( IP) . , .
( connect()) . , fprintf() fgets().
.
TCP , , .
TCP , , ,
. :
80 I.
www.books-shop.com
, . ,
( ), , .
,
.
. ,
. . TCP.
: . , . , , .
, , . ,
.
, ,
. .
.
TCP ,
, ,
. , printf () .
, . UDP, , . .
, ,
. ,
, . , ,
( ).
? , . : , . , , , , ,
. ( UDP; TCP.)
, $ ?
. . TCP ,
, .( UDP; TCP.)
, Federal Express? , , . .
4. ... 81
%RRNVVKRS
, .
. , . "" ,
. (FedEx UDP; TCP.)
, $, ? : " ", " ". . . , Telnet : .( UDP; TCP.)
, ? ( ), .
Web . ( UDP; TCP.)
$ ? ,
, UDP. , . , , . ( UDP; TCP.)
, TCP,
TCP , , UDP. ,
.
connect() UDP. , : UDP
. UDP
, TCP.
3, " Internet",
, .
. UDP , connect()
.
UDP, connect()
, .
read() write(), TCP,
82 I.
www.books-shop.com
. 4.1
, TCP.
4.1. UDP/*************************************************************//*** UDP ***//*** ( connectedpeer.) ***/
int sd;struct sockaddr_in addr;sd = socket(PF_INET, SOCK_DGRAM, 0); /* */bzero(&addr, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(DEST_PORT);inet_aton(DEST_IPADDR, &addr.sin_addr);if ( connected, &addr, sizeof (addr)) != 0 ) /* ! */
perror("connect");/* ! */send(sd, buffer , msg_len); /* TCP */
UDP sendto() recvfrom() ( ). send() ,
connect!).
, , , , bind(). 4.1
DEST_PORT. bind(). , connect().
connect() TCP,
, .
UDP. TCP ,
.
, , UDP,
.
. connect() UDP .
RDP RDP (Reliable Data Protocol ) [RFC908, RFC1151] , TCP, UDP. , , , UDP TCP. , , Linux UNIX .
4. ... 83
www.books-shop.com
: HTTP
HTTP. . * . .
,
. . TCP, ,
, , .
HTTP
HTTP, :
GET /1.0
HTTP. 6," ", .
, . URL http://www.kernel.org/mirrors/, www.kernel.org :
GET /mirrors/ HTTP/1.0
,
.
, .
, .
HTTP
. , . 4.2 Web.
, , HTTP.
(stdout).
4.2. Web HTTP
/*** HTTP ***//*** ( httpclient.c) ***/
int sd;struct servent *serv;if ( (serv = getservbyname("http", "tcp")) == NULL )
PANIC("HTTP servent");if ( (sd = socket(PF_INET, SOCK_STREAM, 0)) < 0 )
84 I.
www.books-shop.com
PANIC("Socket");
/* */bzero(Sdest, sizeof(dest));addr.sin_family = AF_INET;addr.sin_port = serv>s_port; /* HTTP */if ( inet_addr(Strings[1], &dest.sin_addr.s_addr) == 0 )
PANIC(Strings[1]);
/* */if ( connect(sd, Sdest, sizeof(dest)) != 0 )
PANIC("Connect");
/* */sprintf(buffer, "GET %s HTTP/1.0\n\n", Strings[2]);send(sd, buffer, strlen(buffer), 0);
/* , */do{
bytes_read = recv(sd, buffer, sizeof(buffer)l. 0);buffer[bytes_read] = 0;if ( bytes_read > 0 )
printf("%s", buffer);}while ( bytes_read > 0 );
, 4.2, , .
, .
HTTP (1.1 HTTPNG)
. . HTTP www.w3c.org.
,
.
, ,
(
). , UDP ,
, , . (: , . , .)
4. ... 85
www.books-shop.com
Linux ,
. , , .
UDP.
, connect() . send() recv().
, : sendto() recvfrom().
#include #include int sendto(int sd, char* buffer, int msg_len, int options,
struct sockaddr *addr, int addr_len);int recvfrom(int sd, char* buffer, int maxsize, int options,
struct sockaddr *addr, int *addr_len);
, send() recv(). . sendto() . sockaddr ( 4.3).
4.3. sendto()
/**************************************************************//*** sendto() ***//**************************************************************/
int sd;struct sockaddr_in addr;sd = socket(PF_INET, SOCK_DGRAM, 0);bzero(&addr, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(DEST_PORT);inet_aton(DEST_ADDR, &addr.sin_addr);sendto(sd, "This is a test", 15, 0, &addr, sizeof(addr));
DEST_ADDR:DEST_PORT. , ASCII. .
recvfrom() , sendto(). , . ,
. , sendto()
, recvfromf)
. sockaddr , ( , AF_INET).
86 I.
www.books-shop.com
recvf rom() . , PF_LOCAL, ( ), . . , , .
, recvfrom() addr_len, . . :/**************************************************************//*** recvfrom() ***/
int sd;struct sockaddr_in addr;sd = socket(PF_INET, SOCK_DGRAM, 0);/* */while (){ int bytes, addr_len=sizeof(addr);
bytes = recvfrom(sd, buffer, sizeof(buffer), 0, fcaddr,&addr_len);
fprintf(log, "Got message from %s:%d (%d bytes)\n",inet_ntoa(addr.sin_addr), ntohs(addr.sin_port),bytes);
/**** ****/sendto(sd, reply, len, 0, &addr, addr_len);
}
while ,
.
addr_len , . addr .
, addr_len addr, recvfrom()
, .. NULL (0). UDP , , .
addr , .
TCP .
, . ,
.
, ,
. UDP . , , . , , , ,
( ).
4. ... 87
www.books-shop.com
UDP
, .
/
TCP . ,
. ,
. (. 3, " Internet").
TCPv3 [RFC 1644] , UDP, , TCP. /(Transaction TCP) ,
sendto(). ?
TCP
,
. , ,
. TCP
,
(SYN), ()
(FIN).
TCP, 3, " Internet". ,
. , SYN, FIN . , ?
/ . , ,
(SYN). , FIN,
, (. 4.1).
,
, (
). , . ,
.
. 4.1. / , ! ! !
88 I.
www.books-shop.com
/ . : , 540 . , 64 . , , .
/ . , TCP, ,
. . :/*************************************************************//*** / ***//**************************************************************/int flag=l;int sd;sd = socket(PF_INET, SOCK_STREAM, 0);if ( setsockopt(sd, IPPROTOJTCP, TCP_NOPUSH, &flag,
sizeof(flag)) != 0 )PANIC("TCP_NOPUSH not supported");
/*** ***/if ( sendto(sd, buffer, bytes, MSG_FIN, &caddr,
sizeof(addr)) < 0 )PANIC("sendto");
/ TCP
.
setsockopt(). , , sendto () MSG_FIN.
/T Linux
, / Linux. , UNIX. Web.
, TCP , , , . / , .
/
. .
, .
, ..
4. ... 89
www.books-shop.com
. ( ),
.
, . .
( Linux ). send() recv() , ,
.
sendto() recvfrom(), .
, ,
.
, ,
. ,
. , .
sockaddr Linux Unux , ( , ). , , . bind(), sendto(), connect() recvfrom() , sockaddr, . , " ".
, UDP TCP, , , . , . , /etc/services , .
bind(). UNIX , " ". PF_LOCAL PF_UNIX, . " ".
sockaddr. , ' AF_LOCAL AF_AX25 , AF_INET AF_IPX . , , , (TCP UDP) ( , AF_INET). UDP c . ( /etc/services) .
bind() :
90 I.
www.books-shop.com
#include #include int bind(int sd, struct sockaddr *addr, int addr_size);
. 6, " ".
, connect().
:
/t**************************************************************//*** bind() ****//***************************************************************/struct sockaddr addr;int sd;sd = socket(PF_INET, SOCK_STREAM, 0 ) ;bzero(&addr, s izeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(MY_PORT); /* */addr.sin_addr.s_addr = INADDR_ANY; /* IP */if ( b indfsd, Saddr, s izeof(addr)) != 0 )
perror("bind");
bind() connect(), . ,
MY_PORT, , INADDR_ANY. , ,
.
INADDR_ANY ( 0.0.0.0), , .
(, ,
IP). IP. bind()
.
TCP UDP
.
,
:
if ( inet_aton("128.48.5.161", &addr.sin_addr) == 0 )perrorf("address error");
128.48.5.161.
:
addr.sin_addr.s_addr = htonl(0x803005Al); /* 128.48.5.161 */
. , INADDR ANY htonl()
4. ... 91
%RRNVVKRS
. ,
.
UDP . , . " " .
, bind(). . ,
. , , .
. , (""). 4.4, ( connectionlesssender. Web).
4.4.
/*** ***//*** ( connectionlesssender.) ***//****************************************************************/struct sockaddr addr;int sd, bytes, reply_len, addr_len=sizeof(addr);char *request = "select * from TableA where fieldl = 'test';";char buffer[1024);
/* */sd = socket(PF_INET, SOCK_DGRAM, 0);bzero(&addr, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(9999); /* * */if ( inet_aton(DEST_ADDR, &addr.sin_addr) == 0 ) /* IP
*/perror("Network IP bad");
/* */if ( sendto(sd, request, strlen(request), 0, saddr,
addr_len) < 0 )perror("Tried to reply with sendto");
/* */bytes = recvfrom(sd, buffer, sizeof(buffer), 0, saddr, &addr_len);if ( bytes > 0 )
perror("Reply problem");else
printf("%s", buffer);
92 L
www.books-shop.com
, 9999, SQL
.
, recvfrom(). (
, . ,
.)
,
bind(). , .
4.5 ( connectionlessreceiver. Web).
4.5. /****************************************************************//*** ***//*** ( connectionlessreceiver.) ***//***************************************************************/struct sockaddr addr;int sd;
/* */sd = socket(PF_INET, SOCK_DGRAM, 0) ;bzero(&addr, s izeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(9999); /* */addr.sin_addr.s_addr = INADDR_ANY; /* IP */if ( bind(sd, saddr, sizeof(addr)) != 0 )
perror("bind");
/* */do{ int bytes, reply_len, addr_len=sizeof(addr);
char buffer[1024];
/* , */bytes = recvfrom(sd, buffer, s izeof(buffer), 0, saddr,
&addr_len);if ( bytes > 0 .) /* */
printf("Caught message from %s:%d (%d bytes)\n",inet_ntoa(addr.sin_addr), ntohs(addr.sin_port),bytes);
/**** ****/if ( sendto(sd, buffer, reply_len, 0, saddr,
addr_len) < 0 )perror("Tried to reply with sendto");
else
4. ... 93
www.books-shop.com
perror( "Awaiting message with RecvFrom");while ( !quit );
. ,
.
. , , .
:
.
, . UDP 64 . .
UDP , , . B , .
UDP
. , UDP.
, .
, UDP , ..
, . ,
, . ,
. , .
UDP ( 100
TCP) . ,
TCP.
UDP
TCP
. TCP . , UDP, .
UDP, .
, . .
, ?
94 I.
www.books-shop.com
, ? ,
. ,
. ,
.
( TCP). , . ,
, .
,
, .
,
. . , .
, , TCP.
, .
,
. ,
. , IP UDP
( 28 ). , (4 5 28 UDP/IP).
, , "" .
.
, 1024 1 , 1000 . 1024 , 10 . 10x1024 . ,
, .
: , ?
, , , :
; , ,
.
, . , .
UDP
.
Internet (. 3, " Internet").
4. ... 95
www.books-shop.com
.
, . . , , . ,
1, 2, 4 5, 4 5 , 3.
, 3 , , , . .
, . , , . .
.
,
.
( ).
3 , "" .
.
UDP TCP ( ,
1). IP , . ,
.
(CRC cyclical redundancy check) ( error correction code). 3 , IP UDP .
, CRC . Internet, . :
;
,
;
,
96 I.
www.books-shop.com
. CRC
, ."" . , 32CRC 32 .
. , .
. ,
, (, ).
. , , , .
, . , .. , , .
,
. . ,
. ,
: "" "".
, , .
,
.
:
: ?
? , ,
, .
, ,
. :
, , .. , .
, .
.
: . : ?
.
4. ... 97
www.books-shop.com
, ,
.
, , , , . , , . , .
. 8, " ".
:
. , , .
, .
TCP, UDP, TCP
. UDP
, , sendto() recvfromf).
: . TCP
send() recv(), UDP
sendto() recvfrom(), .
/ (Transaction TCP) TCP,
.
,
. , , ,
. Linux .
UDP , , . TCP, UDP
.
TCP , . UDP,
, , , . TCP UDP
. TCP
, UDP .
IP.
98 I.
www.books-shop.com
... 103
OSI 108
Internet 111
OSI IP 115
116
: 116
5
www.books-shop.com
.
( ) . . .
( !), . ,
. ,
. :
, "" , ,
.
,
, , , , .
.
,
, , .
, .
, , . , , , , " ",
.
: , ,
.
.
(
); , , . . 5.1 .
5.1.
. 5.1
: HF
:VHF/UHF:
,
,
> 1000
, , . Ethernet .
IP
. ,
.
.
. , . .
, , .
.
, , .
( )
. , .
, . , , .
. , TTL (timetolive)
. , . 255 . 64 .
, .
, . , , "". ,
. ,
, .
, . , ,
, TTL
. TTL
, .
.
.
, . , , , . . , .
,
( ).
,
102 I.
www.books-shop.com
. ,
,
.
. , , .
, . 8 . .
,
.
, . .
.
. ,
, , . ,
,
.
,
( ).
Linux ,
.
,
, . ( )
, , . , ! ( , ; . 3," Internet").
,
.
, .
. , .
, . ,
, .
, . , , . , , . :
5. 103
www.books-shop.com
. .
,
.
()
(, ).
. ( , ) , ( IP).
, , . IP
.
. ,
.
.
. Java, Pascal, .
, .
.
, . , . 3, " Internet", . .
.
.
, ( 10, " ").
, . , . () , .
, . , Socket API.
.
, . , , , (,
, ). : OSI IP.
104 I,
www.books-shop.com
OSI
OSI (Open OSISystems Interconnection ) 7 (),
,
. OSI
, .
OSI
, .
,
. ,
(. 5.1).
.
1:
, . (, , , ),
.
.
.
(, ).
, .
API
/
, ,
,
, ,
,
, ,
. 5.1. OSI: ! ! , !
5. 105
www.books-shop.com
.
, . ,
.
, , (Ethernet) . , ,
. , .
, . "" , . , .
, Ethernet CRC, .
, , . .
. , . FDDI
CRC. .
2:
.
, ( ). CRC, .
. , . ,
.
. , . , , .
. 1060 . Linux
1 (100 / ). .
. Linux
. , , .
106 I.
www.books-shop.com
3:
.
. , , .
. , , AppleTalk Ethernet, .
, .
4:
, . , .
, . (
, . ,
HTTP, .) , . .
, !. , ( TCP/IP).
, , .
,
Internet. ,
.
5:
.
, . , ,
. , , ,
. , .
,
.
.
.
.
: , ,
5. 107
www.books-shop.com
.
, ( 10, " ").
6:
:
, , , .. RFC (RemoteProcedure Calls ) ( 15, " (RPC)").
7:
, , , , , . , API, . (NFS),
RPC.
InternetLinux ( UNIX) OSI
.
TCP/IP. Linux Internet, Linux.
IP 1972 . ARPAnet, DARPA (DefenseAdvanced Research Projects Agency ). BBN . UNIX, , Bell Labs, IP. , ARPAnet,, UNIX , . Socket API SD 4.2 1983 .
Internet , OSI. . OSI (. 5.2).
1:
Internet OSI.
, .
108 I.
www.books-shop.com
OSI Internet
API
/
, ,
,
, ,
,
, ,
. 5.2. Internet OSI; ! Socket API OSI , !, Telnet, FTP Lynx
, "" OSI. ,
. , , .
, ,
.
Linux :
"" . PCMCIA. PCMCIA , PCMCIA , ,
.
.
2: (IP)
IP, IPv4 IPv6,
. , ,
.
5. 109
www.books-shop.com
OSI.
. ,
, .
2: (ICMP)
ICMP (Internet Control Message Protocol Internet) .
,
.
"network not reachable" ( ) "host not found" (
).
,
. , , ARP
, . , TCP " "
. IPv6 () .
ICMP , . UDP, TCP . ICMP
.
3: (UDP)
, UDP (User Datagram Protocol
) OSI (. 5.3).
, , . UDP (. 5.2).
5.2. UDP
UDP
( ) ( ) IP
UDP :
. 4, "
", , . UDP Internet. UDP OSI, .
110 I.
www.books-shop.com
OSI
API
/
, ,
,
, ,
,
, ,
Internet
ICMPUDP
TCP
I
. 5.3. Internet , ; , ! UDP OSI
3: (TCP)
TCP OSI. : , ,
. , TCP UDP. TCP . . 5.3
TCP OSI.
5.3. TCP
TCP
( ) "" IP
5. 111
%RRNVVKRS
4:
TCP/IP .
, OSI.
Web, , Telnet FTP (File Transfer Protocol ). RPC OSI. (NFS) RPC
OSI.
UDP TCP,
ICMP.
OSI IP
OSI IP . , ,
.
.
OSI , .
.
,
.
, , : , , . . , . ,
.
:
, ,
. . . , . , .
IP . , , . IP. IP ,
, .
, 3, " Internet
", TCP/IP .
OSI, , Internet IP. ICMP
. UDP . TCP
112 I.
www.books-shop.com
. IP .
, Internet.
IP, socket() (. 5.4).
5.4. Internet
TCP/IP /
4 FTP, Gopher, Lynx, IRC3 (TCP) socket(PF_INET, SOCK_STREAM, 0);
3 (UDP) socket(PF_INET, SOCK_DGRAM, 0),
2 (I) socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);
2 (IP) socket(PF_INET, SOCK_RAW, );
1 socket(PF_INET, SOCK_PACKET, );
Linux socket () SOCK_PACKET. , .
3, " Internet".
:
. ,
, . , ,
.
, OSI IP, . , , , .
. ,
.
5.
www.books-shop.com
www.books-shop.com
...
6.
7. :
8.
9.
10.
www.books-shop.com
... :
: HTTP
:
121122129131134
6
www.books-shop.com
. , , . I, " ", :
,
TCP/IP. , .
, , ,
, . ,
. . , .
, . , : , .
I , ,
, . . HTTP
, , Web
HTML.
:
. , , .
, (. 6.1).
, ,
: socket(), connect(), read(), write() close(). bind() , . ,
. , .
,
, .
: socket(), bind(), listen(), accept() close(). , .
listen () accept () , .
bind() 4, " ". . , : listen() accept().
6. 117
www.books-shop.com
. 6.1. ,
, , . . ,
"Hello, World" . Web simpleserver..
, (). . .
. , . ( ) . , .
118 II.
www.books-shop.com
.
, , . .
1. socket().
2. bind().
3. listen().
4. accept().
5. recv() read().
6. send() write ( ) .
7. "bye", . 5.
8. close() shutdown().
9. . 4. UDP
, . , bye.
,
. ( )
1, " ". ,
. .
socket)),
SOCK_STREAM. ,
.
bind() ,
. , . .
, , ,
. .
bind)) :
tinclude linclude int bind(int sd, struct sockaddr *addr, int addr_size);
sd . addr sockaddr.
, (. 1, " "). sockaddr.
, Socket API: , . , .
bind() sockaddr ( 6.1).
6. 119
www.books-shop.com
6.1. bind() TCP!
/*** : ***//*** sockaddr_in ***/
struct sockaddr_in addr; /* */bzero(&addr, sizeof(addr)); /* */addr.sin_family = AF_INET; /* TCP/IP */addr.sin_port = htons(MY_PORT); /* */addr.sin_addr.s_addr = INADDR_ANY; /* IP */if ( bind(sd, saddr, sizeof(addr)) != 0 ) /* */
perror("Bind AF_INET"); ( 6.2)
( AF_UNIX AFJGOCAL).
6.2. bind()
/*** : ***//*** sockaddr_ux ***/
#include struct sockaddr_ux addr; /* */bzero(Saddr, sizeof(addr)); /* */addr.sun_family = AF_LOCAL; /* */strcpy(addr.sun_path, "/tmp/mysocket"); /* */if ( bind(sd, saddr, sizeof(addr)) != 0 ) /* */
perror("Bind AF_LOCAL");
,
/tmp mysocket. , syslogd, :
.
bind() .
EBADF. . , socket () ,
.
EACCES. root., 01023 root.
2, " TCP/IP".
EINVAL. . ,
. , . , ( !).
120 .
www.books-shop.com
bind() ( /etc/services). ,
.
,
. : , .
.
listen(). , . , " ". ,
accept().
#include linclude int listen(int sd, int numslots);
sd , socket(). numslots . ( 6.3).
6.3. listen()
/****************************************************************//*** listen(): ***//*** ***/****************************************************************/int sd;sd = socket(PF_INET, SOCK_STREAM, 0 ) ;/*** ***/if ( listen(sd, 20) != 0 ) /* */
perror("Listen"); /* 20 */
, 5 20. .
, (, 60, 60 ).
listen() .
EBADF. .
EOPNOTSUPP. listen(). TCP(SOCK_STREAM) , UDP(SOCK_DGRAM) .
.
6. 121
%RRNVVKRS
, .
. accept () . . , . . . accept() ,
.
, ,
, . accept))
. ,
.
.
, , accept() .
4, "
", recvfrom() ,
.
#include #include int accept(int sd, sockaddr *addr, int *addr_size);
, sd . , sockaddr. recvfrom(), . , .
, . : , . addr_size , ( 6.4).
6.4. accept ()
/****************************************************************//*** accept(): ***//*** ***//****************************************************************/int sd;struct sockaddr_in addr;/*** ,
***/for (;;) /* */{ int clientsd; /* */
int size = sizeof(addr); /* */
122 .
www.books-shop.com
clientsd = accept(sd, &addr, &size); /* */if { clientsd > 0 ) /* */{
/*** ***/close(clientsd); /* */
}else /* */
perror("Accept");
,
clientsd,
. , . , .
accept () , bind( ). bind( ) .
,
. addr ( 6.5).
6.5. accept( ) /****************************************************************//*** accept(): ***//*** ***//****************************************************************//*** ( ) ***/
client = accept(sd, saddr, &size);if ( client > 0 ){
if ( addr.sin_family == AF_INET)printf( "Connection [%s]: %s:%d\n", /* */
ctime(time(0) ) , /* */ntoa(addr.sin_addr), ntohs(addr.sin_port));
/* */
accept() , .
. .
6. 123
www.books-shop.com
EBADF. .
EOPNOTSUPP. accept() SOCK_STREAM.
EAGAIN. ,
. accept() , .
,
, bye ( 6.6).
6.6.
/*** : ***//*** "bye" ***/
/*** ( accept()) ***/ if ( client > 0 ){ char buffer[1024];
int nbytes;
do{
nbytes recv(client, buffer, sizeof(buffer), 0);if ( nbytes > 0 ) /* , */
send(client, buffer, nbytes, 0);}while ( nbytes > 0 && strncmp("bye\r", buffer, 4) 1=0);close(client);
}, "bye\r",
"bye\n". , . . , Telnet.
,
. ,
: " ?" " ?"
, , .
124 //.
www.books-shop.com
?
. , . ( ).
. ,, , . ? ?
?
. . , ,
.
. ,
. ,
, .
, .
, .
?
, . , , , .
. , . 16," ", SSL (Secure SocketsLayer ),
.
, , . ?
? ?
, Web.
?
ASCII, Web
/HTML. :" ?" " ?" , , .
. ASCII 5080%.
6. 125
www.books-shop.com
?
, ASCII. : 7 .
, . ,, ,
. .
,
.
, , ? , .
?
, ( !, ). . , , , .
, ,
. , .
, .
?
, , , . , . , .
. , ( ). (
).
,
( ). ,
.
?
.
, .
126 II.
www.books-shop.com
TCP/IP , . 9, "".
: , , .
. ,
. , .
?
,
. . , . , HTTP
. ,
read() recv(), . .
, ,
. (EPIPE),
, .
: HTTP
. HTTP.
, , .
Web ( htmllsserver.c).
HTML , . ( 6.7).
6.7. /**************************************************************//*** HTTP ***//**************************************************************/
while(1){ int client;
int size = sizeof(addr);
client = accept(sd, &addr, &size);if ( client > 0 ){ char buffer[1024];
/* */char *reply = "Hello!/n";
6. 127
www.books-shop.com
bzero(buffer, sizeof(buffer) ); /* */recv(client, buffer, sizeof(buffer), 0); /*
*/send(client, reply, strlen(reply), 0); /* */
/* */fprintf(stderr, "%s", buffer);close (client);
}else
perror( "Accept");
, , :
GET /dir /document HTTP/ 1.0( )
.
, . ,
, . GET : .
, (,
). HTTP 1.0 , ,
HTTP/.
MIME,
:
/1.1 200 ContentType: text/html
( )( )
. ,
.
404 ("Not Found"). HTTP 1.1 , " ".
, HTML. ,
HTML.
HTTP . , , , FILE* ( 6.8).
128 II.
www.books-shop.com
6.8. HTTP
/**************************************************************/
/*** HTTP 1.0: , ***//*** , ***//*** HTML ***//**************************************************************/
/*** , ***/
for( ; ; ){ int client;
int size = sizeof(addr);
client = accept(sd, &addr, &size); /* */
if ( client > 0 ){ char b u f [ 1 0 2 4 ] ;
FILE *clientfp;
bzero(buf, s i z e o f ( b u f ) ) ; /* */recv(client, buf, s izeof(buf ) , 0 ) ; /*
*/clientfp = fdopen(client, " w " ) ; /*
FILE* */if ( clientfp != NULL ) /*
*/{
/**** ****/
/**** ****/
/**** ... ****/
/**** ****/
/**** HTML ****/fclose(clientfp); /* */
}else
perror("Client FILE"); /* FILE* */
close(c l ient) ; /* */}else
perror ("Accept") ; /* accept () */
, ,
, HTTP 1.1 ..
6. 129
www.books-shop.com
:
.
, .
: b i n d f ) , listen() accept() , . (bind()), (listen()) (accept()). accept() ,
.
,
. , .
130 II.
www.books-shop.com
...
:
:
()
136
160164
167
168
171
7
%RRNVVKRS
,
. , , . . , , ., , .
.
,
,
.
. , ,
, , . ! , ?
, ,
, .
.
, , ,
, . ,
.
, .
, .
, .
. .
:
Linux UNIX. ( ) . , .
.
.
: ( !).
. , , .
(). , .
,
132 .
www.books-shop.com
, .
,
.
. (//). , , . , ( ). , .
, . Linux !. , , , . ,
.
, ,
. Linux .
, . ,
.
. , : ,
.
. 7.1 , . .
, (PID process ID).
. . 1 0,1 , . , 100 (10 ). ,
.
UNIX ,
. Linux 2.0 2.2 . .
Linux . , . ( Linux 16 .)
7. : 133
www.books-shop.com
. 7.1. Linux
? . , . Netscape Web, . , , , .
,
. , :
;
;
. , , .
134 //.
www.books-shop.com
.
. , , , , , .
(
top ps aux) . .
, . ( "". init.
.) , .
,
. , init.
.
, (1632 ). .
. . :
stdin ( ),
;
stdout ( ),
;
stderr ( ),
.
( !) . , . () .
.
, clone ()( ), . ,
, .
, .
, , . ,
, .
7. : 135
www.books-shop.com
Linux . Linux . . , , .
. .
fork() ,
exit ()
; , , ; ,
,
; , ,
, pthread_exit(void* arg) return
,
( , ) , ( chdir), ( enroot) ( umask)
; ,
sigprocmask(),
. ,
136 .
www.books-shop.com
. fork() :
#include pid_t fork(void);
fork() "": ,
. :
, ; , getpid();
, ; , , ;
;
errno perror(),
.
fork()
(, if). ,
. 7.1 7.2 .
7.1.
/*********************************************************//*** ***//*********************************************************/int pchild;
if ( (pchild = fork()) == 0 ){