¡¾ÊµÑéÔÀí¡¿
£¨Ò»£©TCP±¨Îĸñʽ 16λԴ¶Ë¿ÚºÅ 32λÐòºÅ 32λȷÈÏÐòºÅ 4λ±£U A P R S F Ê×ÁôR C S S Y I 16λ´°¿Ú´óС ²¿6G K H T N N ³¤Î» ¶È 16λ¼ìÑéºÍ Ñ¡Ïî Êý¾Ý
˵Ã÷£º £¨1£©Ã¿¸öTCP¶Î¶¼°üÀ¨Ô´¶ËºÍÄ¿µÄ¶ËµÄ¶Ë¿ÚºÅ£¬ÓÃÓÚѰÕÒ·¢ËͶ˺ͽÓÊն˵ÄÓ¦Óýø³Ì¡£ÕâÁ½¸öÖµ¼ÓÉÏIPÊײ¿µÄÔ´¶ËIPµØÖ·ºÍÄ¿µÄ¶ËIPµØÖ·Î¨Ò»È·¶¨Ò»¸öTCPÁ¬½Ó¡£
£¨2£©ÐòºÅÓÃÀ´±êʶ´ÓTCP·¢ËͶËÏò½ÓÊÕ¶Ë·¢Ë͵ÄÊý¾Ý×Ö½ÚÁ÷£¬Ëü±íʾÔÚÕâ¸ö±¨ÎĶÎÖеĵÚÒ»¸öÊý¾Ý×Ö½Ú¡£Èç¹û½«×Ö½ÚÁ÷¿´×÷ÔÚÁ½¸öÓ¦ÓóÌÐò¼äµÄµ¥ÏòÁ÷¶¯£¬ÔòTCPÓÃÐòºÅ¶Ôÿ¸ö×Ö½Ú½øÐмÆÊý¡£
£¨3£©µ±½¨Á¢Ò»¸öÐÂÁ¬½Óʱ£¬SYN±êÖ¾±ä1¡£ÐòºÅ×ֶΰüº¬ÓÉÕâ¸öÖ÷»úÑ¡ÔñµÄ¸ÃÁ¬½ÓµÄ³õʼÐòºÅISN£¬¸ÃÖ÷»úÒª·¢ËÍÊý¾ÝµÄµÚÒ»¸ö×Ö½ÚµÄÐòºÅΪÕâ¸öISN¼Ó1£¬ÒòΪSYN±ê־ʹÓÃÁËÒ»¸öÐòºÅ¡£
£¨4£©¼ÈȻÿ¸ö±»´«ÊäµÄ×Ö½Ú¶¼±»¼ÆÊý£¬È·ÈÏÐòºÅ°üº¬·¢ËÍÈ·ÈϵÄÒ»¶ËËùÆÚÍûÊÕµ½µÄÏÂÒ»¸öÐòºÅ¡£Òò´Ë£¬È·ÈÏÐòºÅÓ¦µ±Ê±ÉÏ´ÎÒѳɹ¦ÊÕµ½Êý¾Ý×Ö½ÚÐòºÅ¼Ó1¡£Ö»ÓÐACK±ê־Ϊ1ʱȷÈÏÐòºÅ×ֶβÅÓÐЧ¡£ £¨5£©·¢ËÍACKÎÞÐèÈκδú¼Û£¬ÒòΪ32λµÄÈ·ÈÏÐòºÅ×ֶκÍACK±êÖ¾Ò»Ñù£¬×ÜÊÇTCPÊײ¿µÄÒ»²¿·Ö¡£Òò´ËÒ»µ©Ò»¸öÁ¬½Ó½¨Á¢ÆðÀ´£¬Õâ¸ö×Ö¶Î×ÜÊDZ»ÉèÖã¬ACK±êÖ¾Ò²×ÜÊDZ»ÉèÖÃΪ1¡£
£¨6£©TCPΪӦÓòãÌṩȫ˫¹¤µÄ·þÎñ¡£Òò´Ë£¬Á¬½ÓµÄÿһ¶Ë±ØÐë±£³Öÿ¸ö·½ÏòÉϵĴ«ÊäÊý¾ÝÐòºÅ¡£
£¨7£©TCP¿ÉÒÔ±íÊöΪһ¸öûÓÐÑ¡ÔñÈ·ÈÏ»ò·ñÈϵĻª¶«´°¿ÚÐÒé¡£Òò´ËTCPÊײ¿ÖеÄÈ·ÈÏÐòºÅ±íʾ·¢ËÍ·½Òѳɹ¦ÊÕµ½×Ö½Ú£¬µ«»¹²»°üº¬È·ÈÏÐòºÅËùÖ¸µÄ×Ö½Ú¡£µ±Ç°»¹ÎÞ·¨¶ÔÊý¾ÝÁ÷ÖÐÑ¡¶¨µÄ²¿·Ö½øÐÐÈ·ÈÏ¡£
£¨8£©Êײ¿³¤¶ÈÐèÒªÉèÖã¬ÒòΪÈÎÑ¡×ֶεij¤¶ÈÊǿɱäµÄ¡£TCPÊײ¿×î¶à60¸ö×Ö½Ú¡£ £¨9£©6¸ö±ê־λÖеĶà¸ö¿ÉͬʱÉèÖÃΪ1 ¡ô URG£½ô¼±Ö¸ÕëÓÐЧ ¡ô ACK£È·ÈÏÐòºÅÓÐЧ
¡ô PSH£½ÓÊÕ·½Ó¦¾¡¿ì½«Õâ¸ö±¨ÎĶν»¸øÓ¦Óò㠡ô RST£Öؽ¨Á¬½Ó
¡ô SYN£Í¬²½ÐòºÅÓÃÀ´·¢ÆðÒ»¸öÁ¬½Ó
33
16λĿµÄ¶Ë¿ÚºÅ 16λ½ô¼±Ö¸Õë ¡ô FIN£·¢ËͶËÍê³É·¢ËÍÈÎÎñ
£¨10£©TCPµÄÁ÷Á¿¿ØÖÆÓÉÁ¬½ÓµÄÿһ¶Ëͨ¹ýÉùÃ÷µÄ´°¿Ú´óСÀ´Ìṩ¡£´°¿Ú´óСΪ×Ö½ÚÊý£¬ÆðʼÓÚÈ·ÈÏÐòºÅ×Ö¶ÎÖ¸Ã÷µÄÖµ£¬Õâ¸öÖµÊǽÓÊÕ¶ËÆÚÍû½ÓÊÕµÄ×Ö½ÚÊý¡£´°¿Ú´óСÊÇÒ»¸ö16ΪµÄ×ֶΣ¬Òò¶ø´°¿Ú´óС×î´óΪ65535×Ö½Ú¡£
£¨11£©¼ìÑéºÍ¸²¸ÇÕû¸öTCP±¨ÎĶˣºTCPÊײ¿ºÍTCPÊý¾Ý¡£ÕâÊÇÒ»¸öÇ¿ÖÆÐÔµÄ×ֶΣ¬Ò»¶¨ÊÇÓÉ·¢ËͶ˼ÆËãºÍ´æ´¢£¬²¢ÓɽÓÊն˽øÐÐÑéÖ¤¡£TCP¼ìÑéºÍµÄ¼ÆËãºÍUDPÊײ¿¼ìÑéºÍµÄ¼ÆËãÒ»Ñù£¬Ò²Ê¹ÓÃαÊײ¿¡£ £¨12£©½ô¼±Ö¸ÕëÊÇÒ»¸öÕýµÄÆ«ÒÆÁ¿£¬»ÆÈØÐòºÅ×Ö¶ÎÖеÄÖµÏà¼Ó±íʾ½ô¼±Êý¾Ý×îºóÒ»¸ö×Ö½ÚµÄÐòºÅ¡£TCPµÄ½ô¼±·½Ê½ÊÇ·¢ËͶËÏòÁíÒ»¶Ë·¢Ëͽô¼±Êý¾ÝµÄÒ»ÖÖ·½Ê½¡£
£¨13£©×î³£¼ûµÄ¿ÉÑ¡×Ö¶ÎÊÇ×±¨ÎÄ´óСMMS£¬Ã¿¸öÁ¬½Ó·½Í¨³£¶¼ÔÚͨÐŵĵÚÒ»¸ö±¨ÎĶÎÖÐÖ¸Ã÷Õâ¸öÑ¡Ïî¡£ËüÖ¸Ã÷±¾¶ËËùÄܽÓÊÕµÄ×î´ó³¤¶ÈµÄ±¨ÎĶΡ£
£¨¶þ£©Óû§Êý¾Ý±¨¸ñʽ: Ô´¶Ë¿ÚºÅ Ä¿µÄ¶Ë¿ÚºÅ ×ܳ¤¶È £¨2×Ö½Ú£© £¨2×Ö½Ú£© £¨2×Ö½Ú£© £¨Èý£©WinsockÍøÂç±à³Ì½Ó¿Ú¼ò½é
¼ìÑéºÍ £¨2×Ö½Ú£© Êý¾Ý 1£®Ì×½Ó¿ÚÍøÂç±à³ÌÔÀí
Ì×½Ó¿ÚÓÐÈýÖÖÀàÐÍ£ºÁ÷ʽÌ×½Ó¿Ú¡¢Êý¾Ý±¨Ì×½Ó¿Ú¼°ÔʼÌ×½Ó¿Ú¡£Á÷ʽÌ×½Ó¿Ú¶¨ÒåÁËÒ»ÖÖ¿É¿¿µÄÃæÏòÁ¬½ÓµÄ·þÎñ,ʵÏÖÁËÎÞ²î´íÎÞÖØ¸´µÄ˳ÐòÊý¾Ý´«Êä.Êý¾Ý±¨Ì×½Ó¿Ú¶¨ÒåÁËÒ»ÖÖÎÞÁ¬½ÓµÄ·þÎñ,Êý¾Ýͨ¹ýÏ໥¶ÀÁ¢µÄ±¨ÎĽøÐд«Êä,ÊÇÎÞÐòµÄ,²¢ÇÒ²»±£Ö¤¿É¿¿,ÎÞ²î´í.ÔʼÌ×½Ó¿ÚÔÊÐí¶ÔµÍ²ãÐÒéÈçIP»òICMPÖ±½Ó·ÃÎÊ,Ö÷ÒªÓÃÓÚеÄÍøÂçÐÒéʵÏֵIJâÊԵȡ£
ÎÞÁ¬½Ó·þÎñÆ÷Ò»°ã¶¼ÊÇÃæÏòÊÂÎñ´¦ÀíµÄ£¬Ò»¸öÇëÇóÒ»¸öÓ¦´ð¾ÍÍê³ÉÁ˿ͻ§³ÌÐòÓë·þÎñ³ÌÐòÖ®¼äµÄÏ໥×÷Óá£ÈôʹÓÃÎÞÁ¬½ÓµÄÌ×½Ó¿Ú±à³Ì£¬³ÌÐòµÄÁ÷³ÌÈçͼ£º
34
ÃæÏòÁ¬½Ó·þÎñÆ÷´¦ÀíµÄÇëÇóÍùÍù±È½Ï¸´ÔÓ£¬²»ÊÇÒ»À´Ò»È¥µÄÇëÇóÓ¦´ðËùÄܽâ¾öµÄ£¬¶øÇÒÍùÍùÊDz¢·¢·þÎñÆ÷¡£Ê¹ÓÃÃæÏòÁ¬½ÓµÄÌ×½Ó¿Ú±à³Ì, ÆäʱÐò¿ÉÒÔͨ¹ýÏÂͼÀ´±íʾ£º
Ì×½Ó¿Ú¹¤×÷¹ý³ÌÈçÏ£º·þÎñÆ÷Ê×ÏÈÆô¶¯,ͨ¹ýµ÷ÓÃsocket()½¨Á¢Ò»¸öÌ×½Ó¿Ú,È»ºóµ÷ÓÃbind()½«¸ÃÌ׽ӿںͱ¾µØÍøÂçµØÖ·ÁªÏµÔÚÒ»Æð,ÔÙµ÷ÓÃlisten()ʹÌ×½Ó¿Ú×öºÃÕìÌýµÄ×¼±¸,²¢¹æ¶¨ËüµÄÇëÇó¶ÓÁеij¤¶È,Ö®ºó¾Íµ÷ÓÃaccept()À´½ÓÊÕÁ¬½Ó.¿Í»§ÔÚ½¨Á¢Ì×½Ó¿Úºó¾Í¿Éµ÷ÓÃconnect()ºÍ·þÎñÆ÷½¨Á¢Á¬½Ó.Á¬½ÓÒ»µ©½¨Á¢,¿Í»§»úºÍ·þÎñÆ÷Ö®¼ä¾Í¿ÉÒÔͨ¹ýµ÷ÓÃsend()ºÍrecv()À´·¢ËͺͽÓÊÕÊý¾Ý.×îºó,´ýÊý¾Ý´«ËͽáÊøºó,Ë«·½µ÷ÓÃclose()¹Ø±ÕÌ×½Ó¿Ú¡£
2¡¢³£ÓõÄWindows Socket APIº¯Êý (1)WSAStartupº¯Êý
int WSAStartup(
WORD wVersionRequested, LPWSADATA lpWSAData );
ʹÓÃSocketµÄ³ÌÐòÔÚʹÓÃSocket֮ǰ±ØÐëµ÷ÓÃWSAStartupº¯Êý¡£¸Ãº¯ÊýµÄµÚÒ»¸ö²ÎÊýÖ¸Ã÷³ÌÐòÇëÇóʹÓõÄSocket°æ±¾£¬ÆäÖиßλ×Ö½ÚÖ¸Ã÷¸±°æ±¾¡¢µÍλ×Ö½ÚÖ¸Ã÷Ö÷°æ±¾£»²Ù×÷ϵͳÀûÓõڶþ¸ö²ÎÊý·µ»ØÇëÇóµÄSocketµÄ°æ±¾ÐÅÏ¢¡£µ±Ò»¸öÓ¦ÓóÌÐòµ÷ÓÃWSAStartupº¯Êýʱ£¬²Ù×÷ϵͳ¸ù¾ÝÇëÇóµÄSocket°æ±¾À´ËÑË÷ÏàÓ¦µÄSocket¿â£¬È»ºó
35
°ó¶¨ÕÒµ½µÄSocket¿âµ½¸ÃÓ¦ÓóÌÐòÖС£ÒÔºóÓ¦ÓóÌÐò¾Í¿ÉÒÔµ÷ÓÃËùÇëÇóµÄSocket¿âÖÐµÄÆäËüSocketº¯ÊýÁË¡£¸Ãº¯ÊýÖ´Ðгɹ¦ºó·µ»Ø0¡£
Àý£º¼ÙÈçÒ»¸ö³ÌÐòҪʹÓÃ2.1°æ±¾µÄSocket,ÄÇô³ÌÐò´úÂëÈçÏ wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
(2)WSACleanupº¯Êý
int WSACleanup (void);
Ó¦ÓóÌÐòÔÚÍê³É¶ÔÇëÇóµÄSocket¿âµÄʹÓúó£¬Òªµ÷ÓÃWSACleanupº¯ÊýÀ´½â³ýÓëSocket¿âµÄ°ó¶¨²¢ÇÒÊÍ·ÅSocket¿âËùÕ¼ÓõÄϵͳ×ÊÔ´¡£
(3)socketº¯Êý
SOCKET socket( int af, int type, int protocol );
Ó¦ÓóÌÐòµ÷ÓÃsocketº¯ÊýÀ´´´½¨Ò»¸öÄܹ»½øÐÐÍøÂçͨÐŵÄÌ×½Ó×Ö¡£µÚÒ»¸ö²ÎÊýÖ¸¶¨Ó¦ÓóÌÐòʹÓõÄͨÐÅÐÒéµÄÐÒé×壬¶ÔÓÚTCP/IPÐÒé×壬¸Ã²ÎÊýÖÃPF_INET;µÚ¶þ¸ö²ÎÊýÖ¸¶¨Òª´´½¨µÄÌ×½Ó×ÖÀàÐÍ£¬Á÷Ì×½Ó×ÖÀàÐÍΪSOCK_STREAM¡¢Êý¾Ý±¨Ì×½Ó×ÖÀàÐÍΪSOCK_DGRAM£»µÚÈý¸ö²ÎÊýÖ¸¶¨Ó¦ÓóÌÐòËùʹÓõÄͨÐÅÐÒé¡£¸Ãº¯ÊýÈç¹ûµ÷Óóɹ¦¾Í·µ»ØÐ´´½¨µÄÌ×½Ó×ÖµÄÃèÊö·û£¬Èç¹ûʧ°Ü¾Í·µ»ØINVALID_SOCKET¡£Ì×½Ó×ÖÃèÊö·ûÊÇÒ»¸öÕûÊýÀàÐ͵ÄÖµ¡£Ã¿¸ö½ø³ÌµÄ½ø³Ì¿Õ¼äÀï¶¼ÓÐÒ»¸öÌ×½Ó×ÖÃèÊö·û±í£¬¸Ã±íÖдæ·Å×ÅÌ×½Ó×ÖÃèÊö·ûºÍÌ×½Ó×ÖÊý¾Ý½á¹¹µÄ¶ÔÓ¦¹ØÏµ¡£¸Ã±íÖÐÓÐÒ»¸ö×ֶδæ·Åд´½¨µÄÌ×½Ó×ÖµÄÃèÊö·û£¬ÁíÒ»¸ö×ֶδæ·ÅÌ×½Ó×ÖÊý¾Ý½á¹¹µÄµØÖ·£¬Òò´Ë¸ù¾ÝÌ×½Ó×ÖÃèÊö·û¾Í¿ÉÒÔÕÒµ½Æä¶ÔÓ¦µÄÌ×½Ó×ÖÊý¾Ý½á¹¹¡£Ã¿¸ö½ø³ÌÔÚ×Ô¼ºµÄ½ø³Ì¿Õ¼äÀï¶¼ÓÐÒ»¸öÌ×½Ó×ÖÃèÊö·û±íµ«ÊÇÌ×½Ó×ÖÊý¾Ý½á¹¹¶¼ÊÇÔÚ²Ù×÷ϵͳµÄÄں˻º³åÀï¡£ÏÂÃæÊÇÒ»¸ö´´½¨Á÷Ì×½Ó×ÖµÄÀý×Ó£º
struct protoent *ppe;
ppe=getprotobyname(\
SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);
(4)closesocketº¯Êý
int closesocket( SOCKET s );
closesocketº¯ÊýÓÃÀ´¹Ø±ÕÒ»¸öÃèÊö·ûΪsÌ×½Ó×Ö¡£ÓÉÓÚÿ¸ö½ø³ÌÖж¼ÓÐÒ»¸öÌ×½Ó×ÖÃèÊö·û±í£¬±íÖеÄÿ¸öÌ×½Ó×ÖÃèÊö·û¶¼¶ÔÓ¦ÁËÒ»¸öλÓÚ²Ù×÷ϵͳ»º³åÇøÖеÄÌ×½Ó×ÖÊý¾Ý½á¹¹£¬Òò´ËÓпÉÄÜÓм¸¸öÌ×½Ó×ÖÃèÊö·ûÖ¸Ïòͬһ¸öÌ×½Ó×ÖÊý¾Ý½á¹¹¡£Ì×½Ó×ÖÊý¾Ý½á¹¹ÖÐרÃÅÓÐÒ»¸ö×ֶδæ·Å¸Ã½á¹¹µÄ±»ÒýÓôÎÊý£¬¼´ÓжàÉÙ¸öÌ×½Ó×ÖÃèÊö·ûÖ¸Ïò¸Ã½á¹¹¡£µ±µ÷ÓÃclosesocketº¯Êýʱ£¬²Ù×÷ϵͳÏȼì²éÌ×½Ó×ÖÊý¾Ý½á¹¹ÖеĸÃ×ֶεÄÖµ£¬Èç¹ûΪ1£¬¾Í±íÃ÷Ö»ÓÐÒ»¸öÌ×½Ó×ÖÃèÊö·ûÖ¸ÏòËü£¬Òò´Ë²Ù×÷ϵͳ¾ÍÏȰÑsÔÚÌ×½Ó×ÖÃèÊö·û±íÖжÔÓ¦µÄÄÇÌõ±íÏîÇå³ý£¬²¢ÇÒÊÍ·Ås¶ÔÓ¦µÄÌ×½Ó×ÖÊý¾Ý½á¹¹£»Èç¹û¸Ã×ֶδóÓÚ1£¬ÄÇô²Ù×÷ϵͳ½ö½öÇå³ýsÔÚÌ×½Ó×ÖÃèÊö·û±íÖеĶÔÓ¦±íÏ²¢ÇÒ°Ñs¶ÔÓ¦µÄÌ×½Ó×ÖÊý¾Ý½á¹¹µÄÒýÓôÎÊý¼õ1¡£
36

