ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxÍøÂç±à³Ì--TCP/IPЭÒé

·¢²¼Ê±¼ä:2006-03-11 13:57:25À´Ô´:ºìÁª×÷Õß:ÌìɽÀÏͯ
7.1 ÍøÂç´«Êä·Ö²ã
Èç¹ûÄ㿼¹ý¼ÆËã»úµÈ¼¶¿¼ÊÔ,ÄÇôÄã¾ÍÓ¦¸ÃÒѾ­ÖªµÀÁËÍøÂç´«Êä·Ö²ãÕâ¸ö¸ÅÄî.ÔÚÍøÂçÉÏ,ÈËÃÇΪÁË´«ÊäÊý¾ÝʱµÄ·½±ã,°ÑÍøÂçµÄ´«Êä·ÖΪ7¸ö²ã´Î.·Ö±ðÊÇ:Ó¦Óòã,±íʾ²ã,»á»°²ã,´«Êä²ã,ÍøÂç²ã,Êý¾ÝÁ´Â·²ãºÍÎïÀí²ã.·ÖºÃÁ˲ãÒÔºó,´«ÊäÊý¾Ýʱ,ÉÏÒ»²ãÈç¹ûÒªÊý¾ÝµÄ»°,¾Í¿ÉÒÔÖ±½ÓÏòÏÂÒ»²ãÒªÁË,¶ø²»±ØÒª¹ÜÊý¾Ý´«ÊäµÄϸ½Ú.ÏÂÒ»²ãÒ²Ö»ÏòËüµÄÉÏÒ»²ãÌṩÊý¾Ý,¶ø²»ÒªÈ¥¹ÜÆäËü¶«Î÷ÁË.Èç¹ûÄã²»Ï뿼ÊÔ,ÄãûÓбØҪȥ¼ÇÕâЩ¶«Î÷µÄ.Ö»ÒªÖªµÀÊÇ·Ö²ãµÄ,¶øÇÒ¸÷²ãµÄ×÷Óò»Í¬.
7.2 IPЭÒé
IPЭÒéÊÇÔÚÍøÂç²ãµÄЭÒé.ËüÖ÷ÒªÍê³ÉÊý¾Ý°üµÄ·¢ËÍ×÷ÓÃ. ÏÂÃæÕâ¸ö±íÊÇIP4µÄÊý¾Ý°ü¸ñʽ
0 4 8 16 32
--------------------------------------------------
|°æ±¾ |Êײ¿³¤¶È|·þÎñÀàÐÍ| Êý¾Ý°ü×ܳ¤ |
--------------------------------------------------
| ±êʶ |DF |MF| ËéƬƫÒÆ |
--------------------------------------------------
| Éú´æʱ¼ä | ЭÒé | Êײ¿½ÏÑéºÍ |
------------------------------------------------
| Ô´IPµØÖ· |
------------------------------------------------
| Ä¿µÄIPµØÖ· |
-------------------------------------------------
| Ñ¡Ïî |
=================================================
| Êý¾Ý |
-------------------------------------------------
ÏÂÃæÎÒÃÇ¿´Ò»¿´IPµÄ½á¹¹¶¨Òå
struct ip
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ip_hl:4; /* header length */
unsigned int ip_v:4; /* version */
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int ip_v:4; /* version */
unsigned int ip_hl:4; /* header length */
#endif
u_int8_t ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_int8_t ip_ttl; /* time to live */
u_int8_t ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src, ip_dst; /* source and dest address */
};
ip_vIPЭÒéµÄ°æ±¾ºÅ,ÕâÀïÊÇ4,ÏÖÔÚIPV6ÒѾ­³öÀ´ÁË
ip_hlIP°üÊײ¿³¤¶È,Õâ¸öÖµÒÔ4×Ö½ÚΪµ¥Î».IPЭÒéÊײ¿µÄ¹Ì¶¨³¤¶ÈΪ20¸ö×Ö½Ú,Èç¹ûIP°üûÓÐÑ¡Ïî,ÄÇôÕâ¸öֵΪ5.
ip_tos·þÎñÀàÐÍ,˵Ã÷ÌṩµÄÓÅÏÈȨ.
ip_len˵Ã÷IPÊý¾ÝµÄ³¤¶È.ÒÔ×Ö½ÚΪµ¥Î».
ip_id±êʶÕâ¸öIPÊý¾Ý°ü.
ip_offËéƬƫÒÆ,ÕâºÍÉÏÃæIDÒ»ÆðÓÃÀ´ÖØ×éËéƬµÄ.
ip_ttlÉú´æʱ¼ä.û¾­¹ýÒ»¸ö·ÓɵÄʱºò¼õÒ»,Ö±µ½Îª0ʱ±»Å×Æú.
ip_pЭÒé,±íʾ´´½¨Õâ¸öIPÊý¾Ý°üµÄ¸ß²ãЭÒé.ÈçTCP,UDPЭÒé.
ip_sumÊײ¿Ð£ÑéºÍ,Ìṩ¶ÔÊײ¿Êý¾ÝµÄУÑé.
ip_src,ip_dst·¢ËÍÕߺͽÓÊÕÕßµÄIPµØÖ·
¹ØÓÚIPЭÒéµÄÏêϸÇé¿ö,Çë²Î¿¼ RFC791
7.3 ICMPЭÒé
ICMPÊÇÏûÏ¢¿ØÖÆЭÒé,Ò²´¦ÓÚÍøÂç²ã.ÔÚÍøÂçÉÏ´«µÝIPÊý¾Ý°üʱ,Èç¹û·¢ÉúÁË´íÎó,ÄÇô¾Í»áÓÃICMPЭÒéÀ´±¨¸æ´íÎó.
ICMP°üµÄ½á¹¹ÈçÏÂ:
0 8 16 32

