ÍøÂçºÍLinuxÊÇÃÜÇÐÏà¹ØµÄ¡£´ÓijÖÖÒâÒåÀ´ËµLinuxÊÇÒ»¸öÕë¶ÔInternetºÍWWWµÄ²úÆ·¡£ËüµÄ¿ª·¢ÕߺÍÓû§ÓÃWebÀ´½»»»ÐÅϢ˼Ïë¡¢³ÌÐò´úÂ룬¶øLinux×ÔÉí³£³£±»ÓÃÀ´Ö§³Ö¸÷ÖÖ×éÖ¯»ú¹¹µÄÍøÂçÐèÇó¡£ÕâÒ»Õ½²µÄÊÇLinuxÈçºÎÖ§³ÖÈçTCP/IPµÈÍøÂçÐÒéµÄ¡£
TCP/IPÐÒé×î³õÊÇΪ֧³ÖARPANET£¨Ò»¸öÃÀ¹úÕþ¸®×ÊÖúµÄÑо¿ÐÔÍøÂ磩ÉϼÆËã»úͨѶ¶øÉè¼ÆµÄ¡£ARPANET Ìá³öÁËÒ»Ð©ÍøÂç¸ÅÄîÈç°ü½»»»ºÍÐÒé·Ö²ã£¨Ò»¸öÐÒéʹÓÃÁíÒ»¸öÐÒéÌṩµÄ·þÎñ£©¡£ARPANETÓÚ1988ÄêÒþÍË£¬µ«ÊÇËüµÄ¼Ì³ÐÈË(NSF1 NETºÍInternet£©È´±äµÃ¸ü´óÁË¡£ÏÖÔÚÎÒÃÇËùÊìÖªµÄÍòÎ¬ÍøWorld Wide Web¾ÍÊÇ´ÓARPANETÑݱä¹ýÀ´µÄ£¬Ëü×ÔÉíÖ§³ÖTCP/IPÐÒé¡£Unix TM ±»¹ã·ºÓ¦ÓÃÓÚARPANET£¬ËüµÄµÚÒ»¸öÍøÂç°æ±¾ÊÇ4.3 BSD¡£LinuxµÄÍøÂçʵÏÖÊÇÒÔ4.3 BSDΪģÐ͵ģ¬ËüÖ§³ÖBSD sockets(¼°Ò»Ð©À©Õ¹)ºÍËùÓеÄTCP/IPÍøÂ硣ѡÕâ ¸ö±à³Ì½Ó¿ÚÊÇÒòΪËüºÜÁ÷ÐУ¬²¢ÇÒÓÐÖúÓÚÓ¦ÓóÌÐò´ÓLinuxÆ½Ì¨ÒÆÖ²µ½ÆäËüUnix TM ƽ̨¡£
ͨ³££¬IPµØÖ·ÊDZȽÏÄѼǵ쬶øÃû³ÆÔòÈÝÒ×¶àÁË£¬Ïólinux.acme.com¾Í±È16.42.0.9ÒªºÃ¼ÇһЩ¡£µ«ÊDZØÐëÓÐһЩ»úÆ÷À´½«ÍøÂçÃû³Æ×ª±äΪIPµØÖ·¡£ÕâЩÃû³Æ±»¾²Ì¬µØ¶¨ÒåÔÚ /etc/hosts ÎļþÖлòÕßLinuxÄÜÇëÇóÓòÃû·þÎñÆ÷(DNS)À´½âÎöËü¡£ÕâÖÖÇé¿öÏ£¬±¾µØÖ÷»ú±ØÐëÖªµÀÒ»¸ö»òÒ»¸öÒÔÉϵÄDNS·þÎñÆ÷²¢ÇÒÕâЩ·þÎñÆ÷Òª½«ÆäÃû³ÆÖ¸¶¨µ½ /etc/resolv.conf ÖС£
µ±ÄãÏëÒªÓëÁíһ̨¼ÆËã»úÁ¬½Óʱ£¬±ÈÈç˵ÄãÏëÔĶÁÒ»¸öWebÒ³£¬ÄãµÄIPµØÖ·¾Í»á±»ÓÃÀ´ÓëÄÇ̨»úÆ÷½»»»Êý¾Ý¡£ÕâЩÊý¾Ý±»°üº¬ÔÚһЩIP°üÖУ¬Ã¿¸öIP°ü¶¼ÓÐÒ»¸öIPÍ·ÓÃÀ´°üº¬Ô´»úÆ÷µÄIPµØÖ·ºÍÄ¿µÄ»úÆ÷µÄIPµØÖ·£¬Ð£ÑéºÍÒÔ¼°ÆäËüµÄÓÐÓÃÐÅÏ¢¡£IP°üµÄУÑéºÍÓÃÀ´ÈÃIP°üµÄ½ÓÊÕ¶ËÅжÏIP°üÊÇ·ñÔÚ´«Êä¹ý³ÌÖз¢Éú´íÎ󣬯©Èç˵ÓÉÓڵ绰Ïß·µÄÎÊÌâ¶øÒýÆðµÄ´íÎó¡£Ó¦ÓóÌÐòÏëÒª´«ÊäµÄÊý¾Ý¿ÉÄܱ»·Ö³ÉºÜ¶à¸öÈÝÒ×´¦ÀíµÄС°ü¡£IPÊý¾Ý°üµÄ´óСÊǸù¾Ý´«ÊäýÌåµÄ±ä»¯¶ø²»Í¬µÄ£»ÒÔÌ«Íø°üͨ³£±ÈPPP°üÒª´óһЩ¡£Ä¿µÄÖ÷»úÔÚ½«Êý¾ÝË͸ø½ÓÊÕ¶ËÓ¦ÓóÌÐòǰÐèÒª½«ÕâЩ°üÖØÐÂÞÕ×°ÆðÀ´¡£Èç¹ûÄã´ÓÒ»¸ö±È½ÏÂýµÄÕ¾µã·ÃÎÊÒ»¸öÓдóÁ¿Í¼ÏóµÄWebÒ³£¬¾Í»á¿´µ½Êý¾ÝµÄ·Ö¸îÓëÖØ×é¡£
ͬһ×ÓÍøÄÚµÄÖ÷»úÖ®¼ä¿ÉÒÔÖ±½Ó·¢ËÍIP°ü£¬¶øÆäËüµÄIP°ü½«±»Ë͵½Ò»¸öÌØ¶¨µÄÖ÷»ú£ºÍø¹Ø¡£Íø¹Ø£¨»ò·ÓÉÆ÷£©ÊÇÓÃÀ´Á¬½Ó¶à¸öIP×ÓÍøµÄ£¬ËüÃÇ»áת·¢ËÍ´Ó×ÓÍøÄÚÀ´µÄIP°ü¡£ÀýÈ磬Èç¹û×ÓÍø16.42.1.0ºÍ16.42.0.0Ö®¼äͨ¹ýÒ»¸öÍø¹ØÏàÁ¬£¬ÄÇôÈκδÓ×ÓÍø0·¢Íù×ÓÍø1µÄ°ü±ØÐëÓÉÍø¹ØÖ¸Òý£¬Íø¹Ø¿ÉÒÔ°ïÕâЩ°üÕÒµ½ÕýÈ·µÄ·Ïß¡£±¾µØÖ÷»ú½¨Á¢Â·ÓɱíÓÃÒÔΪIP°üÕÒµ½ÕýÈ·µÄ»úÆ÷¡£Ã¿Ò»¸öÄ¿µÄIP¶¼ÓÐÒ»¸öÌõÄ¿ÔÚ·ÓɱíÖУ¬ÓÃÒÔ¸æËßLinux½«IP°üË͵½ÄÄһ̨Ö÷»ú¡£ÕâЩ·ÓɱíÊÇËæÍøÂçµÄÍØÆË½á¹¹±ä»¯¶ø¶¯Ì¬±ä»¯µÄ¡£
IPÐÒéÊÇÒ»¸ö´«Êä²ãµÄÐÒ飬ÆäËüÐÒé¿ÉÒÔÓÃËüÀ´´«ÊäÊý¾Ý¡£´«Êä¿ØÖÆÐÒ飨TCP£©ÊÇÒ»¸ö¿É¿¿µÄ¶Ë¶Ô¶ËµÄÐÒ飬ËüÓÃIPÀ´´«ËͺͽÓÊÕËü×Ô¼ºµÄ°ü¡£ÕýÈçIP°üÓÐËü×Ô¼ºµÄÍ·Ò»Ñù£¬TCPÒ²ÓÐËü×Ô¼ºµÄÍ·¡£TCPÊÇÒ»¸öÃæÏòÁ¬½ÓµÄÐÒ飬Á½¸öÍøÂçÓ¦ÓóÌÐòͨ¹ýÒ»¸öÐéÁ¬½ÓÏàÁ¬£¬¼´Ê¹ËüÃÇÖ®¼ä¿ÉÄܸôןܶà×ÓÍø¡¢Íø¹Ø¡¢Â·ÓÉÆ÷¡£TCP¿É¿¿µØ´«ËͺͽÓÊÕÁ½Ó¦ÓóÌÐò¼äµÄÊý¾Ý£¬²¢±£Ö¤Êý¾Ý²»»á¶ªÊ§¡£µ±ÓÃIPÀ´´«ÊäTCP°üʱ£¬IP°üµÄÊý¾Ý¶Î¾ÍÊÇTCP°ü¡£Ã¿Ò»¸öͨѶÖ÷»úµÄIP²ã¸ºÔð´«ËͺͽÓÊÕIP°ü¡£Óû§Êý¾Ý±¨ÐÒ飨UDP£©Ò²ÓÃIP²ãÀ´´«ÊäËüµÄ°ü£¬²»ÏóTCP£¬UDP²»ÊÇÒ»¸ö¿É¿¿µÄÐÒ飬µ«ËüÌṩÁËÒ»ÖÖÊý¾Ý±¨·þÎñ¡£Óжà¸öÐÒé¿ÉÒÔʹÓÃIP²ã£¬½ÓÊÕIP°üµÄʱºò±ØÐèÖªµÀ¸ÃIP°üÖеÄÊý¾ÝÊÇÄĸöÉϲãÐÒéµÄ£¬Òò´ËIP°üÍ·ÖÐÓиöÒ»×Ö½Ú°üº¬×ÅÐÒé±êʶ·û¡£ÀýÈ磬µ±TCPÇëÇóIP²ã´«ÊäÒ»¸öIP°üʱ£¬IP°üµÄ°üÍ·ÖÐÓñêʶ·ûÖ¸Ã÷¸Ã°ü°üº¬Ò»¸öTCP°ü£¬IP½ÓÊÕ²ãÓøñêʶ·û¾ö¶¨ÓÉÄÄÒ»ÐÒéÀ´ ½ÓÊÕÊý¾Ý£¬Õâ¸öÀý×ÓÖÐÊÇTCP²ã¡£µ±Ó¦ÓóÌÐòͨ¹ýTCP/IP½øÐÐͨѶʱ£¬ËüÃDz»½öÒªÖ¸¶¨Ä¿±êµÄIPµØÖ·£¬¶øÇÒ»¹ ÒªÖ¸¶¨Ó¦ÓõĶ˿ڵØÖ·¡£Ò»¸ö¶Ë¿ÚµØÖ·Î¨Ò»µØ±êʶһ¸öÓ¦Ó㬱ê×¼µÄÍøÂçÓ¦ÓÃʹÓñê×¼µÄ¶Ë¿ÚµØÖ·£»È磬Web ·þÎñʹÓÃ80¶Ë¿Ú¡£ÕâЩÒѵǼǵĶ˿ڵØÖ·¿ÉÔÚ /etc/services Öп´µ½¡£
ÕâÒ»²ãµÄÐÒé²»½ö½öÊÇTCP¡¢UDPºÍIP¡£IPÐÒé²ã±¾ÉíÓúܶàÖÖÎïÀíý½é½«IP°ü´ÓÒ»¸öÖ÷»ú´«µ½ÆäËüÖ÷»ú¡£ÕâЩý½é¿ÉÒÔ¼ÓÈëËüÃÇ×Ô¼ºµÄÐÒéÍ·¡£ÒÔÌ«Íø²ã¾ÍÊÇÒ»¸öÀý×Ó£¬µ«PPPºÍSLIP²»ÊÇÕâÑù¡£Ò»¸öÒÔÌ«ÍøÂçÔÊÐíºÜ¸öÖ÷»úͬʱÁ¬½Óµ½Í¬Ò»¸ùÎïÀíµçÀ¡£´«ÊäÖеÄÿһ¸öÒÔÌ«ÍøÖ¡¿ÉÒÔ±»ËùÓÐÖ÷»ú¿´¼û£¬Òò´ËÿһÒÔÌ«ÍøÉ豸ÓиöΨһµÄµØÖ·¡£Èκδ«Ë͸ø¸ÃµØÖ·µÄÒÔÌ«ÍøÖ¡±»ÓиõØÖ·µÄÒÔÌ«ÍøÉ豸½ÓÊÕ£¬¶øÆäËüÖ÷»úÔòºöÂÔ¸ÃÖ¡¡£Õâ¸öΨһµÄµØÖ·ÄÚÖÃÓÚÿһÒÔÌ«ÍøÉ豸ÖУ¬Í¨³£ÊÇÔÚÍø¿¨³ö³§Ê±¾ÍдÔÚSROM2ÖÐÁË¡£ÒÔÌ«ÍøµØÖ·ÓÐ6¸ö×Ö½Ú³¤£¬È磺 08-00-2b-00-49-A4 ¡£Ò»Ð©ÒÔÌ«ÍøµØÖ·ÊDZ£Áô¸ø¶àµã´«ËÍÓõģ¬ËÍÍùÕâЩµØÖ·µÄÒÔÌ«ÍøÖ¡½«±»ÍøÉÏËùÓеÄÖ÷»ú½ÓÊÕ¡£ÒÔÌ«ÍøÖ¡¿ÉÒÔЯ´øºÜ¶àÖÖÐÒ飨×÷ΪÊý¾Ý£©£¬ÈçIP°ü£¬²¢ÇÒÒ²°üÀ¨ËüÃÇÍ·ÖеÄÐÒé±êʶ·û¡£ÕâʹµÃÒÔÌ«Íø²ãÄÜÕýÈ·µØ½ÓÊÕIP°ü²¢½«ËüÃÇ´«¸øIP²ã¡£
ΪÁËÄÜͨ¹ýÏóÒÔÌ«ÍøÕâÑùµÄ¶àÁ¬½ÓÐÒé´«ËÍIP°ü£¬IP²ã±ØÐëÕÒµ½Ã¿Ò»IPÖ÷»úµÄÒÔÌ«ÍøµØÖ·¡£IPµØÖ·½ö½öÊÇÒ»¸öµØÖ·¸ÅÄÒÔÌ«ÍøÉ豸ÓÐËüÃÇ×ÔÉíµÄÎïÀíµØÖ·¡£´ÓÁíÒ»·½ÃæËµ£¬IPµØÖ·ÊÇ¿ÉÒÔ±»ÍøÂç¹ÜÀíÔ±¸ù¾ÝÐèÒªÀ´·ÖÅäºÍÔÙ·ÖÅäµÄ£¬¶øÍøÂçÓ²¼þÖ»¶Ôº¬ÓÐËüÃÇ×Ô¼ºµÄÎïÀíµØÖ·»ò¶àµã´«Ë͵ØÖ·µÄÒÔÌ«ÍøÖ¡×÷³öÏìÓ¦¡£LinuxÓõØÖ· ½âÎöÐÒ飨ARP£©À´ÔÊÐí»úÆ÷½«IPµØÖ·×ª±ä³ÉÕæÕýµÄÓ²¼þµØÖ·£¬ÈçÒÔÌ«ÍøµØÖ·¡£Èç¹ûÒ»¸öÖ÷»úÏëÖªµÀijһIPµØÖ·¶ÔÓ¦µÄÓ²¼þµØÖ·£¬Ëü¾ÍÓÃÒ»¸ö¶àµã´«Ë͵ØÖ·½«Ò»¸ö°üº¬Á˸ÃIPµØÖ·µÄARPÇëÇó°ü·¢¸øÍøÉÏËùÓнڵ㣬ӵÓиÃIPµØÖ·µÄµÄÄ¿±êÖ÷»úÔòÏìÓ¦Ò»¸ö°üº¬ÎïÀíÓ²¼þµØÖ·µÄARPÓ¦´ð¡£ARP²»½ö½ö¾ÖÏÞÓÚÒÔÌ«ÍøÉ豸£¬ËüÄܹ»ÓÃÀ´ÔÚÆäËüһЩÎïÀíý½éÉϽâÎöIPµØÖ·£¬ÈçFDDI¡£ÄÇЩ²»Ö§³ÖARPµÄÍøÂçÉ豸»á±»±ê¼Ç³öÀ´£¬Linux½«²»»áÓÃARP¡£»¹ÓÐÒ»¸öÌṩÏà·´¹¦Äܵķ´ÏòµØÖ·½âÎöÐÒ飨RARP£©£¬ÓÃÀ´½«ÎïÀíÍøÂçµØÖ·×ª±äΪIPµØÖ·¡£ÕâÒ»ÐÒé³£³£±»Íø¹ØÓÃÀ´ÏìÓ¦°üº¬Ô¶³ÌÍøÂçIPµØÖ·µÄARPÇëÇó¡£
ÕýÈçÍøÂçÐÒé±¾Éí£¬Í¼ 10.2 ÏÔʾ³öLinuxÓÃһϵÁÐÏ໥Á¬½Ó²ãµÄÈí¼þʵÏÖInternetÐÒ鵨ַ×å¡£BSDÌ×½Ó×Ö£¨BSD sockets£©ÓÉרÃÅ´¦ÀíBSD socketsͨÓÃÌ×½Ó×Ö¹ÜÀíÈí¼þ´¦Àí¡£ËüÓÉINET sockets²ãÀ´Ö§³Ö£¬ÕâÒ»²ãΪ»ùÓÚIPµÄÐÒéTCPºÍUDP¹ÜÀí´«Êä¶Ëµã¡£UDP£¨Óû§Êý¾Ý±¨ÐÒ飩ÊÇÒ»¸öÎÞÁ¬½ÓÐÒé¶øTCP£¨´«Êä¿ØÖÆÐÒ飩ÊǸö¿É¿¿µÄ¶Ë¶Ô¶ËÐÒé¡£´«ÊäUDP°üʱ£¬Linux²»ÖªµÀÒ²²»¹ØÐÄÊÇ·ñËüÃǰ²È«µ½´ïÄ¿µÄµØ¡£TCP°üÔò±»TCPÁ¬½ÓÁ½¶Ë±àºÅÒÔ±£Ö¤´«ÊäµÄÊý¾Ý±»ÕýÈ·½ÓÊÕ¡£IP²ã°üº¬ÁËʵÏÖInternetÐÒéµÄ´úÂë¡£ÕâЩ´úÂë¸øÒª´«ÊäµÄÊý¾Ý¼ÓÉÏIPÍ·£¬²¢ÖªµÀÈçºÎ°Ñ´«ÈëµÄIP°üË͸øTCP»òUDP¡£ÔÚIP²ãÒÔÏ£¬ÊÇÍøÂçÉ豸À´Ö§³ÖËùÓÐLinuxÍøÂ繤×÷£¬ÈçPPPºÍÒÔÌ«Íø¡£ÍøÂçÉ豸²»×ÜÊÇÎïÀíÉ豸£»Ò»Ð©ÏóloopbackÕâÑùµÄÉ豸ÊÇ´¿Èí¼þÉ豸¡£±ê×¼µÄLinuxÉ豸ÓÃmknodÃüÁÁ¢£¬ÍøÂçÉ豸ҪÓõײãÈí¼þ·¢ÏÖ²¢³õʼ»¯Ëü¡£½¨Á¢Ò»¸öÓÐÊʵ±µÄÒÔÌ«ÍøÉ豸Çý¶¯ÔÚÄÚµÄÄں˺ó£¬Äã¾Í¿ÉÒÔ¿´µ½ /dev/eth0 ¡£ARPÐÒéλÓÚIP²ãÓëÖ§³ÖARPµÄÐÒéÖ®¼ä¡£
ÕâÊÇÒ»¸öͨÓõĽӿڣ¬Ëü²»½öÖ§³Ö¸÷ÖÖÍøÂ繤×÷ÐÎʽ£¬¶øÇÒ»¹ÊÇÒ»¸ö½»»¥Ê½Í¨Ñ¶»úÖÆ¡£Ò»¸öÌ×½Ó×ÖÃèÊöÒ»¸öͨѶÁ¬½ÓµÄÒ»¶Ë£¬Á½¸öͨѶ³ÌÐòÖи÷×ÔÓÐÒ»¸öÌ×½Ó×ÖÀ´ÃèÊöËüÃÇ×Ô¼ºÄÇÒ»¶Ë¡£Ì×½Ó×Ö¿ÉÒÔ±»¿´³ÉÒ»¸öרÃŵĹܵÀ£¬µ«ÓÖ²»Ïó¹ÜµÀ£¬Ì×½Ó×Ö¶ÔËüÃÇÄÜÈÝÄɵÄÊý¾ÝÁ¿Ã»ÓÐÏÞÖÆ¡£LinuxÖ§³Ö¶àÖÖÀàÐ͵ÄÌ×½Ó×Ö¡£ÕâÊÇÒòΪÿһÀàÐ͵ÄÌ×½Ó×ÖÓÐËü×Ô¼ºµÄͨÐÅѰַ·½·¨¡£LinuxÖ§³ÖÏÂÁÐÌ×½Ó×ÖµØÖ·×å»òÓò£º
UNIX | Unix ÓòÌ×½Ó×Ö |
INET | InternetµØÖ·×åÖ§³Öͨ¹ýTCP/IPÐÒéµÄͨÐÅ |
AX25 | Amateur radio X25 |
IPX | Novell IPX |
APPLETALK | Appletalk DDP |
X25 | X25 |
ÓÐһЩÌ×½Ó×ÖÀàÐÍÖ§³ÖÃæÏòÁ¬½ÓµÄ·þÎñÀàÐÍ¡£²¢·ÇËùÓеĵØÖ·×åÄÜÖ§³ÖËùÓеķþÎñÀàÐÍ¡£Linux BSD Ì×½Ó×ÖÖ§³ÖÏÂÁÐÌ×½Ó×ÖÀàÐÍ£º
¿Í»§·þÎñÆ÷ģʽÏÂʹÓÃÌ×½Ó×Ö½øÐÐͨÐÅ¡£·þÎñÆ÷ÌṩһÖÖ·þÎñ£¬¿Í»§Ê¹ÓÃÕâÖÖ·þÎñ¡£Web·þÎñÆ÷¾ÍÊÇÒ»¸öÀý×Ó£¬ËüÌá¹©ÍøÒ³£¬¶ø¿Í»§¶Ë£¬»òÕß˵ä¯ÀÀÆ÷£¬À´¶ÁÕâÐ©ÍøÒ³¡£·þÎñÆ÷ҪʹÓÃÌ×½Ó×Ö£¬Ê×ÏÈÒª½¨Á¢Ì×½Ó×Ö²¢½«ËüÓëÒ»¸öÃû³Æ°ó¶¨¡£Ãû³ÆµÄ¸ñʽÓÉÌ×½Ó×ֵĵØÖ·×åÀ´¶¨£¬ÊÇ·þÎñÆ÷µÄ±¾µØÓÐЧµØÖ·¡£Ì×½Ó×ÖµÄÃû³Æ»òµØÖ·ÓýṹsockaddrÀ´Ö¸¶¨¡£Ò»¸öINETÌ×½Ó×Ö»¹ÓëÒ»¸ö¶Ë¿ÚµØÖ·°ó¶¨¡£ÒÑ×¢²áµÄ¶Ë¿ÚºÅ¿ÉÔÚ /etc/services ÖÐÕÒµ½£»ÀýÈ磬Web·þÎñµÄ¶Ë¿ÚºÅÊÇ80¡£½«Ì×½Ó×ÖÓëµØÖ·°ó¶¨ÒԺ󣬷þÎñÆ÷²»¿ÉÒÔ¼àÌýÖ¸¶¨µÄ°ó¶¨Á˵ĵØÖ·ÉϵÄÒýÈëÁ¬½ÓÇëÇó¡£ÇëÇóµÄ·¢ÆðÕߣ¬¿Í»§¶Ë£¬½¨Á¢Ò»¸öÌ×½Ó×Ö²¢Í¨¹ýËüÀ´·¢³öÒ»¸öÁ¬½ÓÇëÇóµ½Ö¸¶¨µÄÄ¿±ê·þÎñÆ÷µØÖ·¡£¶ÔÓÚÒ»¸öINETÌ×½Ó×Ö£¬·þÎñÆ÷µØÖ·ÊÇËüµÄIPµØÖ·ºÍËüµÄ¶Ë¿ÚºÅ¡£ÕâЩÒýÈëÇëÇó±ØÐëͨ¹ý¸÷ÖÖÐÒé²ãÕÒµ½Ä¿µÄµØÖ·£¬È»ºóµÈ´ý·þÎñÆ÷µÄ¼àÌýÌ×½Ó×Ö¡£·þÎñÆ÷ÊÕµ½ÒýÈëÇëÇóºó¿ÉÒÔ½ÓÊÕ»ò¾Ü¾øËü¡£Èç¹û¾ö¶¨½ÓÊÕ£¬·þÎñÆ÷±ØÐ轨Á¢Ò»¸öÐÂÒ»Ì×½Ó×ÖÀ´½ÓÊÕÇëÇó¡£µ±Ò»¸öÌ×½Ó×Ö±»ÓÃÀ´¼àÌýÒýÈëÁ¬½ÓÇëÇóʱ£¬Ëü¾Í²»ÄÜÓÃÀ´Ö§³ÖÁ¬½ÓÁË¡£Á¬½Ó½¨Á¢ºóÁ½¶Ë¾Í¿ÉÒÔ×ÔÓɵط¢ËͺͽÓÊÕÊý¾ÝÁË¡£×îºó£¬µ±²»ÔÙÐèÒªÁ¬½Óʱ£¬¾Í½«Ö®¹Ø±Õ¡£Òª×¢Òâ±£Ö¤ÔÚ´«Êä¹ý³ÌÕýÈ·´¦ÀíÊý¾Ý°ü¡£
¶ÔBSD socket½øÐÐ׼ȷ²Ù×÷ÒªÒÀÀµÓÚËüÏÂÃæµÄµØÖ·×å¡£ÉèÖÃTCP/IPÁ¬½ÓÓëÉèÖÃamateur radio X.25Á¬½ÓÓкܴó²»Í¬¡£ÏóÐéÄâÎļþϵͳһÑù£¬Linux´ÓBSD socket²ã³éÏó³ösocket½Ó¿Ú£¬Ó¦ÓóÌÐòºÍBSD socketÓÉÿ¸öµØÖ·×åµÄÌØ¶¨Èí¼þÀ´Ö§³Ö¡£Äں˳õʼ»¯Ê±£¬µØÖ·×å±»ÖÃÈëÄÚºËÖв¢½«×Ô¼º×¢²áµ½BSD socket½Ó¿Ú¡£Ö®ºó£¬µ±Ó¦ÓóÌÐò½¨Á¢ÓÃʹÓÃBDS socketsʱ£¬ÔÚBSD socketÓëËüÖ§³ÖµÄµØÖ·×åÖ®¼ä½«²úÉúÒ»¸öÁª½Ó¡£ÕâÒ»Áª½ÓÊÇÓɽ»²æÁ´½ÓÊý¾Ý½á¹¹ºÍµØÖ·×å±íÌØ¶¨Ö§³Ö³ÌÐò²úÉú¡£ÀýÈ磬ÿµ±Ó¦ÓóÌÐò½¨Á¢Ò»¸öеÄsocket£¬¾Í»áÓÐÒ»¸öBSD socket½Ó¿ÚÓõĵØÖ·×åÌØ¶¨ socket½¨Á¢³ÌÐò¡£
¹¹ÔìÄÚºËʱ£¬Ò»Ð©µØÖ·×åºÍÐÒé±»ÖÃÈë protocols ÏòÁ¿¡£Ã¿¸öÓÉËüµÄÃû³ÆÀ´±íÕ÷£¬ÀýÈ磬¡°INET¡±ºÍËüµÄ³õʼ³ÌÐòµØÖ·¡£µ±Ì×½Ó¿ÚÆô¶¯Ê±±»³õʼ»¯Ê±£¬Òªµ÷ÓÃÿһÐÒéºÍ³õʼ³ÌÐò¡£¶ÔsocketµØÖ·×åÀ´Ëµ£¬Õâ»áµ¼ÖÂËüÃÇ×¢²áÒ»Ì×ÐÒé²Ù×÷¡£ÕâÊÇÒ»Ì×Àý³Ì£¬ÆäÖеÄÿһÀý³ÌÖ´ÐÐÒ»¸öÌØ¶¨µÄÕë¶ÔÄÇÒ»µØÖ·×åµÄ²Ù×÷¡£ÒÑ×¢²áµÄÐÒé²Ù×÷±»´æÔÚ pops ÏòÁ¿£¬Ò»¸öÖ¸Ïò proto_ops Êý¾Ý½á¹¹µÄÏòÁ¿ÖС£
proto_ops ½á¹¹ÓɵØÖ·×åÀàÐͺÍһϵÁÐÖ¸ÏòÓëÌØ¶¨µØÖ·×å¶ÔÓ¦µÄsocket²Ù×÷Àý³ÌµÄÖ¸Õë×é³É¡£pops ÏòÁ¿Í¨¹ýµØÖ·×å±êʶ·ûÀ´Ë÷Òý£¬ÈçInternetµØÖ·×å±êʶ·û£¨AF_INETÊÇ2£©¡£
INET socket²ãÖ§³Ö°üÀ¨TCP/IPÐÒéÔÚÄÚµÄinternetµØÖ·×å¡£ÈçǰËùÊö£¬ÕâЩÐÒéÊÇ·Ö²ãµÄ£¬Ò»¸öÐÒéʹÓÃÁíÒ»¸öÐÒéµÄ·þÎñ¡£LinuxµÄTCP/IP´úÂëºÍÊý¾Ý½á¹¹·´Ó³ÁËÕâÒ»·Ö²ãÄ£ÐÍ¡£ËüÓëBSD socket²ãµÄ½Ó¿ÚҪͨ¹ýһϵÁÐInternetµØÖ·×åsocket²Ù×÷£¬ÕâÒ»²Ù×÷ÊÇÔÚÍøÂç³õʼ»¯Ê±¾ÍÒѾע²áµ½BSD socket²ãµÄ¡£ÕâЩ¶¼ÓëÆäËüÒÑ×¢²áµÄµØÖ·×åÒ»Æð±£´æÔÚ pops ÏòÁ¿ÖС£BSD socket²ã´ÓÒÑ×¢²áµÄINET proto_ops Êý¾Ý½á¹¹Öе÷ÓÃINET²ã socketÖ§³ÖÀý³ÌÀ´ÎªËüÖ´Ðй¤×÷¡£ÀýÈ磬һ¸öµØÖ·×åΪINETµÄBSD socket½¨Á¢ÇëÇ󣬽«Óõ½Ï²ãµÄINET socketµÄ½¨Á¢º¯Êý¡£ÔÚÕâЩ²Ù×÷ÖУ¬BSD socket²ã°ÑÓÃÀ´ÃèÊöBSD socketµÄ socket ½á¹¹´«¹¹µ½INET²ã¡£ÎªÁ˲»°ÑBSD socket ÓëTCP/IPµÄÌØ¶¨ÐÅÏ¢¸ã»ì£¬INET socket²ãʹÓÃËü×Ô¼ºµÄÊý¾Ý½á¹¹£¬sock £¬ËüÓëBSD socket ½á¹¹ÏàÁ¬¡£ÕâÒ»Áª½Ó¹ØÏµ¿ÉÒÔ´Óͼ 10.3 Öп´³ö¡£ËüÓÃBSD socketµÄ data Ö¸ÕëÀ´Á¬½Ó sock ½á¹¹ÓëBSD socket½á¹¹¡£ÕâÒâζןóÀ´µÄINET socketµ÷ÓÃÄܹ»ºÜÈÝÒ×µØÖØÐÂÕÒµ½ sock ½á¹¹¡£ sock ½á¹¹µÄÐÒé²Ù×÷Ö¸ÕëÒ²ÔÚ³õʼ»¯Ê±½¨Á¢£¬ËüÒÀÀµÓë±»ÇëÇóµÄÐÒé¡£Èç¹ûÇëÇóµÄÊÇTCP£¬ÄÇô sock ½á¹¹µÄÐÒé²Ù×÷Ö¸Õ뽫ָÏòTCPÁ¬½ÓËù±ØÐèµÄTCPÐÒé²Ù×÷¼¯¡£
ϵͳ½¨Á¢Ò»¸öеÄsocketʱ£¬Í¨¹ý±êʶ·ûÀ´È·¶¨ËüµÄµØÖ·×壬socketÀàÐͺÍÐÒé¡£
Ê×ÏÈ£¬´Ó pops ÏòÁ¿ÖÐËÑË÷Óë±»ÇëÇóµÄµØÖ·×åÏàÆ¥ÅäµÄµØÖ·×å¡£Ëü¿ÉÄÜÊÇÒ»¸ö×÷ΪºËÐÄÄ£¿éÀ´ÊµÏÖµÄÒ»¸öÌØ¶¨µÄµØÖ·×壬ÕâÑù£¬ÔÚÆäÄܼÌÐø¹¤×÷ǰ£¬ kerneld ÊØ»¤½ø³Ì±ØÐë¼ÓÔØÕâһģ¿é¡£·ÖÅäÒ»¸öÐ嵀 socket ½á¹¹À´´ú±íBSD socket¡£Êµ¼ÊÉÏ socket ½á¹¹ÊÇ VFS inode ½á¹¹µÄÒ»²¿·Ö£¬·ÖÅäÒ»¸ösocketʵ¼ÊÉϾÍÊÇ·ÖÅäÒ»¸ö VFS inode ¡£³ý·ÇÄãÈÏΪsocket²Ù×÷ÄÜºÍÆÕͨµÄÎļþ²Ù×÷Ò»Ñù£¬·ñÔò»á¾õµÃÕâºÃÏóºÜÆæ¹Ö¡£ËùÓеÄÎļþÓÃVFS inode½á¹¹À´±íʾ£¬ÎªÁËÖ§³ÖÎļþ²Ù×÷£¬BSD socket±ØÐëÒ²Óà VFS inode À´±íʾ¡£
×îн¨Á¢µÄ BSD socket ½á¹¹°üº¬Ò»¸öÖ¸ÏòµØÖ·×åÌØ¶¨socketÀý³ÌµÄÖ¸Õ룬¿ÉÒÔÓÃÀ´´Ó pops ÏòÁ¿ÖÐÕÒµ½ proto_ops ½á¹¹¡£ËüµÄÀàÐͱ»ÉèÖóɱ»ÇëÇóµÄsocketÀàÐÍ£ºSOCK_STREAM£¬SOCK_DGRAMµÈµÈÖ®Ò»¡£µ÷ÓõØÖ·×åÌØ¶¨´´½¨Àý³ÌʹÓñ£´æÔÚ proto_ops ½á¹¹ÖеĵØÖ·¡£
´Óµ±Ç°¹ý³Ì fd ÏòÁ¿ÖзÖÅäÒ»¸ö×ÔÓɵÄÎļþÃèÊö·û£¬¶Ô file ½á¹¹ËùÖ¸ÏòµÄ½øÐгõʼ»¯¡£°üÀ¨½«Îļþ²Ù×÷Ö¸ÕëÉèÖÃΪָÏòÓÉBSD socket½Ó¿ÚÖ§³ÖµÄBSD socketÎļþ²Ù×÷¼¯¡£ÈκβÙ×÷½«±»Òýµ½socket½Ó¿Ú£¬Í¨¹ýµ÷ÓÃËüµÄµØÖ·×å²Ù×÷Àý³Ì½«ËüÃÇ´«µ½Ö§³ÖµÄµØÖ·×å¡£
ΪÁËÄܼàÌýÊäÈëµÄinternetÁ¬½ÓÇëÇó£¬Ã¿¸ö·þÎñÆ÷±ØÐ뽨Á¢Ò»¸öINET BSD socket£¬²¢½«µØÖ·ÓëÆä°ó¶¨¡£°ó¶¨²Ù×÷Ö÷ÒªÔÚINET socket²ãÄÚ´¦Àí£¬ÏÂÃæµÄTCPºÍUDPÐÒé²ãÌṩһЩ֧³Ö¡£ÓëÒ»¸öµØÖ·°ó¶¨Á˵Äsocket²»ÄÜÓÃÀ´½øÐÐÈÎºÎÆäËüµÄͨѶ¹¤×÷£¬Ò²¾ÍÊÇ˵£ºsocketµÄ״̬±ØÐëÊÇ TCP_CLOSE ¡£ sockaddr ½á¹¹°üº¬ÁËÓëÒ»¸öÈÎÒâµÄ¶Ë¿ÚºÅ°ó¶¨µÄIPµØÖ·¡£Í¨³£°ó¶¨µÄIPµØÖ·ÒѾ·ÖÅ䏸ÁËÒ»¸öÍøÂçÉ豸£¬¸ÃÉ豸֧³ÖINETµØÖ·×åÇÒÆä½Ó¿ÚÊÇ¿ÉÓõġ£¿ÉÒÔÔÚϵͳÖÐÓÃifconfigÃüÁîÀ´²é¿´ÄÄÒ»¸öÍøÂç½Ó¿ÚÊǵ±Ç°¼¤»îµÄ¡£IPµØÖ·Ò²¿ÉÒÔÊǹ㲥µØÖ·£¬È«1»òÈ«0¡£ÕâÊÇÐ©ÌØ¶¨µÄµØÖ·£¬ÓÃÒÔ±íʾ·¢Ë͸øÈκÎÈË3¡£Èç¹û»úÆ÷³äµ±Ò»¸ö͸Ã÷µÄ´úÀí»ò·À»ðǽ£¬ÔòIPµØÖ·¿É±»Ö¸¶¨ÎªÈÎÒ»¸öIPµØÖ·£¬µ«Ö»ÓÐÓг¬¼¶Óû§È¨Ï޵Ľø³ÌÄܰ󶨵½ÈκÎÒ»¸öIPµØÖ·¡£°ó¶¨µÄIPµØÖ·±»´æÔÚsock½á¹¹ÖÐµÄ recv_addr ºÍ saddr ×ֶΡ£¶Ë¿ÚºÅÊÇ¿ÉÑ¡µÄ£¬Èç¹ûûÓÐÖ¸¶¨£¬½«ÈÎÒâÖ¸¶¨Ò»¸ö¡£°´¹ßÀý£¬Ð¡ÓÚ1024µÄ¶Ë¿ÚºÅ²»Äܱ»Ã»Óг¬¼¶Óû§È¨Ï޵Ľø³ÌʹÓá£Èç¹ûϲãÍøÂçûÓзÖÅä¶Ë¿ÚºÅ£¬Ôò·ÖÅäÒ»¸ö´óÓÚ1024µÄ¶Ë¿ÚºÅ¡£
ϲãÍøÂçÉ豸½ÓÊյİü±ØÐëÓɾÕýÈ·µÄINETºÍBSD socket²ÅÄܱ»´¦Àí¡£Òò´Ë£¬UDPºÍTCPά»¤ÁËһЩhash±íÓÃÀ´ÔÚÊäÈëIPÏûÏ¢ÄÚ²éÕÒµØÖ·²¢½«ËüÃǵ¼ÏòÕýÈ·µÄ socket/sock ¶Ô¡£TCPÊÇÒ»¸öÃæÏòÁ¬½ÓµÄÐÒ飬Òò¶øÉæ¼°´¦ÀíTCP°üµÄÐÅÏ¢±ÈÓÃÓÚ´¦ÀíUDP°üµÄÐÅÏ¢¶à¡£
UDPά»¤×ÅÒ»ÕÅÒÑ·ÖÅäUDP¶Ë¿Ú±í£¬ udp_hash ±í¡£ÓÉÖ¸Ïò sock Êý¾Ý½á¹¹µÄÖ¸Õë×é³É£¬Í¨¹ýÒ»¸ö»ùÓڶ˿ںŵÄhashº¯ÊýÀ´Ë÷Òý¡£UDPhash±í±ÈÔÊÐíµÄ¶Ë¿ÚºÅµÄÊýĿСµÃ¶à£¨udp_hash Ϊ128 »òÕß˵ÊÇ UDP_HTABLE_SIZE £©±íÖеÄһЩÏîÖ¸ÏòÒ»¸ö sock ½á¹¹Á´£¬¸ÃÁ´ÓÃÿ¸ö sock ½á¹¹ÖÐµÄ next Ö¸ÕëÀ´½«Ã¿¸ö sock Á¬½ÓÆðÀ´¡£
TCPÊÇÊ®·Ö¸´Ôӵģ¬Ëü°üÀ¨¼¸¸öhash±í¡£µ«Êµ¼ÊÉÏTCPÔڰ󶨲Ù×÷ʱûÓн« sock ½á¹¹ÓëÆähash±í°ó¶¨£¬Ëü½ö½ö¼ì²é±»ÇëÇóµÄ¶Ë¿ÚºÅµ±Ç°Ã»±»Ê¹Óᣠsock ½á¹¹ÊÇÔÚ listen ²Ù×÷ʱ±»¼ÓÈëTCPµÄhash±íµÄ¡£
¸´Ï°ÌáÒª: What about the route entered?
Ò»¸öÁ¬³öÁ¬½Ó²Ù×÷Ö»ÄÜÓÉÒ»¸öÔÚÕýȷ״̬ϵÄINET BSD socketÀ´Íê³É£»»»¾ä»°Ëµ£¬socket²»ÄÜÊÇÒѽ¨Á¢Á¬½ÓµÄ£¬²¢ÇÒÓб»ÓÃÀ´¼àÌýÁ¬ÈëÁ¬½Ó¡£ÕâÒâζ×ÅBSD socket ½á¹¹±ØÐëÊÇ SS_UNCONNECTED ״̬¡£UDPÐÒéûÓÐÔÚÁ½¸öÓ¦Óü佨Á¢ÐéÁ¬½Ó£¬Èκη¢³öµÄÏû Ï¢¶¼ÊÇÊý¾Ý±¨£¬ÕâЩÏûÏ¢¿ÉÄܵ½´ïÒ²¿ÉÄܲ»µ½´ïÄ¿µÄµØ¡£µ«Ëü²»Ö§³ÖBSD socketµÄ connect ²Ù×÷¡£½¨Á¢ÔÚUDPµÄINET BSD socketÉϵÄÁ¬½Ó²Ù×÷¼òµ¥µØÉèÖÃÔ¶³ÌÓ¦ÓõĵØÖ·£ºIPµØÖ·ºÍIP¶Ë¿ÚºÅ¡£ÁíÍ⣬Ëü»¹ÉèÖ÷ÓɱíÈë¿ÚµÄcacheÒÔ±ãÕâÒ»BSD socketÔÚ·¢ÓÃUDP°üʱ²»ÓÃÔٴβéѯ·ÓÉÊý¾Ý¿â£¨³ý·ÇÕâһ·ÓÉÒѾÎÞЧ£©¡£INET sock ½á¹¹ÖÐµÄ ip_route_cache Ö¸ÕëÖ¸Ïò·ÓÉ»º´æÐÅÏ¢¡£Èç¹ûûÓиø³öµØÖ·ÐÅÏ¢£¬»º´æµÄ·ÓɺÍIPµØÖ·ÐÅÏ¢½«×Ô¶¯µØ±»ÓÃÀ´·¢ËÍÏûÏ¢¡£UDP½« sock µÄ״̬¸ÄΪ TCP_ESTABLISHED ¡£
¶ÔÓÚ»ùÓÚTCP BSD socketµÄÁ¬½Ó²Ù×÷£¬TCP±ØÐ뽨Á¢Ò»¸ö°üÀ¨Á¬½ÓÐÅÏ¢µÄTCPÏûÏ¢£¬²¢½«ËüË͵½Ä¿µÄIP¡£TCPÏûÏ¢°üº¬ÓëÁ¬½ÓÓйصÄÐÅÏ¢£¬Ò»¸öΨһ±êʶµÄÏûÏ¢¿ªÊ¼Ë³ÐòºÅ£¬Í¨¹ý³õʼ»¯Ö÷»úÀ´¹ÜÀíµÄÏûÏ¢´óСµÄ×î´óÖµ£¬¼°·¢ËÍÓë½ÓÊÕ´°¿Ú´óСµÈµÈ¡£ÔÚTCPÄÚ£¬ËùÓеÄÏûÏ¢¶¼ÊDZàºÅµÄ£¬³õʼµÄ˳ÐòºÅ±»ÓÃÀ´×÷ΪµÚÒ»ÏûÏ¢ºÅ¡£LinuxÑ¡ÓÃÒ»¸öºÏÀíµÄËæ»úÖµÀ´±ÜÃâ¶ñÒâÐÒé³åÍ»¡£Ã¿Ò»´ÓTCPÁ¬½ÓµÄÒ»¶Ë³É¹¦µØ´«µ½ÁíÒ»¶ËµÄÏûϢҪȷÈÏÆäÒѾÕýÈ·µ½´ï¡£Î´È·ÈϵÄÏûÏ¢½«±»ÖØ´«¡£·¢ËÍÓë½ÓÊÕ´°¿ÚµÄ´óСÊǵÚÒ»¸öÈ·Èϵ½´ï֮ǰÏûÏ¢µÄ¸öÊý¡£ÏûÏ¢³ß´çµÄ×î´óÖµÓëÍøÂçÉ豸Óйأ¬ËüÃÇÔÚ³õʼ»¯ÇëÇóµÄ×îºóʱ¿ÌÈ·¶¨ÏÂÀ´¡£Èç¹û½ÓÊն˵ÄÍøÂçÉ豸µÄÏûÏ¢³ß´ç×î´óÖµ¸üС£¬ÔòÁ¬½Ó½«ÒÔСµÄÒ»¶ËΪ׼¡£Ó¦ÓóÌÐò·¢³öÁ¬½ÓÇëÇóºó±ØÐëµÈ´ýÄ¿±êÓ¦ÓóÌÐòµÄ½ÓÊÜ»ò¾Ü¾øÁ¬½ÓµÄÏìÓ¦¡£TCP sock ÆÚÍû×ÅÒ»¸öÊäÈëÏûÏ¢£¬Ëü±»¼ÓÈë tcp_listening_hash ÒÔ±ãÊäÈëTCPÏûÏ¢Äܱ»Ö¸ÏòÕâÒ» sock ½á¹¹¡£TCPͬʱҲ¿ªÊ¼¼ÆÊ±£¬µ±Ä¿±êÓ¦ÓÃûÓÐÏìÓ¦ÇëÇó£¬ÔòÁ¬³öÁ¬½ÓÇëÇó³¬Ê±¡£
socketÓëµØÖ·°ó¶¨ºó£¬ÄܼàÌýÖ¸¶¨µØÖ·µÄÁ¬ÈëÁ¬½ÓÇëÇó¡£Ò»¸öÍøÂçÓ¦ÓóÌÐòÄܼàÌýsocket¶ø²»ÓÃÏȽ«µØÖ· ÓëÖ®°ó¶¨£»ÔÚÕâ¸öÀý×ÓÖУ¬INET socket²ãÕÒµ½Ò»¸öδÓõĶ˿ںţ¨¶ÔÕâÒ»ÐÒ飩²¢×Ô¶¯½«ËüÓësocket°ó¶¨¡£ ¼àÌýsocketº¯Êý½«socket״̬Éè³É TCP_LISTEN £¬²¢×öÆäËüÁ¬ÈëÁ¬½ÓËùÐèÒªµÄ¹¤×÷¡£
¶ÔÓÚUDP sockets£¬¸Ä±äsocketµÄ״̬¾Í×ã¹»ÁË£¬¶øTCPÏÖÔÚ¼ÓÁËsocketµÄ sock Êý¾Ý½á¹¹µ½Á½¸öhash±íÖв¢¼¤»î£¬ tcp_bound_hash ±íºÍ tcp_listening_hash ±í¡£ÕâÁ½¸ö±í¶¼Í¨¹ýÒ»¸ö»ùÓÚIP¶Ë¿ÚºÅµÄhashº¯ÊýÀ´Ë÷Òý¡£
ÎÞÂÛºÎʱ£¬Ò»¸ö¼¤»îµÄ¼àÌýsocket½ÓÊÕÒ»¸öÁ¬ÈëµÄTCPÁ¬½ÓÇëÇó£¬TCP¶¼Òª½¨Á¢Ò»¸öÐ嵀 sock ½á¹¹À´ÃèÊöËü¡£×îÖÕ½ÓÊÕʱ£¬Õâ¸ö sock ½á¹¹½«³ÉΪTCPÁ¬½ÓµÄµ×²ã¡£ËüÒ²¸´Öưüº¬Á¬½ÓÇëÇóµÄ sk_buff £¬²¢½«Ëü·Åµ½¼àÌý sock ½á¹¹µÄ receive_queue ÖÐÅŶӡ£¸´ÖÆµÄ sk_buff °üº¬Ò»¸öÖ¸Ïòн¨Á¢µÄ sock ½á¹¹µÄÖ¸Õë¡£
UDP²»Ö§³ÖÁ¬½ÓµÄ¸ÅÄ½ÓÊÕINET socketÁ¬½ÓÇëÇóÖ»ÊÊÓÃÓÚTCPÐÒ飬һ¸ö¼àÌýsocket½ÓÊÕ²Ù×÷´ÓÔʼµÄ¼àÌýsocketÖи´ÖÆÐµÄsocket½á¹¹¡£½ÓÊÕ²Ù×÷͸¹ýÖ§³ÖµÄÐÒé²ã£¬±¾ÀýÊÇINET£¬À´½ÓÊÕÈκÎÁ¬ÈëÁ¬½ÓÇëÇó¡£Èç¹ûϲãÐÒ飬ÈçUDP£¬²»Ö§³ÖÁ¬½Ó£¬INETÐÒé²ã½ÓÊÕ²Ù×÷½«Ê§°Ü¡£·ñÔò½ÓÊÕ²Ù×÷͸¹ýÕæÊµÐÒé²ã£¬±¾ÀýÊÇTCP¡£½ÓÊÕ²Ù×÷¿ÉÒÔÊÇ×èÈû»ò·Ç×èÈû¡£ÔÚ·Ç×èÈûÇé¿öÏ£¬Èç¹ûûÓÐÁ¬ÈëÁ¬½Ó¿É½ÓÊÕ£¬Ôò½ÓÊÕ²Ù×÷ʧ°Ü£¬Ð½¨µÄsocket ½á¹¹±»·ÏÆú¡£ÔÚ×èÈûÇé¿öÏ£¬ÍøÂçÓ¦ÓóÌÐòÖ´ÐнÓÊÕ²Ù×÷½«¼ÓÉÏÒ»¸öµÈ´ý¶ÓÁв¢½«Ö®¹ÒÆð£¬Ö±µ½½ÓÊÕµ½TCPÁ¬½ÓÇëÇó¡£µ±½ÓÊÕÒ»¸öÁ¬½ÓÇëÇóºó£¬°üº¬ÇëÇóµÄ sk_buff ±»·ÏÆú£¬²¢ÇÒ sock Êý¾Ý½á¹¹·µ»Øµ½INET socket²ã£¬ÔÚÄÇÓëÒ»¸öеĸüÔ罨Á¢µÄsocket½á¹¹Á¬½Ó¡£ÐÂsocketÎļþÃèÊö·û(fd)ºÅ·µ»Ø¸øÍøÂçÓ¦ÓóÌÐò£¬È»ºó£¬Ó¦ÓóÌÐò¾ÍÄÜÔÚsocket²Ù×÷Öн«ÕâÒ»ÎļþÃèÊö·ûÓÃÓÚн¨Á¢µÄINET BSD socket¡£
ÿһ²ãÐÒéÓÃÁíÍâ²ãÌṩµÄ·þÎñ£¬ÕâÑùʹÓöà²ãÍøÂçÐÒé»áÓÐÒ»¸öÎÊÌ⣺ÿ¸öÐÒé¶¼ÒªÔÚ´«ËÍÊý¾Ýʱ¶¼Òª ¼ÓÉÏÐÒéÍ·ºÍÐÒé⣬¶øÊý¾Ýµ½´ïʱÓÖÒª½«Ö®È¥µô¡£ÕâÑù£¬ÔÚ²»Í¬µÄÐÒé¼äÒªÓÐÊý¾Ý»º´æ£¬Ã¿Ò»²ãÐèÒªÖªµÀÌØ ¶¨ÐÒéµÄÍ·ºÍβ·ÅÔÚÄĸöλÖá£Ò»¸ö½â¾ö°ì·¨¾ÍÊÇÔÚÿһ²ãÖж¼¿½±´»º´æ£¬µ«ÕâÑù×öЧÂʾͺܵ͡£LinuxÓà socket»º´æ»òÕß˵ sk_buffs À´ÔÚÐÒé²ãÓëÍøÂçÉ豸Çý¶¯Ö®¼ä½»»»Êý¾Ý¡£ sk_buffs °üÀ¨Ö¸ÕëºÍ×ֶγ¤¶È£¬ÕâÑùÿ ¸öÐÒé²ã¾Í¿ÉÒÔͨ¹ý±ê×¼µÄº¯Êý»ò¡°·½·¨¡±À´²Ù×÷Ó¦ÓóÌÐòÊý¾Ý¡£
ͼ 10.4 ÏÔʾÁË sk_buff Êý¾Ý½á¹¹£»Ã¿¸ö sk_buff ÓÐÒ»¸öÊý¾Ý¿éÓëÖ®ÏàÁ¬¡£ sk_buff ÓÐËĸöÖ¸Õ룬ÕâЩָÕë ÓÃÀ´²Ù×÷ºÍ¹ÜÀísocket»º´æµÄÊý¾Ý£º
len ºÍ truesize ÕâÁ½¸ö×ֶηֱðÓÃÀ´ÃèÊöµ±Ç°ÐÒé°ü³¤¶ÈºÍÊý¾Ý»º´æ×ÜÌ峤¶È¡£ sk_buff ´¦Àí´úÂëÌṩ±ê×¼µÄ²Ù×÷À´ÏòÓ¦ÓóÌÐòÔö¼ÓºÍÒÆ³ýÐÒéÍ·ºÍÐÒéβ¡£Õâ¾Í¿ÉÒÔ°²È«µØ²Ù×÷ sk_buff ÖÐµÄ data , tail ºÍ len ×ֶΡ£
sk_buff ½á¹¹»¹°üº¬ÁËÓÃÓÚһЩָÕ룬ÓÃÓÚÔÚ´¦Àí¹ý³ÌÖдæÈë sk_buff µÄË«Á¬½Ó»·Â·ÁÐ±í¡£Í¨ÓÃsk_buffÀý ³Ì¿ÉÒÔ½« sk_buff ¼ÓÈëµ½ÕâЩÁбíµÄÇ°Ãæ»òºóÃæ£¬Ò²¿ÉÒÔɾ³ýËüÃÇ¡£
µÚ dd-chapter ÕÂÃèÊöÁËLinuxµÄÍøÂçÉ豸ÊÇÈçºÎÖÃÈëÄں˲¢³õʼ»¯µÄ¡£Ò»ÏµÁÐ device Êý¾Ý½á¹¹ÔÚ dev_base ±íÖÐÏ໥Á¬½ÓÆðÀ´¡£Ã¿¸ö device ½á¹¹ÃèÊöÁËËüµÄÉ豸²¢Ìṩ»Øµ÷Àý³Ì£¬µ±ÐèÒªÍøÂçÇý¶¯À´Ö´Ðй¤×÷ʱ£¬ÍøÂçÐÒé²ãµ÷ÓÃÕâЩÀý³Ì¡£ÕâЩº¯ÊýÓë´«ÊäµÄÊý¾Ý¼°ÍøÂçÉ豸µØÖ·½ôÃÜÏà¹Ø¡£µ±Ò»¸öÍøÂçÉ豸´ÓÍøÉϽÓÊÕ°üʱ£¬Ëü±ØÐ뽫½ÓÊÕµÄÊý¾Ýת»»³É sk_buff ½á¹¹¡£ÕâЩ sk_buff Ôò±»ÍøÂçÇý¶¯¼ÓÈëµ½ÁË backlog ¶ÓÁÐÖС£
Èç¹û backlog ¶ÓÁÐÌ«³¤£¬Ôò¶ªÆú½ÓÊÕµÄ sk_buff¡£×¼±¸ºÃÒªÔËÐÐʱ£¬ÍøÂçµ×²ã½«±»ÉèÖñêÖ¾¡£
µ±ÍøÂçµ×²ã°´¼Æ»®¿ªÊ¼ÔËÐк󣬴¦Àí backlog ¶ÓÁÐ֮ǰ£¬Èκεȴý×ű»´«ÊäµÄÍøÂç°ü¶¼ÓÉËüÀ´´¦Àí¡£ sk_buff ¾ö¶¨ÄÄЩ²ã´¦Àí±»½ÓÊյİü¡£
LinuxÍøÂç²ã³õʼ»¯Ê±£¬Ã¿Ò»ÐÒéͨ¹ý½« packet_type ½á¹¹¼ÓÈëµ½ ptype_allÁбí»òptype_base hash±íÖÐÀ´ ×¢²áËü×Ô¼º¡£packet_type ½á¹¹°üº¬ÁËÐÒéÀàÐÍ£¬Ò»¸öÖ¸ÏòÍøÂçÉ豸µÄÖ¸Õ룬һ¸öÖ¸ÏòÐÒéµÄ½ÓÊÕÊý¾Ý´¦ÀíÀý³ÌµÄÖ¸Õ룬×îºó»¹°üÀ¨Ò»¸öÖ¸ÏòÁбíÁ´»òhashÁ´ÖÐÏÂÒ»¸ö packet_type ½á¹¹µÄÖ¸Õë¡£ptype_all Á´ÓÃÓÚ¼àÌý´ÓÍøÂçÉ豸ÉϽÓÊÕµÄËùÓаü£¬Í¨³£²»Ê¹ÓÃËü¡£ptype_base hash±íÊDZ»ÐÒé±êʶ·ûŪÂҵģ¬ÓÃÓÚ¾ö¶¨ÄĸöÐÒ齫½ÓÊÕ´«ÈëµÄÍøÂç°ü¡£ÍøÂçµ×²ãͨ¹ýÁ½¸ö±íÖеÄÒ»¸ö»ò¶à¸ö packet_type ÏîÀ´Æ¥Åä´«Èë sk_buff µÄÐÒéÀàÐÍ¡£ÐÒé¿ÉÒԺͶàÓÚÒ»¸öµÄÏîÏàÆ¥Å䣬ÈçÔÚ¼àÌýÍøÉÏËùÓеĴ«ÊäʱҪ¸´Öƶà¸ö sk_buff ¡£ sk_buff ½«Í¨¹ý±»Æ¥ÅäÐÒé´¦ÀíÀý³Ì¡£
Ó¦ÓóÌÐò½»»»Êý¾ÝʱҪ´«Êä°ü£¬·ñÔòÓÉÍøÂçÐÒéÔÚ½¨Á¢Á¬½Ó»òÖ§³ÖÒ»¸öÒѽ¨Á¢µÄÁ¬½ÓʱÀ´Éú³É¡£ÎÞÂÛÊý¾Ý ÊÇÓÉÄÄÖÖ·½·¨Éú³ÉµÄ£¬¶¼Òª½¨Á¢Ò»¸ö sk_buff À´°üº¬Êý¾Ý£¬µ±Í¨¹ýÐÒé²ãʱ£¬ÕâЩÐÒé²ã»á¼ÓÉϸ÷ÖÖÍ·¡£
sk_buff ÐèҪͨ¹ýÍøÂçÉ豸´«Êä¡£Ê×ÏÈÐÒ飬ÈçIP£¬ÐèҪȷ¶¨ÊÇÄĸöÍøÂçÉ豸ÔÚÓá£ÕâÓÐÀµÓÚ°üµÄ×î¼Ñ· ÓÉ¡£¶ÔÓÚͨ¹ýmodemÁ¬ÈëÒ»¸ö¼òµ¥ÍøÂ磬Èçͨ¹ýPPPÐÒ飬µÄ¼ÆËã»úÀ´Ëµ£¬Â·ÓɵÄÑ¡ÔñÊǺܼòµ¥µÄ¡£°üÓ¦¸Ãͨ¹ý ±¾µØ»·Â·É豸·¢Ë͸ø±¾µØÖ÷»ú£¬»ò·¢Ë͸øPPP modemÁ¬½ÓµÄÍø¹Ø¡£¶ÔÓÚÁ¬ÔÚÒÔÔÚÍøÉϵļÆËã»úÀ´Ëµ£¬Á¬½ÓÔÚÍø ÂçÉϵļÆËã»úÔ½¶à£¬Â·ÓÉÔ½¸´ÔÓ¡£
¶ÔÓÚÿһ¸ö±»´«ÊäµÄIP°ü£¬IPÓ÷ÓɱíÀ´ÎªÄ¿µÄIPµØÖ·½âÎö·ÓÉ¡£´Ó·ÓɱíÖгɹ¦µØÕÒµ½Ä¿µÄIPʱ½«·µ»ØÒ»¸öÃèÊöÁËҪʹÓõÄ·ÓÉµÄ rtable ½á¹¹¡£Õâ°üÀ¨ÒªÓõ½µÄÔ´IPµØÖ·£¬ÍøÂç device ½á¹¹µÄµØÖ·£¬ÓÐʱ»¹ÓÐÔ¤½¨Á¢µÄÓ²¼þÍ·¡£ÕâЩӲ¼þÍ·ÊÇÍøÂçÉè±¸ÌØ¶¨µÄ£¬°üº¬ÁËÔ´ºÍÄ¿µÄµÄÎïÀíµØÖ·ºÍÆäËüµÄÌØ¶¨Ã½ÌåÐÅÏ¢¡£Èç¹ûÍøÂçÉ豸ÊÇÒ»¸öÒÔÌ«ÍøÉ豸£¬Ó²¼þÍ·ÔòÓ¦Èçͼ 10.1 Ëùʾ£¬²¢ÇÒÔ´ºÍÄ¿µÄµØÖ·Ó¦ÊÇÎïÀíµÄÒÔÌ«ÍøµØÖ·¡£Ó²¼þÍ·ÔÚ·ÓɵÄʱºò»á»º´æÆðÀ´£¬ÒòΪ±ØÐ뽫Ëü¼Óµ½Ã¿Ò»¸öÒª´«ÊäµÄIP°üÖС£Ó²¼þÍ·°üº¬µÄÎïÀíµØÖ·ÒªÓÃARPÐÒéÀ´½âÎö¡£´«³öµÄ°üÔÚµØÖ·±»½âÎöºó²Å»á·¢³ö¡£½âÎöÁ˵ØÖ·ºó£¬Ó²¼þÍ·±»»º´æÆðÀ´ÒÔ±ãÒÔºóµÄIP°üÔÚʹÓÃÕâÒ»½Ó¿Úʱ²»ÐèÒªÔÙʹÓÃARP¡£
10.5.4 Êý¾Ý·Ö¿é
ÿ¸öÍøÂçÉ豸¶¼ÓÐÒ»¸ö°ü´óСµÄ×î´óÖµ£¬·¢ËÍ»ò½ÓÊÕÊý¾Ý°ü²»ÄܱÈÕâÒ»Öµ´ó¡£IPÐÒéÔÊÐí½«Êý¾Ý·Ö³É¸üСµ¥ÔªÒÔ±ãÍøÂçÉ豸ÄÜ´¦Àí¡£IPÐÒéÍ·Óзֿé×ֶΣ¬ËüÀïÃæ°üº¬ÁËÒ»¸ö±êÖ¾ºÍ·Ö¸îÆ«ÒÆÁ¿¡£
µ±IP°ü×¼±¸Òª´«Êäʱ£¬IPÕÒµ½ÍøÂçÉ豸À´½«IP°ü·¢ËͳöÈ¥¡£Õâ¸öÉ豸ÊÇ´ÓIP·ÓɱíÖÐÕÒµ½µÄ¡£Ã¿Ò» device ½á¹¹ÖÐÓÐÒ»Ïî mtu £¬ÓÃÀ´ÃèÊö×î´ó´«Êäµ¥Ôª£¨ÒÔ×Ö½ÚΪµ¥Î»£©¡£Èç¹ûÉ豸µÄ mtu ±ÈÒª´«ÊäµÄIP°üµÄ°ü´óСҪС£¬ÔòIP°ü±ØÐë±»·Ö¸î³É¸üСµÄµ¥Ôª¡£Ã¿Ò»µ¥ÔªÓÃÒ»¸ö sk_buff ½á¹¹À´±íÕ÷£»ËüµÄIPÍ·»á±»×öÉϱê¼ÇÒÔ±êʶËüÊÇÒ»¸ö·Ö¿éÁ˵İü£¬ÆäÖл¹°üº¬·Ö¸îÆ«ÒÆÁ¿¡£×îºóÒ»¸ö°ü±»±êʶΪ×îºóIPµ¥Ôª¡£Èç¹ûÔÚ·Ö¿é¹ý³ÌÖУ¬IP²»ÄÜ·ÖÅä sk_buff £¬Ôò´«Êäʧ°Ü¡£
½ÓÊÕIP·Ö¿éµ¥ÔªÒª±È·¢ËÍËüÃÇÒªÂ鷳һЩ£¬ÒòΪÕâЩIPµ¥Ôª¿ÉÄÜÒÔÈκÎ˳Ðòµ½´ï£¬±ØÐëËùÓеĵ¥Ôª¶¼½ÓÊÕ µ½ÁËÒÔºó²ÅÄÜÖØÐ½«ËüÃÇ×é×°ÆðÀ´¡£Ã¿½ÓÊÕÒ»¸öIP°ü¶¼Òª¼ì²éÆäÊÇ·ñÊÇIP·Ö¸îµ¥Ôª¡£ÔÚµÚÒ»¸öIP·Ö¸îµ¥Ôªµ½´ï ʱ£¬IP»á½¨Á¢Ò»¸öÐ嵀 ipq ½á¹¹£¬ÕâÒ»½á¹¹ÓëÓÃÓÚIPµ¥ÔªÖØ×éµÄ ipqueue ÁбíÏàÁ¬¡£µ±½ÓÊÕµ½¸ü¶àµÄIPµ¥ÔªÊ±£¬ÏÈÕÒµ½ÕýÈ·µÄ ipq ½á¹¹£¬²¢ÎªÃ¿¸öµ¥ÔªÐ½¨Á¢Ò»¸ö ipfrag ½á¹¹¡£Ã¿¸ö ipq ½á¹¹Î¨Ò»µØÃèÊöÒ»¸ö½ÓÊÕIP·Ö¸îµ¥ÔªµÄ£¬°üÀ¨ËüµÄÔ´ºÍÄ¿µÄIPµØÖ·£¬ÉϲãÐÒé±êʶºÍ±¾IPÖ¡µÄ±êʶ¡£µ±½ÓÊÕµ½ËùÓеÄIP·Ö¸îµ¥Ôªºó£¬½«ËüÃÇÖØÐÂ×é³ÉÒ»¸ö sk_buff £¬È»ºó½»¸øÉϲãÐÒé´¦Àí¡£Ã¿¸ö ipq Öаüº¬Ò»¸ö¶¨Ê±Æ÷£¬ËüÔÚÿ½ÓÊÕµ½Ò»¸öºÏ·¨µÄµ¥ÔªºóÖØÐÂʱ¡£Èç¹û¶¨Ê±Æ÷µ½Ê±£¬ ipq ½á¹¹ºÍËüµÄһЩ ipfrag ½á¹¹½«±»¶ªÆú£¬´«Ë͵ÄÐÅÏ¢Ôò±»¼Ù¶¨Îª¶ªÊ§¡£È»ºóÌá½»¸ø²ãÐÒéÀ´ÖØ´«¸ÃÐÅÏ¢¡£
µØÖ·½âÎöÐÒéµ£µ±ÁËÒ»¸ö°ÑIPµØÖ··Òë³ÉÎïÀíÓ²¼þµØÖ·ÈçÒÔÌ«ÍøµØÖ·µÄ½ÇÉ«¡£IPÔÚ½«Êý¾Ý£¨ÒÔ sk_buff µÄÐÎʽ)ͨ¹ýÉ豸Çý¶¯´«ËÍʱÐèÒªÕâһת»»¡£
ËüÖ´Ðи÷ÖÖ¼ì²é£¬À´¿´ÊÇ·ñÕâÒ»É豸ÐèÒªÓ²¼þÍ·£¬ÊÇ·ñÐèÒªÖØ½¨°üµÄÓ²¼þÍ·¡£Linux»º´æÁËÓ²¼þÍ·£¬ÕâÑù¿ÉÒÔ±ÜÆµ·±Öؽ¨¡£Èç¹ûÐèÒªÖØ½¨Ó²¼þÍ·£¬Ôòµ÷ÓÃÉ豸ָ¶¨µÄÓ²¼þÍ·ÖØ½¨Àý³Ì¡£ËùÓеÄÒÔÌ«ÍøÉ豸ʹÓÃÏàͬµÄÍ·ÖØÀý³Ì£¬ÕâЩÀý³Ì½«Ä¿µÄIPµØÖ·×ª»»³ÉÎïÀíµØÖ·¡£
ARPÐÒé±¾ÉíÊǺܼòµ¥µÄ£¬Ëü°üÀ¨Á½¸öÏûÏ¢ÀàÐÍ£¬ARPÇëÇóÓëARPÓ¦´ð¡£ARPÇëÇó°üº¬ÁËÐèÒª½âÎöµÄIPµØÖ·£¬ARPÓ¦´ð£¨Ï£ÍûËü£©°üº¬±»½âÎöµÄIPµØÖ·£¬Ó²¼þµØÖ·¡£ARPÇëÇóÏòÁ¬½ÓÔÚÍøÂçÉϵÄËùÓÐÖ÷»ú¹ã²¥£¬Òò´Ë£¬¶ÔÓÚÒÔÍø£¬ËùÓÐÁ¬ÔÚÍøÉϵĻúÆ÷¶¼ÄÜ¿´µ½ARPÇëÇó¡£ÓµÓÐARPÇëÇóÖеÄIPµØÖ·µÄ»úÆ÷½«·¢³ö°üº¬ÁËËü×Ô¼ºµÄÎïÀíµØÖ·ARPÓ¦´ð¡£
ARPÐÒéÔÚLinuxÖÐÊÇÎ§ÈÆ arp_table ½á¹¹±íÀ´½¨Á¢µÄ£¬Ã¿¸ö½á¹¹ÃèÊöÒ»¸öIPµ½ÎïÀíµØÖ·µÄת»»¡£ÕâЩ±íÏî ÔÚÐèÒª½øÐÐIPµØÖ·½âÎöʱÉú³É£¬ÔÚËæÊ±¼ä±ä¾Éʱ±»É¾³ý¡£Ã¿¸ö arp_table ½á¹¹ÓÐÈçÏÂ×Ö¶Î:
last used | ±¾ARPÏî×î½üÒ»´ÎʹÓõÄʱ¼ä |
last updated | ±¾ARPÏî×î½üÒ»´Î¸üеÄʱ¼ä |
flags | ÃèÊö±¾ÏîµÄ״̬£¬ÈçÊÇ·ñÍê³ÉµÈ |
IP address | ±¾ÏîÃèÊöµÄIPµØÖ· |
hardware address | Òª½âÎöµÄÓ²¼þµØÖ· |
hardware header | Ö¸Ïò»º´æÓ²¼þÍ·µÄÖ¸Õë |
timer | ÊǸö timer_list ÏÓÃÓÚARPÇëÇóûÓÐÏìӦʱµÄ³¬Ê± |
retries | ARPÇëÇóÖØÊԵĴÎÊý |
sk_buff queue | µÈ´ýIPµØÖ·½âÎöµÄsk_buffÏîÁбí |
ARP±í°üÀ¨ÁËÖ¸Ïò arp_table Á´µÄÖ¸Õ루 arp_table ÏòÁ¿£©¡£»º´æÕâЩ±íÏî¿ÉÒÔ¼ÓËÙ¶ÔËüÃǵķÃÎÊ£¬Ã¿¸ö±íÏîÓÃIPµØÖ·µÄ×îºóÁ½¸ö×Ö½ÚÀ´Éú³ÉË÷Òý£¬È»ºó¾Í¿ÉÒÔ²éÕÒ±íÁ´ÒÔÕÒµ½ÕýÈ·µÄ±íÏî¡£LinuxÒ²ÒÔ hh_cache ½á¹¹µÄÐÎʽÀ´»º´æ arp_table ÏîµÄÔ¤½¨µÄÓ²¼þÍ·¡£
ÇëÇóÒ»¸öIPµØÖ·½âÎö²¢ÇÒûÓÐÏàÓ¦µÄ arp_table Ïîʱ£¬ARP±ØÐë·¢ËÍÒ»¸öARPÇëÇó¡£ËüÔÚ±íºÍsk_buff¶ÓÁÐÖÐ Éú³ÉÒ»¸öÐ嵀 arp_table Ï sk_buff °üº¬ÁËÐèÒª½øÐеØÖ·½âÎöµÄÍøÂç°ü¡£·¢ËÍARPÇëÇóʱÔËÐÐARP¶¨Ê±Æ÷¡£Èç¹ûûÓÐÏìÓ¦£¬ARP½«ÖØÊÔ¼¸´Î£¬Èç¹ûÈÔȻûÓÐÏìÓ¦£¬ARP½«É¾³ý¸Ã arp_table Ïͬʱ»á֪ͨ¶ÓÁÐÖеȴýIPµØÖ·½âÎöµÄ sk_buff ½á¹¹£¬´«ËÍËüÃǵÄÉϲãÐÒ齫´¦ÀíÕâһʧ°Ü¡£UDP²»¹ØÐĶª°ü£¬¶øTCPÔò»á½¨Á¢TCPÁ¬½Ó½øÐÐÖØ´«¡£Èç¹ûIPµØÖ·µÄËùÓÐÕß·µ»ØÁËËüµÄÓ²¼þµØÖ·£¬Ôò arp_table Ïî±»±ê¼ÇΪÍê³É£¬¶ÓÁÐÖеÄsk_buff½«±»É¾³ý£¬´«Ê䶯×÷¼ÌÐø¡£Ó²¼þµØÖ·±»Ð´µ½Ã¿¸ösk_buffµÄÓ²¼þÍ·ÖС£
ARPÐÒé²ã±ØÐëÏìÓ¦ARPÇëÇó¡£Ëü×¢²áËüµÄÐÒéÀàÐÍ(ETH_P_ARP)£¬Éú³ÉÒ»¸ö packet_type ½á¹¹¡£Õâ±íʾËü½«¼ì²éÍøÂçÉ豸ÊÕµ½µÄËùÓÐARP°ü¡£ÓëARPÓ¦´ðÒ»Ñù£¬Õâ°üÀ¨ARPÇëÇó¡£Óñ£´æÔÚ½ÓÊÕÉ豸µÄ device ½á¹¹ÖеÄÓ²¼þµØÖ·À´Éú³ÉARPÓ¦´ð¡£
ÍøÂçÍØÆË½á¹¹»áËæÊ±¼ä¸Ä±ä£¬IPµØÖ·»á±»ÖØÐ·ÖÅ䲻ͬµÄÓ²¼þµØÖ·¡£ÀýÈ磬һЩ²¦ºÅ·þÎñΪÿһ´Îн¨µÄÁ¬½Ó·ÖÅäÒ»¸öIPµØÖ·¡£ÎªÁËʹARP±í°üº¬ÕâЩÊý¾ÝÏARPÔËÐÐÒ»¸öÖÜÆÚÐԵĶ¨Ê±Æ÷£¬ÓÃÀ´²é¿´ËùÓÐµÄ arp_table ÏîÖÐÄÄÒ»¸ö³¬Ê±¡£Òª×¢Òâ²»ÒªÒÆ³ý°üº¬Ò»¸ö»ò¶à¸ö»º´æÓ²¼þÍ·µÄÏî¡£ÒÆ³ýÕâЩÏîÊǺÜΣÏյģ¬ÒòΪÆäËüµÄÊý¾Ý½á¹¹ÒªÓõ½ËüÃÇ¡£Ò»Ð© arp_table Ïî±»±ê¼ÇΪÓÀ¾ÃµÄ£¬ËüÃDz»»á±»ÊÍ·Å¡£ARP±í²»ÄÜÌ«´ó£»Ã¿¸ö arp_table Ïî»áÏûºÄһЩºËÐÄÄÚ´æ¡£Òª·ÖÅäÒ»¸öеıíÏî¶øARP±íµÄ´óСÒѾµ½´ïËüµÄ×î´óֵʱ£¬¾ÍÒª²éÕÒ²¢É¾³ý×îÀϵıíÏî¡£
IP·Óɺ¯Êý¾ö¶¨Á˽«Ô¤¶¨µÄÓÐÖ¸¶¨IPµØÖ·µÄIP°üË͵½ÄÄ¡£ÔÚ´«ËÍIP°üʱÓкܶàÖÖÑ¡Ôñ¡£ÄÜ×îÖÕµ½´ïÄ¿±êÂð£¿Èç¹ûÄÜ£¬ÒªÓõ½ÄĸöÍøÂçÉè±¸ÄØ£¿Èç¹ûÓжàÓÚÒ»¸öµÄÍøÂçÉ豸¿É±»Ê¹Óã¬ÄÄÒ»¸öÊǽϺõÄÄØ£¿IP·ÓÉÊý¾Ý¿âÀï´æµÄÐÅÏ¢¸ø³öÁËÕâЩÎÊÌâµÄ´ð°¸¡£ÓÐÁ½¸öÊý¾Ý¿â£¬×îÖØÒªµÄÒ»¸öÊÇForwarding Information Database¡£ÕâÊÇÒ»¸öÓйØÒÑÖªµÄÄ¿µÄIPºÍËüÃǵÄ×î¼Ñ·ÓɵÄÏéϸÁÐ±í£¬route cacheÔòÓÃÀ´¿ìËÙÕÒµ½Ä¿µÄIPµÄ·ÓÉ¡£ºÍÆäËüµÄ»ºÒ»Ñù£¬Ëü°üº¬µÄÖ»Êdz£ÓõÄ·ÓÉ£»ËüµÄÄÚÈÝÀ´×ÔForwarding Information Database¡£
ͨ¹ýIOCTLÇëÇó¿É½«Â·ÓɼÓÈëµ½BSD socket½Ó¿Ú»ò´ÓÖÐɾ³ý¡£ÕâЩÊÇͨ¹ýÐÒéÀ´ÊµÏֵġ£INETÐÒé²ãÖ»ÔÊÐí ´¦ÀíÓг¬¼¶Óû§È¨ÏÞµÄIP·ÓɵÄÌí¼ÓÓëɾ³ý¡£ÕâЩ·ÓÉ¿ÉÒÔÊǹ̶¨µÄ£¬Ò²¿ÉÒÔËæÊ±¼ä¶ø¶¯Ì¬¸Ä±ä¡£´ó¶àÊýϵͳʹÓù̶¨Â·ÓÉ¡£Â·ÓÉÆ÷ÔËÐзÓÉÐÒ飬·ÓÉÐÒé³ÖÐøµØ¼ì²éËùÓÐÒÑ֪ĿµÄIPµÄ¿ÉµÃµ½µÄ·ÓÉ¡£Ã»ÓзÓÉÆ÷µÄϵͳÊǶËϵͳ¡£Â·ÓÉÐÒéÊÇ×÷Ϊһ¸öÊØ»¤½ø³ÌÀ´ÊµÏֵģ¬ÈçGATED£¬ËüÃÇÒ²ÓÃIOCTLÀ´ÏòBSD socket½Ó¿ÚÌí¼ÓºÍɾ³ý·ÓÉ¡£
ÎÞÂÛʲôʱºò²éÕÒIP·ÓÉ£¬Ê×Ïȶ¼ÒªÔÚ·ÓÉ»º´æÖмì²éÊÇ·ñÓÐÆ¥ÅäµÄ·ÓÉ¡£Èç¹û·ÓÉ»º´æÀïûÓÐÆ¥ÅäµÄ·ÓÉ£¬ÔòÒª´ÓForwarding Information DatabaseÖвéÕÒ·ÓÉ¡£Èç¹ûÄÇÀïҲûÓÐÕÒµ½Â·ÓÉ£¬ÔòIP°ü·¢ËÍʧ°Ü²¢Í¨ÖªÓ¦ÓóÌÐò¡£Èç¹ûÔÚ·ÓÉ»º´æÖÐûÓжøÔÚForwarding Information DatabaseÖÐÕÒµ½Â·ÓÉ£¬Ôò»áΪЩ·ÓÉÉú³ÉÒ»¸öÐÂÏ²¢Ìí¼Óµ½Â·ÓÉ»º´æÖС£Â·ÓÉ»º´æÊÇÒ»¸ö±í(ip_rt_hash_table)£¬Ëü°üÀ¨Ö¸ÏòrtableÊý¾Ý½á¹¹Á´µÄÖ¸Õë¡£hashº¯ÊýÀûÓÃIPµØÖ·ÖÐ×îС×îÖØÒªµÄÁ½¸ö×Ö½ÚÀ´´Ó·ÓɱíÖнøÐÐË÷Òý¡£ÕâÁ½¸ö×Ö½ÚÊÇÔÚÄ¿µÄÓëÌṩµÄ×î¼ÑhashÖµ¼äÊDz»Í¬µÄ¡£µÚ¸örtableÏî°üº¬Â·ÓÉÐÅÏ¢£¬Ä¿µÄIPµØÖ·£¬ÓÃÓÚµ½´ïÄǸöIPµØÖ·µÄÍøÂçÉ豸£¬ÐÅÏ¢´óСµÄ×î´óÖµµÈµÈ¡£Ëü»¹ÓÐÒ»¸öreference count£¬Ò»¸öusage countºÍÒ»¸ö×î½üÒ»´Î±»ÓõÄʱ¼äÐÅÏ¢£¨ÔÚ jiffies À¡£reference countÔÚÿ´Î·ÓɺóÔö¼Ó£¬ÓÃÓÚÏÔʾ¸Ã´Î·ÓɵÄÍøÂçÁ¬½ÓÊý¡£ËüÔÚÓ¦ÓóÌÐòֹͣʹÓ÷ÓÉʱ¼õС¡£useage countÔÚÿ´Î²éÕÒ·ÓÉʱÔö¼Ó£¬ÓÃÓÚ½« rtable ÏîÔÚËüµÄhashÁ´ÖÐÅÅÐò¡£Â·ÓÉ»º´æÖеĶÔÓÚËùÓÐÏîµÄ×îºó±»ÓÃʱ¼äÐÅÏ¢½«±»ÖÜÆÚÐԵؼì²é£¬ÒÔÈ·¶¨ÊÇ·ñ rtable ÒѾ¾ÉÁË¡£Èç¹ûijһ·ÓÉ×î½üûÓб»Ê¹Óã¬Ôò´Ó·ÓÉ»º´æÖн«Ö®¶ªÆú¡£ÓÉÓÚ·ÓÉ»º´æÖеÄ·ÓÉÔÚÓÐÐòµÄ£¬ËùÒÔ³£ÓõÄ·ÓÉ»áÅÅÔÚhashÁ´µÄÇ°Ãæ¡£ÕâÒâζ×ÅÄܸü¿ìµØÕÒµ½ÕâЩ·ÓÉ¡£
Forwarding Information Database£¨Èçͼ 10.5 Ëùʾ£©°üº¬¶Ôµ±Ç°ÏµÍ³µ±Ç°Ê±¼ä¿ÉµÃµ½µÄIP·ÓÉ¡£ËüÊÇÒ»¸ö ºÜ¸´ÔÓµÄÊý¾Ý½á¹¹£¬¾¡¹Ü½øÐÐÁ˺ÏÀíÓÐЧµÄ°²ÅÅ£¬ËüÈÔÈ»²»ÊÇÒ»¸ö¿ìËÙµÄÊý¾Ý¿â¡£ÌرðÊÇÒªÔÚÕâ¸öÊý¾Ý¿âÖÐΪÿһҪ´«Ë͵ÄIP°ü²éÕÒÄ¿µÄµØÊ±½«»á·Ç³£Âý¡£Õâ¾ÍÊÇÒªÓ÷ÓÉ»º´æµÄÔÒò£º¿ÉÒÔÓÃÒÑÖªµÄºÃµÄ·ÓÉÀ´¼ÓËÙIP°üµÄ´«ËÍ¡£Â·ÓÉ»º´æÖеÄ·ÓÉÀ´Ô´ÓÚForwarding Information Database¡£
ÿ¸öIP×ÓÍøÓÃÒ»¸ö fib_zone ½á¹¹À´ÃèÊö¡£ fib_zone hash±íÖ¸Ïò×ÅÕâЩ½á¹¹¡£hashË÷ÒýÀ´Ô´ÓÚIP×ÓÍøÑÚÂë¡£ËùÓÐͨÏòͬһ×ÓÍøµÄ·ÓÉÓÉ fib_node ºÍ fib_info ½á¹¹À´ÃèÊö£¬ÕâÁ½½á¹¹ÔÚÿ¸ö fib_zone ½á¹¹µÄ fz_list ÖÐÅŶӡ£Èç¹ûÕâ¸ö×ÓÍøÖеÄ·ÓÉÊýÔö´ó£¬ÔòÉú³ÉÒ»¸öhash±í£¬ÒÔʹ²éÕÒ fib_node ½á¹¹¸ü¼ÓÈÝÒס£
ͨÏòͬһ×ÓÍø¿ÉÒÔÓжà¸ö·ÓÉ£¬ÕâЩ·ÓÉ¿ÉÄÜͨ¹ý¶à¸öÍø¹ØÖеÄÒ»¸ö¡£IP·Óɲ㲻ÔÊÐíÓÃͬһ¸öÍø¹Ø¶ÔÒ»¸ö×ÓÍøÓжàÓÚÒ»¸öµÄ·ÓÉ¡£»»ÑÔÖ®£¬Èç¹ûͨÏòͬһ×ÓÍøÓжà¸ö·ÓÉ£¬Ôòÿ¸ö·ÓÉÒª±£Ö¤Ê¹ÓÃÒ»¸ö²»Í¬µÄÍø¹Ø¡£Óëÿ¸ö·ÓÉÏà¹ØµÄÓÐÒ»¸ö metric ½á¹¹¡£ËüÓÃÀ´²âÁ¿¸Ã·ÓÉÓжàÓÅ¡£Ò»¸ö·ÓÉµÄ metric ʵÖÊÉÏÊÇËüÔÚµ½´ïÄ¿µÄ×ÓÍøÇ°Ëù¾¹ýµÄIP×ÓÍøÊý¡£ metric Ô½´ó£¬Â·ÓÉÔ½²î¡£
1 National Science Foundation
2 Synchronous Read Only Memory
3 duh? What used for?