464

Создание Сетевых Приложений в Среде Linux

  • Upload
    natalia

  • View
    92

  • 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

    [email protected]

  • : 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

    [email protected]

  • 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

    [email protected]

  • #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

    [email protected]

  • 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

    [email protected]

  • . , . ," ".

    , , , : 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

    [email protected]

  • 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

    [email protected]

  • , , , . 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

    [email protected]

  • , .

    . , . "" ,

    . (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

    [email protected]

  • . ,

    .

    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

    [email protected]

  • 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

    [email protected]

  • , .

    . 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

    [email protected]

  • ,

    . , , . . , , ., , .

    .

    ,

    ,

    .

    . , ,

    , , . ! , ?

    , ,

    , .

    .

    , , ,

    , . ,

    .

    , .

    , .

    , .

    . .

    :

    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 ){