---------------------------------------------------------------------
| ÀàÐÍ | ´úÂë | УÑéºÍ |
--------------------------------------------------------------------
| Êý¾Ý | Êý¾Ý |
--------------------------------------------------------------------
ICMPÔÚÖеĶ¨ÒåÊÇ
struct icmphdr
{
u_int8_t type; /* message type */
u_int8_t code; /* type sub-code */
u_int16_t checksum;
union
{
struct
{
u_int16_t id;
u_int16_t sequence;
} echo; /* echo datagram */
u_int32_t gateway; /* gateway address */
struct
{
u_int16_t __unused;
u_int16_t mtu;
} frag; /* path mtu discovery */
} un;
};
¹ØÓÚICMPЭÒéµÄÏêϸÇé¿ö¿ÉÒԲ鿴 RFC792
7.4 UDPЭÒé
UDPЭÒéÊǽ¨Á¢ÔÚIPЭÒé»ù´¡Ö®ÉϵÄ,ÓÃÔÚ´«Êä²ãµÄЭÒé.UDPºÍIPЭÒéÒ»ÑùÊDz»¿É¿¿µÄÊý¾Ý±¨·þÎñ.UDPµÄÍ·¸ñʽΪ:
0 16 32
---------------------------------------------------
| UDPÔ´¶Ë¿Ú | UDPÄ¿µÄ¶Ë¿Ú |
---------------------------------------------------
| UDPÊý¾Ý±¨³¤¶È | UDPÊý¾Ý±¨Ð£Ñé |
---------------------------------------------------
UDP½á¹¹ÔÚÖеĶ¨ÒåΪ:
struct udphdr {
u_int16_t source;
u_int16_t dest;
u_int16_t len;
u_int16_t check;
};
¹ØÓÚUDPЭÒéµÄÏêϸÇé¿ö,Çë²Î¿¼ RFC768
7.5 TCP
TCPЭÒéÒ²Êǽ¨Á¢ÔÚIPЭÒéÖ®ÉϵÄ,²»¹ýTCPЭÒéÊÇ¿É¿¿µÄ.°´ÕÕ˳Ðò·¢Ë͵Ä.TCPµÄÊý¾Ý½á¹¹±ÈÇ°ÃæµÄ½á¹¹¶¼Òª¸´ÔÓ.
0 4 8 10 16 24 32
-------------------------------------------------------------------
| Ô´¶Ë¿Ú | Ä¿µÄ¶Ë¿Ú |
-------------------------------------------------------------------
| ÐòÁкŠ|
------------------------------------------------------------------
| È·ÈϺŠ|
------------------------------------------------------------------
| | |U|A|P|S|F| |
|Êײ¿³¤¶È| ±£Áô |R|C|S|Y|I| ´°¿Ú |
| | |G|K|H|N|N| |
-----------------------------------------------------------------
| УÑéºÍ | ½ô¼±Ö¸Õë |
-----------------------------------------------------------------
| Ñ¡Ïî | Ìî³ä×Ö½Ú |
-----------------------------------------------------------------
TCPµÄ½á¹¹ÔÚÖж¨ÒåΪ:
struct tcphdr
{
u_int16_t source;
u_int16_t dest;
u_int32_t seq;
u_int32_t ack_seq;
#if __BYTE_ORDER == __LITTLE_ENDIAN
u_int16_t res1:4;
u_int16_t doff:4;
u_int16_t fin:1;
u_int16_t syn:1;
u_int16_t rst:1;
u_int16_t psh:1;
u_int16_t ack:1;
u_int16_t urg:1;
u_int16_t res2:2;
#elif __BYTE_ORDER == __BIG_ENDIAN
u_int16_t doff:4;
u_int16_t res1:4;
u_int16_t res2:2;
u_int16_t urg:1;
u_int16_t ack:1;
u_int16_t psh:1;
u_int16_t rst:1;
u_int16_t syn:1;
u_int16_t fin:1;
#endif
u_int16_t window;

u_int16_t check;
u_int16_t urg_prt;
};
source·¢ËÍTCPÊý¾ÝµÄÔ´¶Ë¿Ú
dest½ÓÊÜTCPÊý¾ÝµÄÄ¿µÄ¶Ë¿Ú
seq±êʶ¸ÃTCPËù°üº¬µÄÊý¾Ý×ֽڵĿªÊ¼ÐòÁкÅ
ack_seqÈ·ÈÏÐòÁкÅ,±íʾ½ÓÊÜ·½ÏÂÒ»´Î½ÓÊܵÄÊý¾ÝÐòÁкÅ.
doffÊý¾ÝÊײ¿³¤¶È.ºÍIPЭÒéÒ»Ñù,ÒÔ4×Ö½ÚΪµ¥Î».Ò»°ãµÄʱºòΪ5
urgÈç¹ûÉèÖýô¼±Êý¾ÝÖ¸Õë,Ôò¸ÃλΪ1
ackÈç¹ûÈ·ÈϺÅÕýÈ·,ÄÇôΪ1
pshÈç¹ûÉèÖÃΪ1,ÄÇô½ÓÊÕ·½ÊÕµ½Êý¾Ýºó,Á¢¼´½»¸øÉÏÒ»²ã³ÌÐò
rstΪ1µÄʱºò,±íʾÇëÇóÖØÐÂÁ¬½Ó
synΪ1µÄʱºò,±íʾÇëÇó½¨Á¢Á¬½Ó
finΪ1µÄʱºò,±íʾÇ×ÆݹرÕÁ¬½Ó
window´°¿Ú,¸æËß½ÓÊÕÕß¿ÉÒÔ½ÓÊյĴóС
check¶ÔTCPÊý¾Ý½øÐнϺË
urg_ptrÈç¹ûurg=1,ÄÇôָ³ö½ô¼±Êý¾Ý¶ÔÓÚÀúÊ·Êý¾Ý¿ªÊ¼µÄÐòÁкŵÄÆ«ÒÆÖµ
¹ØÓÚTCPЭÒéµÄÏêϸÇé¿ö,Çë²é¿´ RFC793
7.6 TCPÁ¬½ÓµÄ½¨Á¢
TCPЭÒéÊÇÒ»ÖÖ¿É¿¿µÄÁ¬½Ó,ΪÁ˱£Ö¤Á¬½ÓµÄ¿É¿¿ÐÔ,TCPµÄÁ¬½ÓÒª·ÖΪ¼¸¸ö²½Öè.ÎÒÃÇ°ÑÕâ¸öÁ¬½Ó¹ý³Ì³ÆΪ"Èý´ÎÎÕÊÖ".
ÏÂÃæÎÒÃÇ´ÓÒ»¸öʵÀýÀ´·ÖÎö½¨Á¢Á¬½ÓµÄ¹ý³Ì.
µÚÒ»²½¿Í»§»úÏò·þÎñÆ÷·¢ËÍÒ»¸öTCPÊý¾Ý°ü,±íʾÇëÇó½¨Á¢Á¬½Ó. Ϊ´Ë,¿Í»§¶Ë½«Êý¾Ý°üµÄSYNλÉèÖÃΪ1,²¢ÇÒÉèÖÃÐòÁкÅseq=1000(ÎÒÃǼÙÉèΪ1000).
µÚ¶þ²½·þÎñÆ÷ÊÕµ½ÁËÊý¾Ý°ü,²¢´ÓSYNλΪ1ÖªµÀÕâÊÇÒ»¸ö½¨Á¢ÇëÇóµÄÁ¬½Ó.ÓÚÊÇ·þÎñÆ÷Ò²Ïò¿Í»§¶Ë·¢ËÍÒ»¸öTCPÊý¾Ý°ü.ÒòΪÊÇÏìÓ¦¿Í»§»úµÄÇëÇó,ÓÚÊÇ·þÎñÆ÷ÉèÖÃACKΪ1,sak_seq=1001(1000+1)ͬʱÉèÖÃ×Ô¼ºµÄÐòÁкÅ.seq=2000(ÎÒÃǼÙÉèΪ2000).
µÚÈý²½¿Í»§»úÊÕµ½ÁË·þÎñÆ÷µÄTCP,²¢´ÓACKΪ1ºÍack_seq=1001ÖªµÀÊÇ´Ó·þÎñÆ÷À´µÄÈ·ÈÏÐÅÏ¢.ÓÚÊÇ¿Í»§»úÒ²Ïò·þÎñÆ÷·¢ËÍÈ·ÈÏÐÅÏ¢.¿Í»§»úÉèÖÃACK=1,ºÍack_seq=2001,seq=1001,·¢Ë͸ø·þÎñÆ÷.ÖÁ´Ë¿Í»§¶ËÍê³ÉÁ¬½Ó.
×îºóÒ»²½·þÎñÆ÷Êܵ½È·ÈÏÐÅÏ¢,Ò²Íê³ÉÁ¬½Ó.
ͨ¹ýÉÏÃ漸¸ö²½Öè,Ò»¸öTCPÁ¬½Ó¾Í½¨Á¢ÁË.µ±È»ÔÚ½¨Á¢¹ý³ÌÖпÉÄܳöÏÖ´íÎó,²»¹ýTCPЭÒé¿ÉÒÔ±£Ö¤×Ô¼ºÈ¥´¦Àí´íÎóµÄ.
˵һ˵ÆäÖеÄÒ»ÖÖ´íÎó.
Ìý˵¹ýDOSÂð?(¿É²»ÊDzÙ×÷ϵͳ°¡).½ñÄê´º½ÚµÄʱºò,ÃÀ¹úµÄÎå´óÍøÕ¾Ò»ÆðÊܵ½¹¥»÷.¹¥»÷ÕßÓõľÍÊÇDOS(¾Ü¾øʽ·þÎñ)·½Ê½.¸ÅÀ¨µÄ˵һÏÂÔ­Àí.
¿Í»§»úÏȽøÐеÚÒ»¸ö²½Öè.·þÎñÆ÷ÊÕµ½ºó,½øÐеڶþ¸ö²½Öè.°´ÕÕÕý³£µÄTCPÁ¬½Ó,¿Í»§»úÓ¦¸Ã½øÐеÚÈý¸ö²½Öè.
²»¹ý¹¥»÷Õßʵ¼ÊÉϲ¢²»½øÐеÚÈý¸ö²½Öè.ÒòΪ¿Í»§¶ËÔÚ½øÐеÚÒ»¸ö²½ÖèµÄʱºò,ÐÞ¸ÄÁË×Ô¼ºµÄIPµØÖ·,¾ÍÊÇ˵½«Ò»¸öʵ¼ÊÉϲ»´æÔÚµÄIPÌî³äÔÚ×Ô¼ºIPÊý¾Ý°üµÄ·¢ËÍÕßµÄIPÒ»À¸.ÕâÑùÒòΪ·þÎñÆ÷·¢µÄIPµØַûÓÐÈ˽ÓÊÕ,ËùÒÔ·þÎñ¶Ë»áÊÕ²»µ½µÚÈý¸ö²½ÖèµÄÈ·ÈÏÐźÅ,ÕâÑù·þÎñÎñ¶Ë»áÔÚÄDZßÒ»Ö±µÈ´ý,Ö±µ½³¬Ê±.
ÕâÑùµ±ÓдóÁ¿µÄ¿Í»§·¢³öÇëÇóºó,·þÎñ¶Ë»áÓдóÁ¿µÈ´ý,Ö±µ½ËùÓеÄ×ÊÔ´±»Óùâ,¶ø²»ÄÜÔÙ½ÓÊÕ¿Í»§»úµÄÇëÇó.
ÕâÑùµ±Õý³£µÄÓû§Ïò·þÎñÆ÷·¢³öÇëÇóʱ,ÓÉÓÚûÓÐÁË×ÊÔ´¶ø²»Äܳɹ¦.ÓÚÊǾͳöÏÖÁË´º½ÚʱËù³öÏÖµÄÇé¿ö.
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 6 ÌõÆÀÂÛ

  1. snowlee ÓÚ 2013-08-03 17:07:22·¢±í:

    ºÃÏñû˵ʲô¹Ø¼üµÄ¶«Î÷,ЭÒé²ã´ÎҲûÌáµ½

  2. pangy ÓÚ 2013-07-29 13:57:51·¢±í:

    ÏÂÔØҪǮµÄÓ´~~

  3. kentin ÓÚ 2013-07-28 12:10:26·¢±í:

    ûÓÐÏà¹Ø×ÊÁϵÄ:0w223dc

  4. shitougege ÓÚ 2013-07-25 13:30:36·¢±í:

    лл¥Ö÷·ÖÏí£¡

  5. congsong1319 ÓÚ 2011-09-27 23:32:42·¢±í:

    ²»´í ÐÁ¿àÂ¥Ö÷ÁË

  6. nomaze ÓÚ 2011-07-29 09:23:33·¢±í:

    ÏÂÔØҪǮµÄÓ´~~