µ±Ç°Î»ÖãºLinux½Ì³Ì - Linux - Íø¼ÊÄ»ºóµÄÎÞÃûÓ¢ÐÛ ----IP Ô­ÀíʵÎñ̽ÃÜ

Íø¼ÊÄ»ºóµÄÎÞÃûÓ¢ÐÛ ----IP Ô­ÀíʵÎñ̽ÃÜ



        

    ÔÚInternetÈç´Ë·çÐеĽñÈÕ£¬Ò»°ãÈËËù̸Â۵ļ¸ºõÊÇÔÚÓ¦Ó÷½ÃæµÄ·¶³ë£¬ ºÜÉÙÈË»áÈ¥×¢Òâµ½InternetÍø·ºËÐÄÖзdz£ÖØÒªµÄÒ»»·¡ª IP(Internet Protocol) Íø¼ÊÍø·Э¶¨¡£Òò´ËÎÒÃÇÌر𿪱ٴËһרÀ¸£¬ ÆÚÍûÄÜÈø÷λ¶ÁÕ߸ü½øÒ»²½¡¢´Ó½Ï¼¼ÊõµÄ½Ç¶ÈÈ¥Á˽âInternetµÄÊÀ½ç

    IP(Internet ProtocolÍø ¼Ê Íø · Э ¶¨ )£¬ ÊÇ ÔÚ InternetÍø · ºË ÐÄ ·Ç ³£ ÖØ Òª µÄ Ò» »· £¬ ÒÔ OSI¶ø ÑÔ £¬ Ëü ÊÇ Î» ì¶ Íø · ×Ê ÁÏ Áª ½á ²ã (Data Link Layer)Óë ´« Êä ²ã (Transport Layer)Ö® ¼ä µÄ Íø · ²ã µÄ ´« Êä Э ¶¨ £® ¼ò µ¥ µÄ ˵ £¬ Ëü ±Ø Ðë °Ñ À´ ×Ô ÉÏ ²ã µÄ ×Ê ÁÏ ·Ö ·â ³ö È¥ £¬ ²¢ ÇÒ °Ñ À´ ×Ô Ï ²ã Íø · µÄ ×Ê ÁÏ ·Ö Îö £¬ »ã ×Ü £¬ È» áá ÔÚ Íù ÉÏ ²ã µÄ ´« Êä ²ã ¶ª È¥ £¬ ´Ë Íâ »¹ ±Ø Ðë ºÍ ICMPÕâ λ ÄÑ ÐÖ ÄÑ µÜ ºÏ ×÷ £¬ ÒÔ ÆÚ Ëæ ʱ ×Ô ÎÒ µ÷ Õû ºÍ ¼à ¿Ø Íø · ¡£

    ¡¡ ¡¡ IPÍø ¼Ê Íø · Э ¶¨ £¬ ¶à ÷á ¿á µÄ ÖÐ ÎÄ ·­ Òë £¬ ¹Ë Ãû ˼ Òå £¬ ÔÚ ²» ͬ µÄ Íø · ÉÏ £¬ Ö» Òª ÓÐ ÁË IP¡¡ Õâ ²ã ͨ Ѷ Э ¶¨ £¬ °Ñ Ï ²ã µÄ ʵ Ìå Íø · ½é Ãæ ³é Ïó »¯ £¬ ÎÒ ÃÇ ¾Í ¡¸ ³ö ÔË ¡¹ À² £¡ Ëü µ½ µ× ÊÇ Ôõ ÷á Ò» »Ø Ê ÄØ £¿ Ï Ãæ ÎÒ ÃÇ ¾Ù ³ö Ëü Õª Òª ¡£

    Ëü Ìá ¹© ÒÔ Ï µÄ ·þ Îñ :


    ¡¡ ¡¡ (1) ²» ¿É ¿¿ £¬ ·Ç Áª ½á ÐÔ µÄ ´« Êä ¡£
    ¡¡ ¡¡ (2) ÈÆ Â· µÄ Ñ¡ Ôñ ¡£
    ¡¡ ¡¡ (3) ÓÐ ÏÞ µÄ ×Ê ÁÏ ³¤ ¶È ¡£
    ¡¡ ¡¡ (4) ×Ê ÁÏ ·â °ü ºÍ ½â ·â °ü ¡£
    ¡¡ ¡¡ (5) Íø · Çé ¿ö µ÷ Õû ºÍ ·þ Îñ ¡£
    ¡¡ ¡¡ (6) ×÷ Ϊ ʵ Ìå Íø · ºÍ ´« Êä ²ã µÄ Ò» ¸ö ½é Ãæ ¡£


    µ« Ëü ²» Ìá ¹© ÒÔ Ï µÄ ·þ Îñ :

    ¡¡ ¡¡ (1) Á÷ Á¿ ¿Ø ÖÆ (Ö» Ìá ¹© Ò» ¼ò Ò× µÄ ×ö ·¨ )¡£
    ¡¡ ¡¡ (2) ´Î Ðò ¿Ø ÖÆ ¡£
    ¡¡ ¡¡ (3) ×Ê ÁÏ ¼ì ²é Âë (½ö ×ö HEADER µÄ ¼ì ²é Âë )¡£
    ¡¡ ¡¡ (4) Óâ ʱ ÖØ ËÍ ¡£
    ¡¡ ¡¡ (5) ×Ê ÁÏ ÖØ ¸² ¼ì ²é ¡£
    ¡¡ ¡¡ (6) ×Ê ÁÏ ¼ì Öª ¡£


    ¡¡ ¡¡ µ½ ´Ë £¬ ÎÒ ÃÇ ÒÑ ¾­ µã ³ö IPËù Ìá ¹© µÄ ÖØ Òª ·þ Îñ £® ÎÒ ÃÇ ½« ÔÚ ÒÔ Ï һ µã Ò» µã µÄ ˵ Ã÷ £» ¶ø Ëü ²» Ìá ¹© µÄ ·þ Îñ (Èç Á÷ Á¿ ¿Ø ÖÆ £¬ ´Î Ðò ¿Ø ÖÆ µÈ )Ëü µÄ ÉÏ ²ã TCP¶¼ ÓÐ Ìá ¹© ¡£ Ëù ÒÔ ÓÐ ÈË Ëµ Ëü ÊÇ Íø · Ä» áá ÎÞ Ãû Ó¢ ÐÛ £¬ Ò» µã Ò² ²» Ϊ ¹ý ¡£ ºÃ ¿µ £Á ¶¼ ±» ÉÏ ²ã ÇÀ ×ß ÁË £¬ Ê£ Ï À´ ¶¼ ÊÇ Ò» Щ ³Ô Á¦ ²» ÌÖ ºÃ µÄ ¹¤ ×÷ £¬ Ë­ ½Ð Ëü ÊÇ ÎÞ Ãû Ó¢ ÐÛ ÄØ ? ²» ¹ý ÔÚ Íø · ÊÀ ½ç ¾Í ÊÇ Èç ´Ë £¬ ¸÷ ²ã Ö® ¼ä Ïà »¥ ºÏ ×÷ £¬ ¸÷ ˾ Æä Ö° £¬ û ÓÐ Ë­ ÖØ Ë­ Çá ¡£

    ½Ò¿ªIPµÄÃæÉ´
    ¡¡ ¡¡ ÏÖ ÔÚ £¬ Èà ÎÒ ÃÇ ÁÐ ³ö ÒÔ Ì« Íø · (Ethernet)µÄ ¿ò ¼Ü £¨ ͼ Ò» £© £¬ IPµÄ ·â °ü ¸ñ ʽ £¨ ͼ ¶þ £© ºÍ OSIÓë Internet£¨ ͼ Èþ £© £¬ Èà ¶Á Õß Ò» ̽ Æä ® ɽ Õæ Ãæ Ä¿ ¡£ £¨ Ϊ ÁË ·½ ±ã ÌÖ ÂÛ £¬ ÎÒ ÃÇ ¼Ù Éè IPÊÇ ¼Ü ÔÚ EthernetÖ® ÉÏ £© ¡£
    ¡¡ ¡¡ Èç ¹û ÎÒ ÃÇ ÒÔ EthernetÀ´ ´« ×Ê ÁÏ £¬ ͼ Ò» µÄ Ethernet¿ò ¼Ü ×Ê ÁÏ À¸ ½« »á °ü º¬ ͼ ¶þ µÄ IP×Ê ÁÏ ·â °ü ¡£ ¶ø ͼ ¶þ µÄ ×Ê ÁÏ À¸ λ ½« »á °ü º¬ ÉÏ ²ã ͼ Èþ TCP/UDPµÄ ·â °ü £» ͬ Àí ÉÏ ²ã ·â °ü µÄ ×Ê ÁÏ À¸ ½« »á °ü º¬ ÉÏ ÉÏ ²ã µÄ Õû ¸ö ·â °ü £¬ ¶ø Íø · ¾Í ÊÇ Õâ Ñù Ò» ²ã Ò» ²ã µÄ ÔË ×÷ £¬ ·â °ü ÈÆ Â· £¬ Ö± µ½ µ½ ´ï ±Ë °¶ £® µ½ ´ï Ö® áá £¬ ÔÚ ½â ·â °ü £¬ °Ñ ÿ ²ã µÄ ×Ê ÁÏ ÝÍ È¡ ³ö À´ £¬ Àý Èç IP»á ¾ö ¶¨ °Ñ Æä ×Ê ÁÏ À¸ ÄÚ µÄ ¡¸ ·â °ü ¡¹ ¶ª ¸ø TCP¡¢ UDP»ò ICMP£¬ È» áá ¸÷ ²ã ÔÚ ¸÷ æ ¸÷ µÄ ¡£ ¾Í Õâ Ñù Õû ¸ö ·â °ü ¾Í ¿É ÔÚ Íø · ÉÏ »¥ Ïà ½» »» £¬ ´« µÝ Ѷ Ï¢ ÁË ¡£

    ¡¡ ¡¡ ÔÚ ½â ÊÍ Íê ·â °ü Ö® áá £¬ Èà ÎÒ ÃÇ »Ø Í· ¿´ ¿´ ͼ Ò» ¡¢ ͼ ¶þ ¸÷ À¸ λ µÄ Òâ Òå ¡£

    ¡ñ ÒÔ Ì« ¿ò ¼Ü ½é ÉÜ £º
    ¡¡ ¡¡ Ç° µ¼ (Preamble)£º 0Óë 1½» Ìæ µÄ 64λ Ôª Ëù ×é ³É £¬ ÊÕ ·½ ͬ ²½ Óà ¡£
    (1)Ä¿ µØ Ó² Ìå µØ Ö· (destination hardware address):½Ó ÊÕ ¶Ë µÄ ʵ Ìå λ Ö· £¬ ¹² 48 bits£® ¡¡ ¡¡ ¡¡ ¡¡ ¡¡ ¡¡ ¡¡ Ëù ν ʵ Ìå λ Ö· £¬ ¾Í ÊÇ Éú ²ú £Å £ô £è £å £ò £î £å £ô ¡¡ ½é Ãæ µÄ Ó² Ìå ³§ ÉÌ Ïò IEEEËù ¹º Âò µÄ Ò» ×é Á¬ Ðø µØ Ö· £® ³§ ÉÌ ÔÚ Éú ²ú ʱ £¬ °Ñ ´Ë ºÅ Âë ÉÕ Èë ¼´ ¿É £® Õâ Ñù Ò» À´ È« ÊÀ ½ç ¸÷ ¼Ò ²» ͬ µÄ ÒÔ Ì« Íø · ¿¨ ÖÆ Ôì ÉÌ µÄ Íø · ʵ Ìå λ Ö· ¾Í ²» »á ³å Í» ÁË £®
    (2)À´ Ô´ Ó² Ìå µØ Ö· (source hardware address):·¢ ËÍ ¶Ë µÄ ʵ Ìå λ Ö· £¬ Ò² ÊÇ 48 bits£® Õâ Àï Òª ×¢ Òâ µÄ ÊÇ £¬ Íø · ʵ Ìå λ Ö· ÊÇ ºÍ Íø ¼Ê λ Ö· £¨ IP¡¡ ¡¡ £Á £Ä £Ä £Ò £Å £Ó £Ó £© ¡¡ ¡¡ ¡¡ ¡¡ ¡¡ ¡¡ ¡¡ ÊÇ ²» ͬ µÄ £® ¼ò µ¥ µÄ ˵ £¬ ʵ Ìå λ Ö· ÊÇ ¸ø Íø · ¿¨ Óà µÄ £¬ Íø ¼Ê λ Ö· ÊÇ ¸ø IP¡¡ Óà µÄ £®
    (3)¿ò ¼Ü ÐÍ Ì¬ (frame type)£º 16λ Ôª Óà À´ ʶ ±ð ×Ê ÁÏ µÄ ÐÍ Ì¬ £®
    (4)¿ò ¼Ü ×Ê ÁÏ (frame data)£º ÉÏ ²ã ´« À´ µÄ ×Ê ÁÏ ±Ø Ðë ½é ì¶ 368 bits(46 bytes)ºÍ 12000 bits(1500 bytes)Ö® ¼ä £® »» ¾ä »° ˵ IP¡¡ ¶ª ¸ø £å £ô £è £å £ò £î £å £ô Çý ¶¯ ³Ì ʽ µÄ ·â °ü ²» ¿É ´ó ì¶ 1500¸ö byte£® ÔÚ Õâ Àï ÎÒ ÃÇ ¼´ µã ³ö ÁË Îª ʲ ÷á WINSOCKETµÄ MTU £¨ ×î ´ó ´« Êä µ¥ λ £© ÄÚ ¶¨ Öµ ÊÇ 1500λ Ôª ×é £® ÊÔ Ïë Ò» Ï £¬ ÎÒ ÃÇ ÔÚ Ã¿ ´« Ãë 10 megaλ Ôª µÄ ÒÔ Ì« Íø · ÉÏ ÎÒ ÃÇ Ã¿ ´Î Ö» ÄÜ ¶ª С ì¶ 1500¸ö λ Ôª ×é (12 Kλ Ôª )µÄ ·â °ü ¸ø Ethernet£¬ ʵ ÔÚ Âù ¿É Á¯ µÄ £® µ± È» Õâ ÔÚ ¸ß ËÙ Íø · ÖÐ Ò² ÊÇ ²» ÊÊ Óà µÄ £®
    (5)Ñ­ »· Âë (Cyclic Redundancy Check£¬ CRC)£º Óà ÒÔ Õì ²â ×Ê ÁÏ ´« Êä ¹ý ³Ì ÖÐ £¬ ×Ê ÁÏ ÊÇ ·ñ »á ·¢ Éú ´í Îó £® Óà Èí Ìå »ò Ó² Ìå È¥ ʵ ×÷ ¾ù ¿É £®


    ¡¡ ¡¡ ¼ò µ¥ °É ! ¾­ ÓÉ ÒÔ Ì« Íø · ¿¨ ´« ³ö ºÍ ÊÕ µ½ µÄ ×Ê ÁÏ ¾Í ÊÇ Èç ´Ë £¬ ¿´ Æð À´ ±¿ ±¿ µÄ £¬ ²» ¹ý È· ʵ Èç ´Ë £® ÏÖ ÔÚ £¬ Èà ÎÒ ÃÇ ÔÙ À´ ¿´ ¿´ IP¡¡ µÄ ×Ê ÁÏ ¸ñ ʽ £®

    (1)°æ ±¾ (Version)£º 4¸ö bit£® Ä¿ Ç° ×î РµÄ °æ ±¾ ÊÇ 4£¬ 1989Äê 5Ô ÖÆ ¶© £®
    (2)±ê Í· ³¤ (Internet Header Length)£º 4¸ö bit£® ÒÔ 32¸ö λ Ôª Ϊ µ¥ λ £® Èç ¹û ÎÞ IPÑ¡ Ïî µÄ »° £¬ Ëü µÄ Öµ Ϊ 5£¨ ¼´ ×î С Öµ £© £® ϸ ÐÄ µÄ ¶Á Õß ×Ô ¼º Ëã Ëã ¿´ £®
    (3)·þ Îñ ÐÍ Ì¬ (Service Type)£º 8¸ö bit£® ´« ¸ø · ÓÉ Æ÷ »ò Õ¢ µÀ Æ÷ £¬ ÎÒ ÃÇ Ëù Ï£ Íû µÄ ´« Êä Àà ÐÍ £® ¹² ·Ö Èþ ÖÖ 1. D-µÍ ÑÓ ³Ù 2. T-¸ß ÍÌ Í ÂÊ 3. R-¸ß ¿É ¿¿ ÐÔ
    (4)×Ü ³¤ ¶È (Total Length)£º 16¸ö bit£® Ëù ÔÊ Ðí µÄ ×î ´ó ³¤ ¶È Ϊ ¡¡ 2^16-1=65535 (±í Í· ¼Ó ÉÏ ×Ê ÁÏ ×Ü ³¤ )£®
    (5)ʶ ±ð ×Ö (Identification)£º 16¸ö bit£® ×Ê ÁÏ ·Ö ¸î áá £¬ µ± ³É ʶ ±ð Âë Óà £®
    (6)Æì ±ê (Flag)£º 3¸ö bit£® Ö¸ ʾ ÊÇ ·ñ ¿É ·Ö ¸î £®
    (7)·Ö ¶Î ²î ¾à Öµ (Fragment)£º 13¸ö bit£® ×Ê ÁÏ ±» ·Ö ¶Î áá £¬ ´Ë ·Ö ¶Î ÔÚ Ô­ ×Ê ÁÏ Á÷ µÄ λ Ö· £®
    (8)´æ »î ʱ ¼ä (Time to live)£º 8¸ö bit£® ÒÔ Ãë Ϊ µ¥ λ £¬ ±í ʾ IPÔ¤ ²â ´Ë ·â °ü ¿É ÔÚ Íø · ÉÏ µÄ ´æ »î ʱ ¼ä £® Õ¢ µÀ Æ÷ »á °Ñ ´Ë ×Ê ÁÏ ´« Êä µÄ Ê± ¼ä ¼õ È¥ ´æ »î ʱ ¼ä £¬ Èô С ì¶ Áã £¬ Ôò ·Å Æú ´Ë ·â °ü £®
    (9)Э ¶¨ (Protocol)£º 8¸ö bit£® ±í ʾ IPÉÏ ²ã µÄ Э ¶¨ ÄÚ ÈÝ £® Õâ Àï ¸æ Ëß ÁË IPÈí Ìå £¬ ÎÒ ÃÇ µÄ ×Ê ÁÏ Ó¦ ¶ª ÄÇ Ò» ²ã Èí Ìå È¥ ´¦ Àí £® ÒÔ Ï ÔÚ WINSOCKÖÐ µÄ Protocol file¶¼ ¿É ÕÒ µ½ £®



    ip 0 ¡¡icmp 1 tcp 6 udp 17


    (10)±ê Í· ¼ì ²é Âë (Header Checksum)£º 16¸ö bit£® ±í ʾ IP±í Í· (HEADER)µÄ ¼ì ²é Âë £®
    (11)À´ Ô´ IPµØ Ö· (Source Address)£º 32 bit£® Õâ Àï ¾Í ÊÇ Ëù ν µÄ IP ADDRESS

    Ä¿ Ç° ÔÚ InternetÖÐ £¬ Íø · ¹² ·Ö Îå ¼¶ £® Èç Ï ±í ͼ ËÄ £º

    AÀà Íø · µÄ IP ADDRESSÊÇ ½é ì¶ 0.0.0.1ÖÁ 128.0.0.0
    BÀà Íø · µÄ IP ADDRESSÊÇ ½é ì¶ 128.0.0.0ÖÁ 192.0.0.0
    CÀà Íø · µÄ IP ADDRESSÊÇ ½é ì¶ 192.0.0.0ÖÁ 224.0.0.0
    DÀà Íø · µÄ IP ADDRESSÊÇ ½é ì¶ 224.0.0.0ÖÁ 240.0.0.0
    EÀà Íø · µÄ IP ADDRESSÊÇ ½é ì¶ 240.0.0.0ÖÁ 255.255.255.254
    #×¢ Òâ IP ADDRESS 255.255.255.255Ϊ ¹ã ²¥ λ Ö· #


    ¾Ù ¸ö Àý ×Ó À´ ˵ £º Èô Äã µÄ IP ADDRESSΪ 140.113.207.141µÄ »° £¬ ÄÇ ÔÚ ¾Í ÊÇ BÀà Íø · £® ¶ø µç ÄÔ ¼´ ÒÔ 2½ø λ À´ ±í ʾ Õâ ¸ö λ Ö· £¬


    Òò 140=10001100 113=01110001 207=11001111 141=10001101

    ËùÒÔ¡¡140.113.207.141 = 10001100011100011100111110001101

    ¾ÍÊÇ IP ºÍ IP ¹µÍ¨µÄʵ¼Ê·½Ê½¡£


    Ä¿ µØ IPµØ Ö· (Destination Address)£º 32 bits£® Àí ÓÉ Í¬ ÉÏ ¡£
    IPÑ¡ Ïî (Option)£º ¿É ÓÐ ¿É ÎÞ £® Õâ Àï ´ó ¶à ÊÇ Óà ÔÚ ×Ê ÁÏ ¶Î µÄ ³ý ´í »ò ²â ÊÔ ¡£
    ²¹ ×ã ³¤ ¶È (Padding)£º ³¤ ¶È ²» ¶¨ £® Ëü »á Ìî ³ä IP±í Í· (HEADER)ʹ µÃ ±í Í· ÄÜ ±» 32Õû ³ý £¬ ¼Ó ¿ì µç ÄÔ ´¦ Àí ¡£
    ×Ê ÁÏ (IP Data)£º Õâ Àï ¾Í ÊÇ ÓÉ ÉÏ ²ã µÄ TCP / UDP×Ê ÁÏ Ìî ³ä £¬ »ò ͬ ²ã µÄ ICMP¡£

    IPËùÌṩµÄ·þÎñ
    ¡¡ ¡¡ ¿´ Ñù ×Ó ¶à ÁË Õâ Щ À¸ λ £¬ IP²ã ±È ½Ï ´Ï Ã÷ £¬ Ê ʵ ÉÏ ÔÚ Íø · µÄ ÕÜ Ñ§ Àï µÄ È· ÊÇ Õâ Ñù £¬ Ô½ ÉÏ ²ã µÄ Э ¶¨ £¬ ¹¦ ÄÜ Ô½ Ç¿ Ò² Ô½ ºÃ Óà £¬ Ó² Ìå Ò² Ô½ ³é Ïó »¯ £¬ µ± È» ¶Ô ʹ Óà Õß ¶ø ÑÔ Ò² Ô½ ºÃ Óà £® µ« ´Ï Ã÷ ¹é ´Ï Ã÷ £¬ Ëü »¹ ÊÇ ÓРȱ µã µÄ £® Æä ÖÐ µÄ ²» ¿É ¿¿ ÐÔ (unreliable) ºÍ ·Ç Áª ½á ÐÔ (connectionless)¡¡ µÄ ´« Êä ¾Í ÊÇ Ëü ×î ´ó µÄ Ö Ãü ÉË ¡£
    ¡¡ ¡¡ Ëù ν ²» ¿É ¿¿ ÐÔ ¼´ ÊÇ £¬ ·¢ ËÍ ¶Ë »ò ½Ó ÊÕ ¶Ë ¶Ô ì¶ ·Ö ·â ¿É ÄÜ ÒŠʧ £¬ ÖØ ¸´ £¬ ÑÓ ³Ù »ò ʧ Ðò ¶¼ ÎÞ ·¨ Õì ²â »ò ±» ͨ Öª £® ¶ø ·Ç Áª ½á ÐÔ ÊÇ Ö¸ ¶Ô ì¶ Ò» ϵ ÁÐ µÄ ·â °ü ¿É ÄÜ ¾­ ÓÉ ²» ͬ µÄ · ¾¶ Ç° Íù Ä¿ µÄ µØ £¬ Æä ÖÐ ÓÐ ¡¡ Щ ÄÜ »á ÒŠʧ £® ¶ø Õâ ¾Í ÊÇ ¸ø ÉÏ ²ã Íø · ±í ÏÖ µÄ »ú »á ÁË £® TCP (Transmission Comtrol Protocol)¿É ¿¿ ×Ê ÁÏ ´« Êä ·þ Îñ £¬ ¾Í Òò ´Ë µ® Éú £® Ëü Àû Óà Èí Ìå µÄ ¼¼ Êõ £¬ ʹ µÃ ¾­ ÓÉ IP´« ³ö µÄ ¡¡ ×Ê ÁÏ ÄÜ ¹» ¸ü ÎÈ ¶¨ £¬ ¸ü ÓРЧ ÂÊ µÄ µ½ ´ï ¶Ô ·½ £® µ« IPµÄ ·Ç Áª ½á ·þ Îñ ²¢ ·Ç ÊÇ ²» ºÃ µÄ £¬ Òò Ϊ IP¡¡ ÔÚ Íø · ²ã ÓÐ Ëü µÄ ʵ ¼Ê ¿¼ Á¿ £¬ ¶ø Ëü û ÓÐ ±Ø Òª ³Ô Á¦ ²» ÌÖ ºÃ µÄ È¥ È¡ ´ú ÉÏ ²ã Íø · £¬ ¶ø Ó° Ïì ÁË Õû ¸ö Íø · ´« Êä µÄ Ð§ ÄÜ ¡£

    ¡¡ ¡¡ Áí Íâ ÓÉ IP±í Í· ÖÐ µÄ ×Ü ³¤ ¶È À¸ (Total Length)¿É Öª £¬ Ëü ×î ´ó Ò» ´Î ¿É ÒÔ ¶ª 65535 byte£® Ëä È» Èç ´Ë £¬ Õæ Õý Òª ´« Êä ʱ µÄ ´ó С »¹ ÊÇ µÃ ¾ö ¶¨ ì¶ Ï ²ã Íø · (Èç ÒÔ Ì« Íø · µÄ MTU=1500)£¬ Ëù ÒÔ £¬ IP»á °Ñ ÉÏ ²ã À´ µÄ ´ó ¿é ×Ê ÁÏ ·Ö ¸î (fragment)£¬ Àû Óà ʶ ±ð ×Ö £¬ Æì ±ê £¬ ·Ö ¶Î ²î ¾à Öµ À´ ¿Ø ÖÆ £¬ È» áá ÔÙ ÓÉ ½Ó ÊÕ ¶Ë ¼Ó ÒÔ ×é ºÏ £¬ ÔÙ ¶ª »¹ ¸ø ÉÏ ²ã £® Èç ´Ë Ò» À´ IP¾Í ¿É ÒÔ Ô² Âú µÄ ´ï ³É ÉÏ ²ã Ëù ½» ´ý µÄ ÈÎ Îñ ÁË £® ͬ Ñù µÄ £¬ Ò² ¾Í ÊÇ ÓÉ ì¶ IPµÄ µ¯ ÐÔ ´ó £¬ Ëü ¿É ÒÔ ¼Ü ÔÚ ¸÷ ÖÖ ²» ͬ µÄ Íø · ʵ Ìå Ö® ÉÏ Èç ISDN»ò SLIPµÈ ¡£

    ¡¡ ¡¡ »¹ ÓÐ Ò» ¸ö Öµ µÃ Éî ˼ µÄ ÎÊ Ìâ £® ÄÇ ¾Í ÊÇ ¼È È» ÓÐ ÁË Ó² Ìå ʵ Ìå λ Ö· £¬ ÄÇ ¸É Âï ÓÖ ¶à Éú ³ö Ò» ¸ö ¡¡ IP ADDRESS£® Õâ ÊÇ Òò Ϊ Òª ÈÆ Â· µÄ ¹Ø ϵ £¬ ¶à ÁË IP ADDRESS£¬ · ÓÉ Æ÷ »ò Õ¢ µÀ Æ÷ ¿É ÓÉ Ñ§ Ï° ¡¡ Öª µÀ Õû ¸ö Íø · µÄ ¼Ü ¹¹ £¬ ½ø ¶ø ¿ì ËÙ µØ °Ñ ·â °ü ËÍ ÖÁ Õý È· µÄ µØ µã £¬ ¼Ó ËÙ Íø ¼Ê ¼ä ×Ê ÁÏ µÄ ´« µÝ ¡£

    ¡¡ ¡¡ µ± È» ÈÆ Â· ¹¦ ÄÜ Ò² ÊÇ IP±Ø ±¸ µÄ ¹¦ ÄÜ Ö® Ò» £® Õâ ²¿ ·Ý ´ó ¶à ÓÉ Â· ÓÉ Æ÷ (ROUTER)»ò Õ¢ µÀ Æ÷ (GETWAY)À´ °ï æ £¬ Çë ×¢ Òâ £¬ IPÖÐ µÄ À´ Ô´ µØ Ö· (source address)ºÍ Ä¿ µÄ µØ Ö· (destination address)ÔÚ ÈÆ Â· µÄ ¹ý ³Ì Ö® ÖÐ ÊÇ ²» »á ±» ¸Ä ±ä µÄ £» Èç ¹û ±» ¸Ä ±ä £¬ Íø · ²ã Ò» ¶¨ ´ó ÂÒ £® Ψ Ò» ¿É ÄÜ ±» ¸Ä ±ä µÄ ÊÇ Ä¿ µØ Ó² Ìå µØ Ö· (destination hardware address)»ò ¡¡ À´ Ô´ Ó² Ìå µØ Ö· (source hardware address)£® ´Ë Íâ £¬ µ± È» Íø · ²ã ÖÐ £¬ Ëü ×Ô ¼º Ò² ÓÐ ÖØ Íø · ÖРѧ À´ µÄ ÈÆ Â· ±í £¬ Ö» ÊÇ ¹¦ ÄÜ Ã» ÓР· ÓÉ Æ÷ »ò Õ¢ µÀ Æ÷ Ç¿ ´ó ¶ø ÒÓ ¡£

    ¡¡ ¡¡ ÔÚ Íø · ²ã ´« ËÍ ×Ê ÁÏ Ö® ÖÐ £¬ IP¡¡ »á Àû Óà ICMP¡¡ ºÍ Æä â· °ì ¹µ ͨ ÓÐ ÎÞ £® µ± È» Õâ ÊÇ Îª ÁË ´ï µ½ Íø · µÄ ÎÈ ¶¨ ÐÔ ÒÔ ¼° ´« Êä Ч Òæ Ëù Éè ¼Æ ³ö À´ µÄ £¬ ·ñ Ôò ÔÚ Ã£ ã µÄ Íø º£ µ± ÖÐ £¬ Íø · ²ã Óö µ½ ´í Îó Ò» Ö± ÖØ ËÍ ×Ê ÁÏ £¬ Õû ¸ö Íø · Ò» ¶¨ »á ËÀ µÃ ºÜ ÄÑ ¿´ , ÄÇ ¸ü »Ì ÂÛ ¼Ü ÔÚ IPÖ® ÉÏ µÄ ͨ Ѷ Э ¶¨ ¡£ £¨ Ï һ ÆÚ ½« Ïê ϸ ̽ ÌÖ ICMP£¬ Çë ¶Á Õß ÊÓ Ä¿ ÒÔ ´ý £©

    ¡¡ ¡¡ Èà ÎÒ ÃÇ ¶Ô IP×÷ ¸ö С ½á ; Ëü ÊÇ µã ¶Ô µã µÄ Áª ½á , ´Ó TCP, UDP»ò ICMPÈ¡ µÃ ×Ê ÁÏ £¬ È» áá ¾ö ¶¨ ÊÇ ·ñ ·Ö ¸î ÉÏ ²ã ×Ê ÁÏ £¬ Ñ° ÕÒ IP ADDRESS£¬ ÒÔ ¼° ʵ Ìå λ Ö· £¬ È» áá Ñ¡ Ôñ · ¾¶ £¬ ÖÆ ×÷ ·â °ü £¬ ×î áá Àû Óà ÒÔ Ì« Íø · µÄ Çý ¶¯ ³Ì ʽ ËÍ ÖÁ Ô¶ ·½ £® ͬ Àí µ± Ëü ÊÕ µ½ ×Ê ÁÏ Ê± £¬ Ëü »á ¿´ ¿´ ´Ë ·â °ü ÊÕ ·½ µÄ IP ADDRESSÊÇ ·ñ ÊÇ ×Ô ¼º µÄ IP ADDRESS£¬ Èô ÊÇ £¬ ¾Í Íù TCP UDP»ò ICMP·Ö ·â £® Èô ²» ÊÇ £¬ Ôò °ï Õâ ·â °ü ÈÆ Â· £¬ ʹ Ëü µ½ ´ï Ä¿ µÄ µØ ¡£

    ¡¡ ¡¡ ÒÔ Ï ÁÐ ³ö Ò» С ²¿ ·Ý LINUX IPʵ ×÷ µÄ Ô­ ʼ ³Ì ʽ £¬ Ï£ Íû ¶Á Õß ¸ü ÄÜ Ìå »á ³ö Ëü µÄ µÀ Àí ¡£

    µÚ Ò» ¸ö Àý ×Ó ÊÇ IPËü Èç ºÎ ½¨ Á¢ ·â °ü ±ê Í· ¡£



    /*

    * This routine builds the appropriate hardware/IP headers for

    * the routine. It assumes that if *dev != NULL then the

    * Protocol knows what its doing, otherwise it uses the

    * routing/ARP tables to select a device struct.

    */

    int

    ip_build_header(struct sk_buff *skb, unsigned long saddr, unsigned long daddr,

    struct device **dev, int type, struct options *opt, int len, int tos, int ttl)

    {

    static struct options optmem;

    struct iphdr *iph;

    struct rtable *rt;

    unsigned char *buff;

    unsigned long raddr;

    static int count = 0;

    int tmp;



    if (saddr == 0)

    saddr = my_addr();



    DPRINTF((DBG_IP, "ip_build_header (skb=%X, saddr=%X, daddr=%X, *dev=%X,n"

    " type=%d, opt=%X, len = %d)n",

    skb, saddr, daddr, *dev, type, opt, len));



    buff = skb->data;



    /* See if we need to look up the device. */

    if (*dev == NULL) {

    rt = rt_route(daddr, &optmem);

    if (rt == NULL)

    return(-ENETUNREACH);



    *dev = rt->rt_dev;

    if (saddr == 0x0100007FL && daddr != 0x0100007FL)

    saddr = rt->rt_dev->pa_addr;

    raddr = rt->rt_gateway;



    DPRINTF((DBG_IP, "ip_build_header: saddr set to %sn", in_ntoa(saddr)));

    opt = &optmem;

    } else {

    /* We still need the address of the first hop. */

    rt = rt_route(daddr, &optmem);

    raddr = (rt == NULL) ? 0 : rt->rt_gateway;

    }

    if (raddr == 0)

    raddr = daddr;



    /* Now build the MAC header. */

    tmp = ip_send(skb, raddr, len, *dev, saddr);

    buff += tmp;

    len -= tmp;



    skb->dev = *dev;

    skb->saddr = saddr;

    if (skb->sk) skb->sk->saddr = saddr;



    /* Now build the IP header. */



    /* If we are using IPPROTO_RAW, then we don need an IP header, since

    one is being supplied to us by the user */



    if(type == IPPROTO_RAW) return (tmp);



    iph = (struct iphdr *)buff;

    iph->version = 4;

    iph->tos = tos;

    iph->frag_off = 0;

    iph->ttl = ttl;

    iph->daddr = daddr;

    iph->saddr = saddr;

    iph->Protocol = type;

    iph->ihl = 5;

    iph->id = htons(count++);



    /* Setup the IP options. */

    #ifdef Not_Yet_Avail

    build_options(iph, opt);

    #endif



    return(20 + tmp); /* IP header plus MAC header size */

    }


    ¡¡ ¡¡ Áã Áã ×Ü ×Ü µÄ ½² ÁË Ò» ´ó ¶Ñ £¬ ÎÒ Ïë ¸÷ λ ¶Á Õß ¶Ô Æä Ó¦ ÓÐ ¸ü Éî Ò» ²ã µÄ Ìå »á ºÍ Êµ Îñ . Æä ʵ ѧ Íø · ²¢ ²» ÄÑ £¬ ×Ê ÁÏ ¾Í ÊÇ Õâ Ñù Ò» ²ã ÓÖ Ò» ²ã µÄ Íù Ï ¶ª ºÍ Íù ÉÏ ÊÕ . ¶ø IP¾Í ÊÇ Õâ λ ÀÍ ¿à ¹¦ ¸ß µÄ ÎÞ Ãû Ó¢ ÐÛ ¡£
    ¡¡ ¡¡ Áí Íâ ÓÐ ÐË È¤ µÄ ¶Á Õß ¿É ²Î ÔÄ RFC791£¬ 1010£¬ 815£¬ ÒÔ ¼° 894¿É »ñ µÃ ¸ü Ïê ϸ µÄ ¼¼ Êõ ×Ê ÁÏ £¨ ÔÚ nctuccca»ò nic.ddn.mil¶¼ ¿É ÕÒ µ½ £© £¬ »ò Ï ÁÐ µÄ ²Î ¿¼ Êé Ä¿ £¨ Ô­ ÎÄ Êé ¾ù ÓÐ ÖÐ Òë ±¾ £© ¡£ ÔÛ ÃÇ Ï ÆÚ ¼û £¡

    ·¢²¼ÈË:I like Linux À´×Ô:·Ç³£Linux