20080927BRnbsp; - 하늘공원에서 경치 구경BRnbsp; - 월드컵 경기장에서 서태지 콘서트가 있었음. 그러나 우리는 영화 헬보이를 봤음.BRBRBR하늘공원갈때 사전 준비사항BRnbsp; - 운동화등 최대한 편한 복장과 신발을 신고 갈것.BRnbsp; - 카메라는 챙겨갈것. 휴대폰 디카로는 아쉬움 100%BRnbsp; - 노을을 볼수 있도록 시간조절을 잘할것. (대략 오후 4시쯤에 올라가면 적당할듯)BRnbsp; - 맑은날을 골라서 갈것. 그리고 바람이 많이 불어서 추울수 있으니 옷은 여벌로 챙겨갈것.BRnbsp; - 물, 김밥은 챙겨갈것. (올라가면 수돗물은 있으나 판매대는 전혀 없음)BRBRBRBRBR
사용자
하늘공원의 초입부인 나무계단이 멀이서 보인다.BRBRBR
사용자
나무계단에 사람이 많은게 보이나?BRBRBR
사용자
나무계단에 사람들이 많다.BRBRBR
사용자
오늘은 날이 너무 좋아서 시야가 상당히 좋았다.BRBRBR
사용자
계단을 오르면서 위로 올려보면서 찍은 모습BRBRBR
사용자
나무계단 중간치에서 아래를 내려다본 모습BRBRBR
사용자
올라와서 초입부에서 내려다 보면 성산대교가 보인다.BRBRBR
사용자
월드컴 경기장 멋있다.BRBRBR
사용자
초임부 골목BRBRBR
사용자
안내소에서 내려다본 억새밭모습... 장관이다..BRBR
사용자
사용자
안내소 모습BRBRBR
사용자
풍력 발전기가 보인다. BRBRBR
사용자
풍력 발전기가 계속 돌아간다.BRBR
사용자
안내소 근처에 이런 조형물이 있다. 색깔은 뿌리는 락카로 하더군... 락카 냄새가 진동...BRBR
사용자
이건 갈대다.BRBRBR
사용자
이건 억새지....BRBR
사용자
풍력 발전기 앞에서 찍고...BRBR
사용자
풍력발전기 근처전망대에서 한강을 내려다본 모습BRBR
사용자
전망대에서 안내소를 향해서 본 모습BRBRBR
사용자
사람들 진짜 많이 왔다.BRBRBR
사용자
풍력발전기 가까이서...BRBRBR
사용자
사용자
사용자
사용자
사용자
사용자
사용자
사용자
사용자
사용자
기타 풍경들.................BRBRBRBR
사용자
월드컵 경기장에서 헬보이 영화를 보려고 갔는데 인파가 예전하고 사뭇 달랐다.BR물어봤더니 서태지 콘서트란다. 허걱! 난리다~BR어쨌건 우리는 헬보이를 봤다. ㅋㅋ
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/28 00:24 2008/09/28 00:24
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/292

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/292

트랙백 주소 :: http://blog.minzkn.com/trackback/292

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/292

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/292

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/292
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/292

BRULinux에/U서는 예전부터 STRONGIPV6_V6ONLY/STRONG socket option을 제공해왔었고 이 속성의 기본값이 0으로 되어 있었기에 별로 신경쓰지 않고도 EMIPv4와 IPv6를 동시지원하는 프로그램/EM을 작성할수 있었다.BR간혹 xinetd 의 경우는 accept후에 IPv6로 강제하는 경우가 있기는 한데 성능상 얼마나 좋을지는 의문이 간다.BRBR그런데 이것을 Windows에서 사용하려면 몇가지 역사와 Microsoft의 의도를 파악해야 할것 같다.BRBR우선 MSDN online 에서 STRONGIPV6_V6ONLY/STRONG에 대한 언급을 잠깐 인용해보자.BRBR DIV class=title xmlns:msxsl=urn:schemas-microsoft-com:xsltFONT size=1 DIV style=PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed DIV class=title xmlns:msxsl=urn:schemas-microsoft-com:xsltFONT color=#000000 size=1Indicates if a socket created for the AF_INET6 address family is restricted to IPv6 communications only. Sockets created for the AF_INET6 address family may be used for both IPv6 and IPv4 communications. Some applications may want to restrict their use of a socket created for the AF_INET6 address family to IPv6 communications only. /FONT PFONT size=1FONT color=#000000USTRONGFONT color=#0000ffWhen this value is non-zero (the default on Windows),/FONT/STRONG/U a socket created for the AF_INET6 address family can be used to send and receive IPv6 packets only./FONT/FONT/P PFONT color=#000000 size=1When this value is zero, a socket created for the AF_INET6 address family can be used to send and receive packets to and from an IPv6 address or an IPv4 address. Note that the ability to interact with an IPv4 address requires the use of IPv4 mapped addresses./FONT/P PFONT size=1FONT color=#000000UThis socket option is supported on Windows Vista or later/U./FONT/FONT/P/DIV/DIV/FONT/DIVBR위에서 중요한 부분은 파란색으로 표시한 부분인데 기본값이 0이 아닌 값이라는 점이다. 즉, 0이 아니라는 이야기는 STRONGAF_INET6로 생성한 소켓은 IPv4를 처리할수 없도록 강제한다는 점이다/STRONG.BRBR나는 여기까지 보고서 별 문제 없다고 생각했다. 그냥 그것을 0으로 설정하면 되는줄로만 알았다.BRBR헉! 근데 왠걸! STRONGVisualStudio C++ 2003 에서는 IPV6_V6ONLY define이 아예 없다./STRONGBRBR그래서 다시 위의 MSDN online문서를 보니 밑줄친 부분에 명시된것처럼 STRONGIPV6_V6ONLY옵션은 Windows Vista 이상에서만 지원된다고/STRONG 한다.BRBR어떤이는 그냥 Windows Vista 쓰면 되지! 라고 하는이도 있을것이다.BR하지만 그건 돈이 많거나 암흑의 경로로 윈도우를 쓰는 경우에 해당하는 분들일것이다.BR틀린말은 아니다. 그냥 Windows Vista 나 Windows Server 2008 구입해서 사용하면 되기는 한다.BR하지만 U고객은 최소한의 비용으로 최대의 효과를 원하는게 당연하고 프로그래머도 불가능하다고 결론된것이 아니면 더 찾아봐야 하는게 도리라고 생각한다/U.BRBR더 찾아보자......BRBRBRBR DIV class=title xmlns:msxsl=urn:schemas-microsoft-com:xsltFONT size=1 DIV style=PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed DIV class=title xmlns:msxsl=urn:schemas-microsoft-com:xsltFONT color=#000000 size=1Dual-Stack Sockets/FONT/DIV!--Content type: HTML. Transform: psdk2mtps.xslt.-- DIV class=clsServerSDKContent P PFONT color=#0000ff size=1UIn order to support both IPv4 and IPv6 on Windows XP Service Pack 1 (SP1) and on Windows Server 2003, an application has to create two sockets, one socket for use with IPv4 and one socket for use with IPv6. These two sockets must be handled separately by the application./U/FONT/P PFONT color=#000000FONT size=1Windows Vista and later offer the ability to create a single IPv6 socket which can handle both IPv6 and IPv4 traffic. For example, a TCP listening socket for IPv6 is created, put into dual stack mode, and bound to port 5001. This dual-stack socket can accept connections from IPv6 TCP clients connecting to port 5001 and from IPv4 TCP clients connecting to port 5001. This feature allows for greatly simplified application design and reduces the resource overhead required of posting operations on two separate sockets./FONTBR/FONT/P/DIV/DIV/FONTBRBRBRMSDN online에서 위와 같은 구문을 쉽게 찾을수 있었다.BR간략히 요약한다면 STRONGIPv6를 지원하는것은 Windows XP Service Pack 1과 Windows Server 2003 부터라는 예기다/STRONG.BR하지만 STRONGFONT color=#0000ffWindows Vista이후에서만 하나의 단일 소켓으로 IPv4와 IPv6를 처리할수 있도록 하는 옵션인 IPV6_V6ONLY가 존재하며 그 이전의 운영체제 버젼에서는 IPv6를 지원한다고만 했지 단일 소켓에서 IPv4와 IPv6를 지원하는것은 아니라고/FONT/STRONG 한다.BRBR결국 STRONGWindowsXPSP1과 WindowsServer2003에서는 단일소켓으로 처리할수 없기 때문에 IPv4용과 IPv6용 소켓을 따로 생성하며 응용프로그램에서 잘 설계해서 구현하는 방법을 제시했다/STRONG.BR그리고 성능상 그것이 유리할수도 있다는 식의 억양이 느껴진다.BRBR말이 쉽지 단일소켓으로 이미 오래전에 구현되었던 것을 그렇게 구현하려면 골치좀 아플거란것은 겪어볼 사람이라면 스트레스 지수에서 나타난다. 어쩄건 불가능한것은 아니다.BRBRU고객들은 아직 Windows Server 2008, Windows Vista를 단순히 IPv6지원하려고 구매하기에는 설득되지 않는다/U.BRBR그리고 Ustrcpy함수도 그냥 쓰게 냅두지 strcpy_s 로 강제하는것도 맘에 안드는 Microsoft다운 처사/U다.BRBRSTRONG개발자로서 Microsoft의 개발 Framework이 은근히 짜증나는것은 나만 그럴까?/STRONGBRBRBRBRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; - Write by A href=mailto:minzkn@minzkn.comminzkn@minzkn.com/A -/DIV
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/24 15:28 2008/09/24 15:28
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/291

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/291

트랙백 주소 :: http://blog.minzkn.com/trackback/291

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/291

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/291

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/291
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/291

DIV class=postbodyBRBRBRBRBR이것은 ICMP 및 ICMPv6를 사용한 ping구현에 대한 예제성격의 소스입니다.BR옛날에도 제가 ping 을 간략하게 구현한바 있었죠.BR이번에 올리는것은 그때버젼보다는 좀더 완성도가 있는 버젼이라고 말할수 있겠습니다.BR게다가 IPv6를 고려한 ICMPv6를 구현한 부분도 추가되었습니다.BR물론 아직도 완전한 버젼은 아니고 다음에 또 기회가 되면 좀더 완성해서 올려볼까 합니다.BRBR테스트 하실때는 당연히 RAW socket을 사용하기 때문에 root 권한으로 실행하셔야 합니다.BRBR DIV class=codetitleBCode:/B/DIV DIV class=codecontent/*BRCopyright (C) INFOEQ co.,LTD.BRAll rights reserved.BRBRAuthor: JaeHyuk Cho lt;minzkn@infoeq.comgt;BRBRTiny ping example sourceBR*/BRBR/* need for struct addrinfo */BR#if 1L amp;amp; (!defined(_POSIX_SOURCE))BR# define _POSIX_SOURCEnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;(1L)BR#endifBRBR#include lt;sys/types.hgt;BR#include lt;sys/time.hgt;BR#include lt;sys/socket.hgt;BR#include lt;stdio.hgt;BR#include lt;stdlib.hgt;BR#include lt;string.hgt;BR#include lt;unistd.hgt;BRBR#include lt;netinet/in.hgt;BR#include lt;netdb.hgt;BR#include lt;arpa/inet.hgt;BRBR#define def_mzping_icmp_optimize (1)BRBR#define def_mzping_icmp_min_packet_size (1 + 1 + 2 + 2 + 2) /* type(1) + code(1) + checksum(2) + identifier(2) + sequence_number(2) */BRBRstatic unsigned int mzping_icmp_checksum(const void *s_data, size_t s_size);BRstatic unsigned int mzping_ts32_us(void);BRstatic int mzping_icmp_v4(int s_socket, const char *s_hostname, const char *s_address_string, struct addrinfo *s_addrinfo, int s_sequence_number, int s_timeout);BRstatic int mzping_icmp_v6(int s_socket, const char *s_hostname, const char *s_address_string, struct addrinfo *s_addrinfo, int s_sequence_number, int s_timeout);BRBRint mzping(const char *s_hostname, int s_count);BRBRint main(int s_argc, char **s_argv);BRBRstatic unsigned int mzping_icmp_checksum(const void *s_data, size_t s_size)BR{BRnbsp; nbsp; register unsigned int s_result = 0u;BRBRnbsp; nbsp; while(s_size gt; ((size_t)1)) {BR#if def_mzping_icmp_optimize == (0)nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; s_result += (unsigned int)(ntohs(*((const unsigned short int *)s_data)));BR#elseBRnbsp; nbsp; nbsp; nbsp; s_result += (unsigned int)(*((const unsigned short int *)s_data));BR#endifnbsp; nbsp; nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; s_data = ((const unsigned short int *)s_data) + ((size_t)1);BRnbsp; nbsp; nbsp; nbsp; s_size -= (size_t)2;BRnbsp; nbsp; }BRnbsp; nbsp;BRnbsp; nbsp; if(s_size gt; ((size_t)0)) {BRnbsp; nbsp; nbsp; nbsp; s_result += (unsigned int)(*((const unsigned char *)s_data));BRnbsp; nbsp; }BRBR#if def_mzping_icmp_optimize == (0)nbsp; nbsp; BRnbsp; nbsp; while(s_result gt; 0xffffu) {BRnbsp; nbsp; nbsp; nbsp; s_result = (s_result gt;gt; 16) + (s_result amp; 0xffffu);BRnbsp; nbsp; }BR#elseBRnbsp; nbsp; s_result = (s_result gt;gt; 16) + (s_result amp; 0xffffu);BRnbsp; nbsp; s_result += s_result gt;gt; 16;BR#endifBRBR#if def_mzping_icmp_optimize == (0)nbsp; nbsp; BRnbsp; nbsp; return(htons((~s_result) amp; 0xffffu));BR#elseBRnbsp; nbsp; return((~s_result) amp; 0xffffu);BR#endifBR}BRBRstatic unsigned int mzping_ts32_us(void)BR{BRnbsp; nbsp; struct timeval s_timeval;BRnbsp; nbsp; BRnbsp; nbsp; (void)gettimeofday((struct timeval *)(amp;s_timeval), (void *)0);BRnbsp; nbsp; BRnbsp; nbsp; return((s_timeval.tv_sec * 1000000u) + s_timeval.tv_usec);BR}BRBRstatic int mzping_icmp_v4(int s_socket, const char *s_hostname, const char *s_address_string, struct addrinfo *s_addrinfo, int s_sequence_number, int s_timeout)BR{BRnbsp; nbsp; int s_result, s_check, s_myid;BRnbsp; nbsp; unsigned char s_packet[ (20 + 40) + (def_mzping_icmp_min_packet_size + 4) ];BRnbsp; nbsp; size_t s_packet_size;BRnbsp; nbsp; ssize_t s_send_bytes;BRnbsp; nbsp; size_t s_ip_header_size;BRnbsp; nbsp; fd_set s_fd_rx;BRnbsp; nbsp; struct timeval s_timeval;BRnbsp; nbsp; ssize_t s_recv_bytes;BRnbsp; nbsp; socklen_t s_socklen_in;BRnbsp; nbsp; struct sockaddr_in s_sockaddr_in;BRBRnbsp; nbsp; s_result = (-1);BRnbsp; nbsp; s_myid = (int)(getpid() amp; 0xffff);BRBRnbsp; nbsp; s_packet_size = (size_t)0;BRnbsp; nbsp; s_packet[s_packet_size] = 8u; /* ICMP_ECHO */BRnbsp; nbsp; s_packet_size += (size_t)1;BRnbsp; nbsp; s_packet[s_packet_size] = 0u; /* code */BRnbsp; nbsp; s_packet_size += (size_t)1;BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[s_packet_size])) = 0u; /* checksum */BRnbsp; nbsp; s_packet_size += (size_t)2;BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[s_packet_size])) = htons(s_myid); /* identifier */BRnbsp; nbsp; s_packet_size += (size_t)2;BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[s_packet_size])) = htons(s_sequence_number); /* sequence number */BRnbsp; nbsp; s_packet_size += (size_t)2;BR#if def_mzping_icmp_optimize == (0)nbsp; nbsp; BRnbsp; nbsp; *((unsigned int *)(amp;s_packet[8])) = htonl(mzping_ts32_us()); /* optional: time stamp */BR#elseBRnbsp; nbsp; *((unsigned int *)(amp;s_packet[8])) = (unsigned int)mzping_ts32_us(); /* optional: time stamp */BR#endifBRnbsp; nbsp; s_packet_size += (size_t)4;BRBRnbsp; nbsp; /* do checksum */BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[2])) = mzping_icmp_checksum((const void *)(amp;s_packet[0]), s_packet_size); /* checksum */BRnbsp; BRnbsp; nbsp; s_send_bytes = sendto(s_socket, (const void *)(amp;s_packet[0]), s_packet_size, MSG_NOSIGNAL,BRnbsp; nbsp; nbsp; nbsp; (struct sockaddr *)s_addrinfo-gt;ai_addr, s_addrinfo-gt;ai_addrlen);BRnbsp; nbsp; if(s_send_bytes != ((ssize_t)s_packet_size)) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stderr, send: can not send %ld/%lu\n, (long)s_send_bytes, (unsigned long)sizeof(s_packet));BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRBRl_need_echoreply:;BRnbsp; nbsp; FD_ZERO(amp;s_fd_rx);BRnbsp; nbsp; FD_SET(s_socket, amp;s_fd_rx);BRnbsp; nbsp; s_timeval.tv_sec = s_timeout / 1000;BRnbsp; nbsp; s_timeval.tv_usec = (s_timeout % 1000) * 1000;BRnbsp; nbsp; s_check = select(s_socket + 1, (fd_set *)(amp;s_fd_rx), (fd_set *)0, (fd_set *)0, (struct timeval *)(amp;s_timeval));BRnbsp; nbsp; if(s_check == (-1)) {BRnbsp; nbsp; nbsp; nbsp; perror(select);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRnbsp; nbsp; if(s_check == 0) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stderr, select: timeout\n);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRnbsp; nbsp; if(FD_ISSET(s_socket, amp;s_fd_rx) == 0) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stderr, select: is not set\n);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRBRnbsp; nbsp; s_socklen_in = (socklen_t)sizeof(s_sockaddr_in);BRnbsp; nbsp; s_recv_bytes = recvfrom(s_socket, (void *)(amp;s_packet[0]), sizeof(s_packet), MSG_NOSIGNAL, (struct sockaddr *)(amp;s_sockaddr_in), (socklen_t *)(amp;s_socklen_in));BRnbsp; nbsp; if(s_recv_bytes == ((ssize_t)(-1))) {BRnbsp; nbsp; nbsp; nbsp; perror(recvfrom);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRnbsp; nbsp; BRnbsp; nbsp; s_ip_header_size = ((size_t)((s_packet[0] gt;gt; 0) amp; 0x0fu)) lt;lt; 2;BRnbsp; nbsp; if(s_recv_bytes lt; (s_ip_header_size + s_packet_size)) {BRnbsp; nbsp; nbsp; nbsp; /* (void)fprintf(stderr, too small packet\n); */BRnbsp; nbsp; nbsp; nbsp; goto l_need_echoreply;BRnbsp; nbsp; }BRBRnbsp; nbsp; if(ntohs(*((unsigned short int *)(amp;s_packet[s_ip_header_size + 4]))) != s_myid) {BRnbsp; nbsp; nbsp; nbsp; /* (void)fprintf(stderr, not my ping\n); */BRnbsp; nbsp; nbsp; nbsp; goto l_need_echoreply;BRnbsp; nbsp; }BRnbsp; nbsp; BRnbsp; nbsp; if(s_packet[s_ip_header_size] == 8u /* ICMP_ECHO */) { /* maybe localhost loopback case */BRnbsp; nbsp; nbsp; nbsp; goto l_need_echoreply;BRnbsp; nbsp; }BRBRnbsp; nbsp; if(s_packet[s_ip_header_size] == 0u /* ICMP_ECHOREPLY */) {BRnbsp; nbsp; nbsp; nbsp; unsigned int s_trip_time;BRnbsp; nbsp; nbsp; nbsp; s_result = (int)ntohs(*((unsigned short int *)(amp;s_packet[s_ip_header_size + 1 + 1 + 2 + 2])));BR#if def_mzping_icmp_optimize == (0)nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; s_trip_time = mzping_ts32_us() - ntohl(*((unsigned int *)(amp;s_packet[s_ip_header_size + def_mzping_icmp_min_packet_size])));BR#elseBRnbsp; nbsp; nbsp; nbsp; s_trip_time = mzping_ts32_us() - (*((unsigned int *)(amp;s_packet[s_ip_header_size + def_mzping_icmp_min_packet_size])));BR#endifBRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stdout, %ld bytes from %s (%s): icmp_seq=%d ttl=%u time=%u.%03u ms;\n,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; (unsigned long)(s_recv_bytes - (s_ip_header_size)),BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_hostname,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_address_string,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_result,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; (unsigned int)s_packet[8],BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_trip_time / 1000u,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_trip_time % 1000u);BRnbsp; nbsp; }BRBRnbsp; nbsp; return(s_result);BR}BRBRstatic int mzping_icmp_v6(int s_socket, const char *s_hostname, const char *s_address_string, struct addrinfo *s_addrinfo, int s_sequence_number, int s_timeout)BR{BRnbsp; nbsp; int s_result, s_check, s_myid;BRnbsp; nbsp; unsigned char s_packet[ (def_mzping_icmp_min_packet_size + 4) ];BRnbsp; nbsp; size_t s_packet_size;BRnbsp; nbsp; ssize_t s_send_bytes;BRBRnbsp; nbsp; fd_set s_fd_rx;BRnbsp; nbsp; struct timeval s_timeval;BRnbsp; nbsp; ssize_t s_recv_bytes;BRnbsp; nbsp; socklen_t s_socklen_in;BRnbsp; nbsp; struct sockaddr_in s_sockaddr_in;BRBRnbsp; nbsp; s_result = (-1);BRnbsp; nbsp; s_myid = (int)(getpid() amp; 0xffff);BRBRnbsp; nbsp; s_packet_size = (size_t)0;BRnbsp; nbsp; s_packet[s_packet_size] = 128u; /* ICMP6_ECHO_REQUEST */BRnbsp; nbsp; s_packet_size += (size_t)1;BRnbsp; nbsp; s_packet[s_packet_size] = 0u; /* code */BRnbsp; nbsp; s_packet_size += (size_t)1;BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[s_packet_size])) = 0u; /* checksum */BRnbsp; nbsp; s_packet_size += (size_t)2;BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[s_packet_size])) = htons(s_myid); /* identifier */BRnbsp; nbsp; s_packet_size += (size_t)2;BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[s_packet_size])) = htons(s_sequence_number); /* sequence number */BRnbsp; nbsp; s_packet_size += (size_t)2;BR#if def_mzping_icmp_optimize == (0)nbsp; nbsp; BRnbsp; nbsp; *((unsigned int *)(amp;s_packet[8])) = htonl(mzping_ts32_us()); /* optional: time stamp */BR#elseBRnbsp; nbsp; *((unsigned int *)(amp;s_packet[8])) = (unsigned int)mzping_ts32_us(); /* optional: time stamp */BR#endifBRnbsp; nbsp; s_packet_size += (size_t)4;BRBRnbsp; nbsp; /* do checksum */BRnbsp; nbsp; *((unsigned short int *)(amp;s_packet[2])) = mzping_icmp_checksum((const void *)(amp;s_packet[0]), s_packet_size); /* checksum */BRBRnbsp; nbsp; s_send_bytes = sendto(s_socket, (const void *)(amp;s_packet[0]), s_packet_size, MSG_NOSIGNAL,BRnbsp; nbsp; nbsp; nbsp; (struct sockaddr *)s_addrinfo-gt;ai_addr, s_addrinfo-gt;ai_addrlen);BRnbsp; nbsp; if(s_send_bytes != ((ssize_t)s_packet_size)) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stderr, send: can not send %ld/%lu\n, (long)s_send_bytes, (unsigned long)sizeof(s_packet));BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRBRl_need_echoreply:;BRnbsp; nbsp; FD_ZERO(amp;s_fd_rx);BRnbsp; nbsp; FD_SET(s_socket, amp;s_fd_rx);BRnbsp; nbsp; s_timeval.tv_sec = s_timeout / 1000;BRnbsp; nbsp; s_timeval.tv_usec = (s_timeout % 1000) * 1000;BRnbsp; nbsp; s_check = select(s_socket + 1, (fd_set *)(amp;s_fd_rx), (fd_set *)0, (fd_set *)0, (struct timeval *)(amp;s_timeval));BRnbsp; nbsp; if(s_check == (-1)) {BRnbsp; nbsp; nbsp; nbsp; perror(select);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRnbsp; nbsp; if(s_check == 0) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stderr, select: timeout\n);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRnbsp; nbsp; if(FD_ISSET(s_socket, amp;s_fd_rx) == 0) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stderr, select: is not set\n);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRnbsp; nbsp; BRnbsp; nbsp; s_socklen_in = (socklen_t)sizeof(s_sockaddr_in);BRnbsp; nbsp; s_recv_bytes = recvfrom(s_socket, (void *)(amp;s_packet[0]), sizeof(s_packet), MSG_NOSIGNAL, (struct sockaddr *)(amp;s_sockaddr_in), (socklen_t *)(amp;s_socklen_in));BRnbsp; nbsp; if(s_recv_bytes == ((ssize_t)(-1))) {BRnbsp; nbsp; nbsp; nbsp; perror(recvfrom);BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRnbsp; nbsp; BRnbsp; nbsp; if(s_recv_bytes lt; s_packet_size) {BRnbsp; nbsp; nbsp; nbsp; /* (void)fprintf(stderr, too small packet\n); */BRnbsp; nbsp; nbsp; nbsp; goto l_need_echoreply;BRnbsp; nbsp; }BRnbsp; nbsp; BRnbsp; nbsp; if(ntohs(*((unsigned short int *)(amp;s_packet[4]))) != s_myid) {BRnbsp; nbsp; nbsp; nbsp; /* (void)fprintf(stderr, not my ping\n); */BRnbsp; nbsp; nbsp; nbsp; goto l_need_echoreply;BRnbsp; nbsp; }BRBRnbsp; nbsp; if(s_packet[0] == 128u /* ICMP6_ECHO_REQUEST */) {BRnbsp; nbsp; nbsp; nbsp; goto l_need_echoreply;BRnbsp; nbsp; }BRnbsp; nbsp; BRnbsp; nbsp; if(s_packet[0] == 129u /* ICMP6_ECHO_REPLY */) {BRnbsp; nbsp; nbsp; nbsp; unsigned int s_trip_time;BRnbsp; nbsp; nbsp; nbsp; s_result = (int)ntohs(*((unsigned short int *)(amp;s_packet[1 + 1 + 2 + 2])));BR#if def_mzping_icmp_optimize == (0)nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; s_trip_time = mzping_ts32_us() - ntohl(*((unsigned int *)(amp;s_packet[def_mzping_icmp_min_packet_size])));BR#elseBRnbsp; nbsp; nbsp; nbsp; s_trip_time = mzping_ts32_us() - (*((unsigned int *)(amp;s_packet[def_mzping_icmp_min_packet_size])));BR#endifBRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stdout, %ld bytes from %s (%s): icmp_seq=%d ttl=%u time=%u.%03u ms;\n,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; (unsigned long)s_recv_bytes,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_hostname,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_address_string,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_result,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; (unsigned int)0u /* TODO: Hops limit here */,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_trip_time / 1000u,BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_trip_time % 1000u);BRnbsp; nbsp; }BRBRnbsp; nbsp; return(s_result);BR}BRBRint mzping(const char *s_hostname, int s_count)BR{BRnbsp; nbsp; int s_sequence_number = 0, s_check, s_socket;BRnbsp; nbsp; struct addrinfo *s_addrinfo_result;BRnbsp; nbsp; struct addrinfo s_addrinfo_hints;BRnbsp; nbsp; struct addrinfo *s_addrinfo;BRnbsp; nbsp; char s_address_string[ 64 ];BRnbsp; nbsp;BRnbsp; nbsp; /* resolv name */BRnbsp; nbsp; (void)memset((void *)(amp;s_addrinfo_hints), 0, sizeof(s_addrinfo_hints));BRnbsp; nbsp; s_addrinfo_hints.ai_socktype = SOCK_RAW;BRnbsp; nbsp; s_addrinfo_hints.ai_family = AF_UNSPEC;BRnbsp; nbsp; s_check = getaddrinfo(s_hostname, (const char *)0, (const struct addrinfo *)(amp;s_addrinfo_hints), (struct addrinfo **)(amp;s_addrinfo_result));BRnbsp; nbsp; if(s_check != 0) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stderr, getaddrinfo error: %s\n, gai_strerror(s_check));BRnbsp; nbsp; nbsp; nbsp; return(-1);BRnbsp; nbsp; }BRBRnbsp; nbsp; do {BRnbsp; nbsp; nbsp; nbsp; s_sequence_number++;BRBRnbsp; nbsp; nbsp; nbsp; for(s_addrinfo = s_addrinfo_result;s_addrinfo != ((struct addrinfo *)0);s_addrinfo = s_addrinfo-gt;ai_next) {BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; if(s_addrinfo-gt;ai_family == AF_INET) { /* ICMP */BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; struct sockaddr_in *s_in;BRBRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_socket = socket(s_addrinfo-gt;ai_family, SOCK_RAW, IPPROTO_ICMP);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; if(s_socket == (-1)) {BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; perror(socket);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; continue;BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; }BRBRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_in = (struct sockaddr_in *)s_addrinfo-gt;ai_addr;BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; inet_ntop(s_addrinfo-gt;ai_family, (const void *)(amp;s_in-gt;sin_addr), (char *)(amp;s_address_string[0]), (socklen_t)sizeof(s_address_string));BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_check = mzping_icmp_v4(s_socket, s_hostname, (const char *)(amp;s_address_string[0]), s_addrinfo, s_sequence_number, 20000);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; close(s_socket);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; }BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; else if(s_addrinfo-gt;ai_family == AF_INET6) { /* ICMPv6 */BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; struct sockaddr_in6 *s_in6;BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_socket = socket(s_addrinfo-gt;ai_family, SOCK_RAW, IPPROTO_ICMPV6);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; if(s_socket == (-1)) {BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; perror(socket);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; continue;BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; }BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_in6 = (struct sockaddr_in6 *)s_addrinfo-gt;ai_addr;BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; inet_ntop(s_addrinfo-gt;ai_family, (const void *)(amp;s_in6-gt;sin6_addr), (char *)(amp;s_address_string[0]), (socklen_t)sizeof(s_address_string));BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; s_check = mzping_icmp_v6(s_socket, s_hostname, (const char *)(amp;s_address_string[0]), s_addrinfo, s_sequence_number, 20000);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; close(s_socket);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; }BRnbsp; nbsp; nbsp; nbsp; }BRBRnbsp; nbsp; nbsp; nbsp; (void)sleep(1);BRnbsp; nbsp; }while(s_sequence_number lt; s_count);BRBRnbsp; nbsp; freeaddrinfo((struct addrinfo *)s_addrinfo_result);BRBRnbsp; nbsp; return(1);BRBR}BRBRint main(int s_argc, char **s_argv)BR{BRnbsp; nbsp; int s_count = 4;BRnbsp; nbsp; BRnbsp; nbsp; (void)fprintf(stdout, mzping v0.0.2 - Code by JaeHyuk Cho lt;minzkn@minzkn.comgt;\n);BRBRnbsp; nbsp; if(s_argc lt;= 1) {BRnbsp; nbsp; nbsp; nbsp; (void)fprintf(stdout, usage: %s lt;hostgt; lt;countgt;\n, (char *)s_argv[0]);BRnbsp; nbsp; nbsp; nbsp; BRnbsp; nbsp; nbsp; nbsp; /* (void)mzping(localhost, s_count); */BRBRnbsp; nbsp; nbsp; nbsp; return(EXIT_SUCCESS);BRnbsp; nbsp; }BRBRnbsp; nbsp; if(s_argc gt;= 3) {BRnbsp; nbsp; nbsp; nbsp; if(sscanf(s_argv[2], %i, amp;s_count) != 1) {BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; perror(count);BRnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; return(EXIT_FAILURE);BRnbsp; nbsp; nbsp; nbsp; }BRnbsp; nbsp; }BRBRnbsp; nbsp; (void)setuid(getuid());BRnbsp; nbsp; (void)mzping(s_argv[1], s_count);BRBRnbsp; nbsp; return(EXIT_SUCCESS);BR}BRBR/* vim: set expandtab: */BR/* End of source *//DIVBRBR DIV class=codetitleBCode:/B/DIV DIV class=codecontent# Copyright (C) Information Equipment co.,LTDBR# All rights reserved.BR# Code by JaeHyuk Cho lt;mailto:minzkn@infoeq.comgt;BRBRCROSS_COMPILEnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ?=#BRBRCCnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=$(CROSS_COMPILE)gcc#BRLDnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=$(CROSS_COMPILE)ld#BRRMnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=rm -f#BRSTRIPnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; :=$(CROSS_COMPILE)strip#BRBRTHIS_NAMEnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; :=mzping#BRBRCFLAGSnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=-Os -pipe -Wall -Werror -ansi -fomit-frame-pointer -fPIC -I.#BR#CFLAGSnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=-Os -pipe -Wall -Werror -fomit-frame-pointer -fPIC -I.#BRBRLDFLAGSnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; :=-s#BRSTRIPFLAGSnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=--remove-section=.comment --remove-section=.note#BRBRTARGET_binnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=$(THIS_NAME)#BRTARGETnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:=$(TARGET_bin)#BRBROBJECTS_binnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; := mzping.o#BROBJECTSnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; := $(OBJECTS_bin)#BRBRDEPENDnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;:= Makefile#BRBR.PHONY: all cleanBRBRall: $(TARGET)BRclean: ; $(RM) *.o $(TARGET)BRBR$(TARGET_bin): $(OBJECTS_bin)BRnbsp; nbsp; nbsp; nbsp; $(CC) $(LDFLAGS) -o $(@) $(^)BRnbsp; nbsp; nbsp; nbsp; $(STRIP) $(STRIPFLAGS) $(@)BR$(OBJECTS): $(DEPEND)BRBR%.o: %.c ; $(CC) $(CFLAGS) -c -o $(@) $(lt;)BRBR# End of Makefile/DIV/DIV
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/09 15:31 2008/09/09 15:31
받은 트랙백이 없고, 댓글 3개가 달렸습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/290

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/290

트랙백 주소 :: http://blog.minzkn.com/trackback/290

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/290

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/290

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/290
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/290
  1. wsong 2008/10/07 23:47  댓글주소  수정/삭제  댓글쓰기

    함수의 return을 전부 static으로 쓰셨는데요.
    static을 안써도 되는거 같은데..
    혹시 특별한 이유가 있나요?

  2. minzkn 2008/10/08 09:18  댓글주소  수정/삭제  댓글쓰기

    return값이 static이라기보다는 함수가 static(유효범위한정 심볼)이라는거죠.

    외부에 불필요하게 심볼이 노출될 필요가 없도록 static으로 한정시킨겁니다.
    물론 단순하게 생각한다면 static은 선택사항입니다. 필수는 아닙니다.

    주요 목적은 외부에서 함수심볼이 보이지 않게 하여 외부 다른 프로그램에서 이와 동일한 함수 심볼을 사용할수 있도록 name space를 관리한다는 의미에서 static을 사용한겁니다.

    요런 작은 예제까지 static을 사용할 필요는 없습니다만 적어도 저는 이러한 간단한 예제코드가 커다란 모듈에 융합될것을 고려하면서 예제를 짜는것뿐입니다. 그 이상도 그 이하도 아닙니다. 개발자마다 코딩습성이라는것이 있는데 저는 요런스타일이구나라고만 생각하시면 될듯 하네요.

    리눅스 커널소스도 보시면 아시겠지만 간단한 모듈들도 내부 함수는 static을 사용하는것을 볼수 있습니다. 그와 비슷한 이치로 사용하는것 뿐입니다.
    많은 사람들이 함께 만드는 목적물로 탄생하기 위해서는 외부에서 사용하지 않는 심볼은 static으로 제한을 걸어둠으로써 제 3자가 그 심볼명을 사용할수 있다는 취지입니다.

영화 신기전을 보고서 - 20080907

minzkn™ 2008/09/07 00:58 장인정신
2008년 9월 7일BRnbsp; - 어셈러브(A href=http://www.asmlove.co.kr/http://www.asmlove.co.kr/A)의 운영진중에 한명인 김기오씨의 결혼식에 참석BRnbsp; - 영화 신기전 관람BRBR영화 신기전을 보러 갔었다.BRBR
사용자
BRBRBR일단 이 영화에 대해서 간략히 설명한다면 통쾌함 이다.BR속이다 시원하면서도 우리민족의 슬기로움을 이 영화는 전하려고 한것 같다.BRBR중기전이 적군의 방패에 맞았을때의 통쾌함은 보지 않고서는 모른다.BR대기전은 완전 대박무기다.BRBRBR
사용자
BRBR강력히 추천한다. 아주 통퀘한 장면을 좋아한다면 이 영화 꼭 보길 바란다.BRBRBR
사용자
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/07 00:58 2008/09/07 00:58
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/289

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/289

트랙백 주소 :: http://blog.minzkn.com/trackback/289

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/289

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/289

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/289
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/289

Google Chrome 사용해보고서...

minzkn™ 2008/09/05 23:42 장인정신
SPAN class=Apple-style-span style=WORD-SPACING: 0px; FONT: 10px -webkit-monospace; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0SPAN class=Apple-style-span style=WORD-SPACING: 0px; FONT: 10px -webkit-monospace; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0SPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-span DIV style=TEXT-ALIGN: leftSPAN class=Apple-style-span style=WORD-SPACING: 0px; FONT: 10px -webkit-monospace; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0SPAN class=Apple-style-span style=WORD-SPACING: 0px; FONT: 10px -webkit-monospace; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0SPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-spanSPAN class=Apple-style-span PSPAN class=Apple-style-spanSPAN class=Apple-style-spanFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG음. 지금까지의 브라우저들과는 다른 느낌을 받았기에 간단히 사용해본다는 생각이었는데 오~우~ 대단하다는 말을 아낌없이 내뱉도록 유도하게 되는 브라우저다.BR/STRONG/FONT/SPAN/SPANSPAN class=Apple-style-spanSPAN class=Apple-style-spanBRFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG물론 이미 많은 사람들이 접해보고 확실히 좋은 성능의 브라우징에 호감을 갖게 되었을것이다.BR/STRONG/FONT/SPAN/SPANSPAN class=Apple-style-spanSPAN class=Apple-style-spanBRFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG나는 단지 속도가 빨라서 Chrome을 칭찬하려는 것이 아니다.BR개발자적인 측면에서 제품개발을 어떤설계에 입각하여 개발해야 하는가를 느꼈다는데 의미가 크다.BR/STRONG/FONT/SPAN/SPANSPAN class=Apple-style-spanSPAN class=Apple-style-spanBRFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG일단 상업적인 면에서는 브라우저 자체가 그리 높은 장래성이 있는 것은 아니라고 생각한다.BR구글역시 이것을 상업적인 이용보다는 자신들의 브라우징 세계를 도출하고자 한발자국 들여놓는다는것이 전략인것 같다.BRMS의 비논리적인 인터넷 오염을 지켜보기 힘들었나보다. 나 역시 그런 생각에 동감하는데....BRBRC/STRONG/FONT/SPAN/SPANSPAN class=Apple-style-spanSPAN class=Apple-style-spanFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONGhrome을 사용해보면 그러한 생각만 깔려있는 것이 아니고BR개발자의 열정이 깊숙하게 녹아들어 있다는 것도 느끼게 될것이다.BR/STRONG/FONT/SPAN/SPANSPAN class=Apple-style-spanSPAN class=Apple-style-spanBRFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG내가 봤을때 눈에 유독 띄는 장점으로는 다음과 같다.BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG1. U속도가 장난이 아니다/U. DNS 를 미리 캐쉬하는 방법이 많은 영향을 끼쳤을거라 생각한다. 그리고 렌더링하는 방식에서 이미지로딩을 하기전에 레이아웃을 잡아두고 동시에 그리는것 같다. 파이어폭스의 경우는 그리다가도 영역을 제 조절하기도 하는데 그런 부분을nbsp; 깔끔하게 계산하도록 렌더엔진을 잘 만든것 같다.BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG2. U불필요한 여백을 제거했다/U. 단지 몇 픽셀차이지만 전체적으로 브라우징 화면의 영역이 넓게 디자인됐다.BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG3. 복잡한 설정도 좋기는 하지만 전부 숨겨버리고 U딱 필요한것만 설정하게/U 두었다. 타사 브라우저들은 설정이 많아서 단점이라기 보다 그 기본값들이 대다수의 사람들에게 맞는 설정이라고 하기 힘들기 때문에 그 차이가 있다.BR/STRONG/FONT/P PFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG4. U자동완성기능/U이 어설픈 단어DB추출로 움직이는것이 아니고 비교적 우선순위 규칙에 맞도록 잘 선택되어 완성된다. 역시 검색엔진의 기술력이 최대한 발휘된 것 같다. 자동완성 miss율이 매우 적다는 것을 느끼게 한다.BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG5. 빈페이지에 U자주가는 페이지의 캐쉬페이지를/U 둠으로써 훨씬 빠른 접근이 가능하다. BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG6. U다운로드 진행바가 하단에 심플하게 표시되는데/U 파이어폭스의 그 어떤 플러그인과 흡사하지만 약간 다른 심플함이 있다.BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG7. 팝업참을 U우측 하단에 제목표시줄만 보이도록 띄워줘서/U 볼려면 올려서 보게끔 하여 화면을 최대한 광고팝업으로 가리지 않게 해두어 매우 편리했다.BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG8. U소스가 오픈되어/U 있다.BRBRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG확실히 파이어폭스, IE등에 비해서 강력한 성능과 인터페이스가 브라우저의 새로운 역사를 만들게 되었다는데 한표를 던지고 싶다.BRBR/STRONG/FONTFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONG구글이 구글답다는 이미지를 확고하게 더욱 굳히게 만드는 기점도 될것같다.BR이전에도 구글 신봉자 부류가 생길정도로 구글선호도는 매우 높아져 왔다.BR이번 Chome 으로 인해서 구글펜들이 늘어날것은 뻔한일이라고 생각된다.BRBR나 역시 이번 구글의 큰 업적으로 인해서 펜이 되었다고 선언한다. 구글! 대단하다. 그리고 앞으로도 그런 이미지를 유지하기를 바랄뿐이다./STRONG/FONT/SPAN/SPANFONT style=BACKGROUND-COLOR: #000000 face='Batang', Serif color=#ffffff size=2STRONGnbsp;BRBRBRBR 과연 우리 회사들은 자신의 회사다울까? 그리고 회사다운게 뭘까? 구글은 확실히 구글답다./STRONG/FONT/P/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/DIV/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN/SPAN
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/05 23:42 2008/09/05 23:42
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/288

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/288

트랙백 주소 :: http://blog.minzkn.com/trackback/288

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/288

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/288

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/288
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/288

제 3사단 (백골부대) 메달

minzkn™ 2008/09/05 13:21 장인정신
제대하기전에 소대장으로부터 받은 제 3사단 메달이다.BR그냥 추억의 골동품이 되어가길래 사진 올려본다. ㅎㅎBRBR필사즉생 백골난망 골육지정 ~BRBRBR
사용자
사용자
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/05 13:21 2008/09/05 13:21
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/287

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/287

트랙백 주소 :: http://blog.minzkn.com/trackback/287

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/287

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/287

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/287
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/287

PSTRONG금일(2008년 9월 5일) 새벽 1시 55분경/STRONGBRKT가 운용중인 무궁화 위성 5호의 자세 제어시스템의 문제로 인하여BR해당 위성을 사용중인 서비스가 중지되는 장애가 발생했다고 한다.BRBR일식현상에 의해서 제어국이 위성을 놓쳐서 발생했다고 들리기는 하는데 정확한 원인은 BR내가 직접 들은게 아니고 전해들은것 뿐이기에 확실한 원인은 모르겠다.BRBR이중에서 U내가 개발에 참여한 사내방송시스템도 마찬가지로BR위성수신장애로 인한 방송데이터를 수신하지 못하는 장애가 발생/U된 상태다.BRBR물론 UIP로 전환할수 있도록 되어 있기 때문에BR완전히 서비스가 불가능한 장애는 아니지만/U BRBR살다보니까 이런 장애가 내가 심여를 기울여 개발한 단말기에도 나타나는것을 보고BR참 아이러니하지 않을수 없다는것을 느낀다.BRBR아침에 위성장애 관련 연락받고 만우절인가 했었다. ㅎㅎBRBR시간내에 복구되지 않으면 IP로 전환해버린다고 한다.BR빨리 복구되길 바랄뿐...BR안되면 전환하면 그만인것을.....BRBR
사용자
/P
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/05 10:05 2008/09/05 10:05
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/286

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/286

트랙백 주소 :: http://blog.minzkn.com/trackback/286

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/286

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/286

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/286
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/286

[Network기초] IPv4 구조

Programming/Network 2008/09/01 20:40 장인정신
DIV id=wikiContent DIV H2A class=nonexistent href=http://wiki.minzkn.com/index.php/IPv4I/APv4/H2 DIV UL LI작성자BR DIV class=indent조재혁 (IMG alt=M src=http://wiki.minzkn.com/imgs/moni2/email.png align=middle border=0A class=externalLink href=mailto:minzkn@minzkn.comminzkn@minzkn.com/A)BRBR/DIV LI고친과정BR DIV class=indent2008년 6월 24일 : 처음씀BR2008년 9월 1일 : IP header, ICMP message에 대한 추가 정리BRBR/DIV/LI/UL/DIV/DIV DIV H3역사/H3 DIV DIV class=indentA class=nonexistent href=http://wiki.minzkn.com/index.php/IPv4I/APv4 protocol 은 1981년에 A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC791R/AFC791에 의해서 정의되었다.BRBR/DIV/DIV/DIV DIV H3Class 구분/H3 DIV UL LISTRONGA class/STRONG (I0.0.0.0 ~ 127.255.255.255/I)BR DIV class=indent128개의 네트웍으로 구성되며 각 네트웍은 16,777,216개의 주소를 갖는다.BR TABLE class=wiki cellSpacing=2 cellPadding=3 TBODY TR class=wiki TD class=wiki align=middleSTRONG0/STRONG /TD TD class=wiki align=middleSTRONG1/STRONG /TD TD class=wiki align=middleSTRONG2/STRONG /TD TD class=wiki align=middleSTRONG3/STRONG /TD TD class=wiki align=middleSTRONG4/STRONG /TD TD class=wiki align=middleSTRONG5/STRONG /TD TD class=wiki align=middleSTRONG6/STRONG /TD TD class=wiki align=middleSTRONG7/STRONG /TD TD class=wiki align=middleSTRONG8/STRONG /TD TD class=wiki align=middleSTRONG9/STRONG /TD TD class=wiki align=middleSTRONG10/STRONG /TD TD class=wiki align=middleSTRONG11/STRONG /TD TD class=wiki align=middleSTRONG12/STRONG /TD TD class=wiki align=middleSTRONG13/STRONG /TD TD class=wiki align=middleSTRONG14/STRONG /TD TD class=wiki align=middleSTRONG15/STRONG /TD TD class=wiki align=middleSTRONG16/STRONG /TD TD class=wiki align=middleSTRONG17/STRONG /TD TD class=wiki align=middleSTRONG18/STRONG /TD TD class=wiki align=middleSTRONG19/STRONG /TD TD class=wiki align=middleSTRONG20/STRONG /TD TD class=wiki align=middleSTRONG21/STRONG /TD TD class=wiki align=middleSTRONG22/STRONG /TD TD class=wiki align=middleSTRONG23/STRONG /TD TD class=wiki align=middleSTRONG24/STRONG /TD TD class=wiki align=middleSTRONG25/STRONG /TD TD class=wiki align=middleSTRONG26/STRONG /TD TD class=wiki align=middleSTRONG27/STRONG /TD TD class=wiki align=middleSTRONG28/STRONG /TD TD class=wiki align=middleSTRONG29/STRONG /TD TD class=wiki align=middleSTRONG30/STRONG /TD TD class=wiki align=middleSTRONG31/STRONG /TD/TR TR class=wiki TD class=wiki align=middle0 /TD TD class=wiki align=middle colSpan=7A class=nonexistent href=http://wiki.minzkn.com/index.php/NetIDN/AetID /TD TD class=wiki align=middle colSpan=24A class=nonexistent href=http://wiki.minzkn.com/index.php/HostIDH/AostID /TD/TR/TBODY/TABLEBR/DIV LISTRONGB class/STRONG (I128.0.0.0 ~ 191.255.255.255/I)BR DIV class=indent16,384개의 네트웍으로 구성되며 각 네트웍은 65,536개의 주소를 갖는다.BR TABLE class=wiki cellSpacing=2 cellPadding=3 TBODY TR class=wiki TD class=wiki align=middleSTRONG0/STRONG /TD TD class=wiki align=middleSTRONG1/STRONG /TD TD class=wiki align=middleSTRONG2/STRONG /TD TD class=wiki align=middleSTRONG3/STRONG /TD TD class=wiki align=middleSTRONG4/STRONG /TD TD class=wiki align=middleSTRONG5/STRONG /TD TD class=wiki align=middleSTRONG6/STRONG /TD TD class=wiki align=middleSTRONG7/STRONG /TD TD class=wiki align=middleSTRONG8/STRONG /TD TD class=wiki align=middleSTRONG9/STRONG /TD TD class=wiki align=middleSTRONG10/STRONG /TD TD class=wiki align=middleSTRONG11/STRONG /TD TD class=wiki align=middleSTRONG12/STRONG /TD TD class=wiki align=middleSTRONG13/STRONG /TD TD class=wiki align=middleSTRONG14/STRONG /TD TD class=wiki align=middleSTRONG15/STRONG /TD TD class=wiki align=middleSTRONG16/STRONG /TD TD class=wiki align=middleSTRONG17/STRONG /TD TD class=wiki align=middleSTRONG18/STRONG /TD TD class=wiki align=middleSTRONG19/STRONG /TD TD class=wiki align=middleSTRONG20/STRONG /TD TD class=wiki align=middleSTRONG21/STRONG /TD TD class=wiki align=middleSTRONG22/STRONG /TD TD class=wiki align=middleSTRONG23/STRONG /TD TD class=wiki align=middleSTRONG24/STRONG /TD TD class=wiki align=middleSTRONG25/STRONG /TD TD class=wiki align=middleSTRONG26/STRONG /TD TD class=wiki align=middleSTRONG27/STRONG /TD TD class=wiki align=middleSTRONG28/STRONG /TD TD class=wiki align=middleSTRONG29/STRONG /TD TD class=wiki align=middleSTRONG30/STRONG /TD TD class=wiki align=middleSTRONG31/STRONG /TD/TR TR class=wiki TD class=wiki align=middle1 /TD TD class=wiki align=middle0 /TD TD class=wiki align=middle colSpan=14A class=nonexistent href=http://wiki.minzkn.com/index.php/NetIDN/AetID /TD TD class=wiki align=middle colSpan=16A class=nonexistent href=http://wiki.minzkn.com/index.php/HostIDH/AostID /TD/TR/TBODY/TABLEBR/DIV LISTRONGC class/STRONG (I192.0.0.0 ~ 223.255.255.255/I)BR DIV class=indent2,097,152개의 네트웍으로 구성되며 각 네트웍은 256개의 주소를 갖는다.BR TABLE class=wiki cellSpacing=2 cellPadding=3 TBODY TR class=wiki TD class=wiki align=middleSTRONG0/STRONG /TD TD class=wiki align=middleSTRONG1/STRONG /TD TD class=wiki align=middleSTRONG2/STRONG /TD TD class=wiki align=middleSTRONG3/STRONG /TD TD class=wiki align=middleSTRONG4/STRONG /TD TD class=wiki align=middleSTRONG5/STRONG /TD TD class=wiki align=middleSTRONG6/STRONG /TD TD class=wiki align=middleSTRONG7/STRONG /TD TD class=wiki align=middleSTRONG8/STRONG /TD TD class=wiki align=middleSTRONG9/STRONG /TD TD class=wiki align=middleSTRONG10/STRONG /TD TD class=wiki align=middleSTRONG11/STRONG /TD TD class=wiki align=middleSTRONG12/STRONG /TD TD class=wiki align=middleSTRONG13/STRONG /TD TD class=wiki align=middleSTRONG14/STRONG /TD TD class=wiki align=middleSTRONG15/STRONG /TD TD class=wiki align=middleSTRONG16/STRONG /TD TD class=wiki align=middleSTRONG17/STRONG /TD TD class=wiki align=middleSTRONG18/STRONG /TD TD class=wiki align=middleSTRONG19/STRONG /TD TD class=wiki align=middleSTRONG20/STRONG /TD TD class=wiki align=middleSTRONG21/STRONG /TD TD class=wiki align=middleSTRONG22/STRONG /TD TD class=wiki align=middleSTRONG23/STRONG /TD TD class=wiki align=middleSTRONG24/STRONG /TD TD class=wiki align=middleSTRONG25/STRONG /TD TD class=wiki align=middleSTRONG26/STRONG /TD TD class=wiki align=middleSTRONG27/STRONG /TD TD class=wiki align=middleSTRONG28/STRONG /TD TD class=wiki align=middleSTRONG29/STRONG /TD TD class=wiki align=middleSTRONG30/STRONG /TD TD class=wiki align=middleSTRONG31/STRONG /TD/TR TR class=wiki TD class=wiki align=middle1 /TD TD class=wiki align=middle1 /TD TD class=wiki align=middle0 /TD TD class=wiki align=middle colSpan=21A class=nonexistent href=http://wiki.minzkn.com/index.php/NetIDN/AetID /TD TD class=wiki align=middle colSpan=8A class=nonexistent href=http://wiki.minzkn.com/index.php/HostIDH/AostID /TD/TR/TBODY/TABLEBR/DIV LISTRONGD class/STRONG (I224.0.0.0 ~ 239.255.255.255/I)BR DIV class=indentMulticast를 위한 주소로 사용된다.BR TABLE class=wiki cellSpacing=2 cellPadding=3 TBODY TR class=wiki TD class=wiki align=middleSTRONG0/STRONG /TD TD class=wiki align=middleSTRONG1/STRONG /TD TD class=wiki align=middleSTRONG2/STRONG /TD TD class=wiki align=middleSTRONG3/STRONG /TD TD class=wiki align=middleSTRONG4/STRONG /TD TD class=wiki align=middleSTRONG5/STRONG /TD TD class=wiki align=middleSTRONG6/STRONG /TD TD class=wiki align=middleSTRONG7/STRONG /TD TD class=wiki align=middleSTRONG8/STRONG /TD TD class=wiki align=middleSTRONG9/STRONG /TD TD class=wiki align=middleSTRONG10/STRONG /TD TD class=wiki align=middleSTRONG11/STRONG /TD TD class=wiki align=middleSTRONG12/STRONG /TD TD class=wiki align=middleSTRONG13/STRONG /TD TD class=wiki align=middleSTRONG14/STRONG /TD TD class=wiki align=middleSTRONG15/STRONG /TD TD class=wiki align=middleSTRONG16/STRONG /TD TD class=wiki align=middleSTRONG17/STRONG /TD TD class=wiki align=middleSTRONG18/STRONG /TD TD class=wiki align=middleSTRONG19/STRONG /TD TD class=wiki align=middleSTRONG20/STRONG /TD TD class=wiki align=middleSTRONG21/STRONG /TD TD class=wiki align=middleSTRONG22/STRONG /TD TD class=wiki align=middleSTRONG23/STRONG /TD TD class=wiki align=middleSTRONG24/STRONG /TD TD class=wiki align=middleSTRONG25/STRONG /TD TD class=wiki align=middleSTRONG26/STRONG /TD TD class=wiki align=middleSTRONG27/STRONG /TD TD class=wiki align=middleSTRONG28/STRONG /TD TD class=wiki align=middleSTRONG29/STRONG /TD TD class=wiki align=middleSTRONG30/STRONG /TD TD class=wiki align=middleSTRONG31/STRONG /TD/TR TR class=wiki TD class=wiki align=middle1 /TD TD class=wiki align=middle1 /TD TD class=wiki align=middle1 /TD TD class=wiki align=middle0 /TD TD class=wiki align=middle colSpan=28Multicast group ID /TD/TR/TBODY/TABLEBR/DIV LISTRONGE class/STRONG (I240.0.0.0 ~ 247.255.255.255/I)BR DIV class=indent미래를 위하여 사용을 보류한 영역이다.BR TABLE class=wiki cellSpacing=2 cellPadding=3 TBODY TR class=wiki TD class=wiki align=middleSTRONG0/STRONG /TD TD class=wiki align=middleSTRONG1/STRONG /TD TD class=wiki align=middleSTRONG2/STRONG /TD TD class=wiki align=middleSTRONG3/STRONG /TD TD class=wiki align=middleSTRONG4/STRONG /TD TD class=wiki align=middleSTRONG5/STRONG /TD TD class=wiki align=middleSTRONG6/STRONG /TD TD class=wiki align=middleSTRONG7/STRONG /TD TD class=wiki align=middleSTRONG8/STRONG /TD TD class=wiki align=middleSTRONG9/STRONG /TD TD class=wiki align=middleSTRONG10/STRONG /TD TD class=wiki align=middleSTRONG11/STRONG /TD TD class=wiki align=middleSTRONG12/STRONG /TD TD class=wiki align=middleSTRONG13/STRONG /TD TD class=wiki align=middleSTRONG14/STRONG /TD TD class=wiki align=middleSTRONG15/STRONG /TD TD class=wiki align=middleSTRONG16/STRONG /TD TD class=wiki align=middleSTRONG17/STRONG /TD TD class=wiki align=middleSTRONG18/STRONG /TD TD class=wiki align=middleSTRONG19/STRONG /TD TD class=wiki align=middleSTRONG20/STRONG /TD TD class=wiki align=middleSTRONG21/STRONG /TD TD class=wiki align=middleSTRONG22/STRONG /TD TD class=wiki align=middleSTRONG23/STRONG /TD TD class=wiki align=middleSTRONG24/STRONG /TD TD class=wiki align=middleSTRONG25/STRONG /TD TD class=wiki align=middleSTRONG26/STRONG /TD TD class=wiki align=middleSTRONG27/STRONG /TD TD class=wiki align=middleSTRONG28/STRONG /TD TD class=wiki align=middleSTRONG29/STRONG /TD TD class=wiki align=middleSTRONG30/STRONG /TD TD class=wiki align=middleSTRONG31/STRONG /TD/TR TR class=wiki TD class=wiki align=middle1 /TD TD class=wiki align=middle1 /TD TD class=wiki align=middle1 /TD TD class=wiki align=middle1 /TD TD class=wiki align=middle0 /TD TD class=wiki align=middle colSpan=27Reserved for future use /TD/TR/TBODY/TABLEBR/DIV/LI/UL/DIV/DIV DIV H3IP (Internet Protocol) header/H3 DIV UL LIIP datagram은 다음과 같은 형식을 가진다.BR DIV class=indent TABLE class=wiki cellSpacing=2 cellPadding=3 TBODY TR class=wiki TD class=wiki align=middleSTRONG0/STRONG /TD TD class=wiki align=middleSTRONG1/STRONG /TD TD class=wiki align=middleSTRONG2/STRONG /TD TD class=wiki align=middleSTRONG3/STRONG /TD TD class=wiki align=middleSTRONG4/STRONG /TD TD class=wiki align=middleSTRONG5/STRONG /TD TD class=wiki align=middleSTRONG6/STRONG /TD TD class=wiki align=middleSTRONG7/STRONG /TD TD class=wiki align=middleSTRONG8/STRONG /TD TD class=wiki align=middleSTRONG9/STRONG /TD TD class=wiki align=middleSTRONG10/STRONG /TD TD class=wiki align=middleSTRONG11/STRONG /TD TD class=wiki align=middleSTRONG12/STRONG /TD TD class=wiki align=middleSTRONG13/STRONG /TD TD class=wiki align=middleSTRONG14/STRONG /TD TD class=wiki align=middleSTRONG15/STRONG /TD TD class=wiki align=middleSTRONG16/STRONG /TD TD class=wiki align=middleSTRONG17/STRONG /TD TD class=wiki align=middleSTRONG18/STRONG /TD TD class=wiki align=middleSTRONG19/STRONG /TD TD class=wiki align=middleSTRONG20/STRONG /TD TD class=wiki align=middleSTRONG21/STRONG /TD TD class=wiki align=middleSTRONG22/STRONG /TD TD class=wiki align=middleSTRONG23/STRONG /TD TD class=wiki align=middleSTRONG24/STRONG /TD TD class=wiki align=middleSTRONG25/STRONG /TD TD class=wiki align=middleSTRONG26/STRONG /TD TD class=wiki align=middleSTRONG27/STRONG /TD TD class=wiki align=middleSTRONG28/STRONG /TD TD class=wiki align=middleSTRONG29/STRONG /TD TD class=wiki align=middleSTRONG30/STRONG /TD TD class=wiki align=middleSTRONG31/STRONG /TD TD class=wiki align=middle colSpan=2STRONGDescription/STRONG /TD/TR TR class=wiki TD class=wiki align=middle colSpan=44-bit Version /TD TD class=wiki align=middle colSpan=44-bit Header length / 4 /TD TD class=wiki align=middle colSpan=88-bit Type of service (TOS) /TD TD class=wiki align=middle colSpan=1616-bit Total length (in bytes) /TD TD class=wiki align=middle rowSpan=520 bytes /TD TD class=wiki align=middle rowSpan=620~60 bytes /TD/TR TR class=wiki TD class=wiki align=middle colSpan=1616-bit Identification /TD TD class=wiki align=middle colSpan=33-bit Flags /TD TD class=wiki align=middle colSpan=1313-bit Fragment offset /TD/TR TR class=wiki TD class=wiki align=middle colSpan=88-bit Time to live (TTL) /TD TD class=wiki align=middle colSpan=88-bit Protocol /TD TD class=wiki align=middle colSpan=1616-bit Header checksum /TD/TR TR class=wiki TD class=wiki align=middle colSpan=3232-bit 출발지 IP 주소 /TD/TR TR class=wiki TD class=wiki align=middle colSpan=3232-bit 목적지 IP 주소 /TD/TR TR class=wiki TD class=wiki align=middle colSpan=32Options (if any) /TD TD class=wiki align=middle0~40 bytes /TD/TR TR class=wiki TD class=wiki align=middle colSpan=32Data /TD TD class=wiki align=middle colSpan=2Total length - Header length /TD/TR/TBODY/TABLE UL LII4-bit Header length/I는 4의 배수로 해석한다. 즉, 1이 4바이트를 뜻한다. 최대 4-bit로 15까지 값을 지정할수 있으므로 15x4=60 bytes가 최대값이고 이것은 IOptions (if any)/I 가 60-20=40 bytes를 넘지 못한다는 의미이기도 하다.BR LII8-bit Protocol/I 항목에는 다음의 값들을 사용할수 있다. (참고: IMG class=url alt=[http] src=http://wiki.minzkn.com/imgs/http.pngA class=externalLink href=http://www.iana.org/assignments/protocol-numbers target=_blankhttp://www.iana.org/assignments/protocol-numbers/AIMG class=externalLink alt=[] src=http://wiki.minzkn.com/imgs/moni2/external.png align=middle border=0)BR DIV class=indent TABLE class=wiki cellSpacing=2 cellPadding=3 TBODY TR class=wiki TD class=wiki align=middleSTRONGDecimal/STRONG /TD TD class=wiki align=middleSTRONGKeyword/STRONG /TD TD class=wiki align=middleSTRONGProtocol/STRONG /TD TD class=wiki align=middleSTRONGReferences/STRONG /TD/TR TR class=wiki TD class=wiki align=middle0 /TD TD class=wikiHOPOPT /TD TD class=wikiA class=nonexistent href=http://wiki.minzkn.com/index.php/IPv6I/APv6 Hop-by-Hop Option /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC1883R/AFC1883) /TD/TR TR class=wiki TD class=wiki align=middle1 /TD TD class=wikiICMP /TD TD class=wikiInternet Control Message /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC792R/AFC792) /TD/TR TR class=wiki TD class=wiki align=middle2 /TD TD class=wikiIGMP /TD TD class=wikiInternet Group Management /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC1112R/AFC1112) /TD/TR TR class=wiki TD class=wiki align=middle3 /TD TD class=wikiGGP /TD TD class=wikiGateway-to-Gateway /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC823R/AFC823) /TD/TR TR class=wiki TD class=wiki align=middle4 /TD TD class=wikiIP /TD TD class=wikiIP in IP (encapsulation) /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC2003R/AFC2003) /TD/TR TR class=wiki TD class=wiki align=middle5 /TD TD class=wikiST /TD TD class=wikiStream /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC1190R/AFC1190)(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC1819R/AFC1819) /TD/TR TR class=wiki TD class=wiki align=middle6 /TD TD class=wikiTCP /TD TD class=wikiTransmission Control /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC793R/AFC793) /TD/TR TR class=wiki TD class=wiki align=middle7 /TD TD class=wikiCBT /TD TD class=wikiCBT /TD TD class=wiki(Ballardie) /TD/TR TR class=wiki TD class=wiki align=middle8 /TD TD class=wikiEGP /TD TD class=wikiExterior Gateway Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC888R/AFC888)(A class=nonexistent href=http://wiki.minzkn.com/index.php/DLM1D/ALM1) /TD/TR TR class=wiki TD class=wiki align=middle9 /TD TD class=wikiIGP /TD TD class=wikiany private interior gateway (used by Cisco for their IGRP) /TD TD class=wiki(IANA) /TD/TR TR class=wiki TD class=wiki align=middle10 /TD TD class=wikiBBN-RCC-MON /TD TD class=wikiBBN RCC Monitoring /TD TD class=wiki(SGC) /TD/TR TR class=wiki TD class=wiki align=middle11 /TD TD class=wikiNVP-II /TD TD class=wikiNetwork Voice Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC741R/AFC741)(A class=nonexistent href=http://wiki.minzkn.com/index.php/SC3S/AC3) /TD/TR TR class=wiki TD class=wiki align=middle12 /TD TD class=wikiPUP /TD TD class=wikiPUP /TD TD class=wiki(PUP)(XEROX) /TD/TR TR class=wiki TD class=wiki align=middle13 /TD TD class=wikiARGUS /TD TD class=wikiARGUS /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RWS4R/AWS4) /TD/TR TR class=wiki TD class=wiki align=middle14 /TD TD class=wikiEMCON /TD TD class=wikiEMCON /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/BN7B/AN7) /TD/TR TR class=wiki TD class=wiki align=middle15 /TD TD class=wikiXNET /TD TD class=wikiCross Net Debugger /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/IEN158I/AEN158)(A class=nonexistent href=http://wiki.minzkn.com/index.php/JFH2J/AFH2) /TD/TR TR class=wiki TD class=wiki align=middle16 /TD TD class=wikiCHAOS /TD TD class=wikiChaos /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/NC3N/AC3) /TD/TR TR class=wiki TD class=wiki align=middle17 /TD TD class=wikiUDP /TD TD class=wikiUser Datagram /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC768R/AFC768)(JBP) /TD/TR TR class=wiki TD class=wiki align=middle18 /TD TD class=wikiMUX /TD TD class=wikiMultiplexing /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/IEN90I/AEN90)(JBP) /TD/TR TR class=wiki TD class=wiki align=middle19 /TD TD class=wikiDCN-MEAS /TD TD class=wikiDCN Measurement Subsystems /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/DLM1D/ALM1) /TD/TR TR class=wiki TD class=wiki align=middle20 /TD TD class=wikiHMP /TD TD class=wikiHost Monitoring /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC869R/AFC869)(A class=nonexistent href=http://wiki.minzkn.com/index.php/RH6R/AH6) /TD/TR TR class=wiki TD class=wiki align=middle21 /TD TD class=wikiPRM /TD TD class=wikiPacket Radio Measurement /TD TD class=wiki(ZSU) /TD/TR TR class=wiki TD class=wiki align=middle22 /TD TD class=wikiXNS-IDP /TD TD class=wikiXEROX NS IDP /TD TD class=wiki(ETHERNET)(XEROX) /TD/TR TR class=wiki TD class=wiki align=middle23 /TD TD class=wikiTRUNK-1 /TD TD class=wikiTrunk-1 /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/BWB6B/AWB6) /TD/TR TR class=wiki TD class=wiki align=middle24 /TD TD class=wikiTRUNK-2 /TD TD class=wikiTrunk-2 /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/BWB6B/AWB6) /TD/TR TR class=wiki TD class=wiki align=middle25 /TD TD class=wikiLEAF-1 /TD TD class=wikiLeaf-1 /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/BWB6B/AWB6) /TD/TR TR class=wiki TD class=wiki align=middle26 /TD TD class=wikiLEAF-2 /TD TD class=wikiLeaf-2 /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/BWB6B/AWB6) /TD/TR TR class=wiki TD class=wiki align=middle27 /TD TD class=wikiRDP /TD TD class=wikiReliable Data Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC908R/AFC908)(A class=nonexistent href=http://wiki.minzkn.com/index.php/RH6R/AH6) /TD/TR TR class=wiki TD class=wiki align=middle28 /TD TD class=wikiIRTP /TD TD class=wikiInternet Reliable Transaction /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC938R/AFC938)(TXM) /TD/TR TR class=wiki TD class=wiki align=middle29 /TD TD class=wikiISO-A class=nonexistent href=http://wiki.minzkn.com/index.php/TP4T/AP4 /TD TD class=wikiISO Transport Protocol Class 4 /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC905R/AFC905)(A class=nonexistent href=http://wiki.minzkn.com/index.php/RC77R/AC77) /TD/TR TR class=wiki TD class=wiki align=middle30 /TD TD class=wikiNETBLT /TD TD class=wikiBulk Data Transfer Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC969R/AFC969)(A class=nonexistent href=http://wiki.minzkn.com/index.php/DDC1D/ADC1) /TD/TR TR class=wiki TD class=wiki align=middle31 /TD TD class=wikiMFE-NSP /TD TD class=wikiMFE Network Services Protocol /TD TD class=wiki(MFENET)(A class=nonexistent href=http://wiki.minzkn.com/index.php/BCH2B/ACH2) /TD/TR TR class=wiki TD class=wiki align=middle32 /TD TD class=wikiMERIT-INP /TD TD class=wikiMERIT Internodal Protocol /TD TD class=wiki(HWB) /TD/TR TR class=wiki TD class=wiki align=middle33 /TD TD class=wikiDCCP /TD TD class=wikiDatagram Congestion Control Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC4340R/AFC4340) /TD/TR TR class=wiki TD class=wiki align=middle34 /TD TD class=wiki3PC /TD TD class=wikiThird Party Connect Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/SAF3S/AAF3) /TD/TR TR class=wiki TD class=wiki align=middle35 /TD TD class=wikiIDPR /TD TD class=wikiInter-Domain Policy Routing Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/MXS1M/AXS1) /TD/TR TR class=wiki TD class=wiki align=middle36 /TD TD class=wikiXTP /TD TD class=wikiXTP /TD TD class=wiki(GXC) /TD/TR TR class=wiki TD class=wiki align=middle37 /TD TD class=wikiDDP /TD TD class=wikiDatagram Delivery Protocol /TD TD class=wiki(WXC) /TD/TR TR class=wiki TD class=wiki align=middle38 /TD TD class=wikiIDPR-CMTP /TD TD class=wikiIDPR Control Message Transport Proto /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/MXS1M/AXS1) /TD/TR TR class=wiki TD class=wiki align=middle39 /TD TD class=wikiTP++ /TD TD class=wikiTP++ Transport Protocol /TD TD class=wiki(DXF) /TD/TR TR class=wiki TD class=wiki align=middle40 /TD TD class=wikiIL /TD TD class=wikiIL Transport Protocol /TD TD class=wiki(Presotto) /TD/TR TR class=wiki TD class=wiki align=middle41 /TD TD class=wikiA class=nonexistent href=http://wiki.minzkn.com/index.php/IPv6I/APv6 /TD TD class=wikiIpv6 /TD TD class=wiki(Deering) /TD/TR TR class=wiki TD class=wiki align=middle42 /TD TD class=wikiSDRP /TD TD class=wikiSource Demand Routing Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/DXE1D/AXE1) /TD/TR TR class=wiki TD class=wiki align=middle43 /TD TD class=wikiA class=nonexistent href=http://wiki.minzkn.com/index.php/IPv6I/APv6-Route /TD TD class=wikiRouting Header for A class=nonexistent href=http://wiki.minzkn.com/index.php/IPv6I/APv6 /TD TD class=wiki(Deering) /TD/TR TR class=wiki TD class=wiki align=middle44 /TD TD class=wikiA class=nonexistent href=http://wiki.minzkn.com/index.php/IPv6I/APv6-Frag /TD TD class=wikiFragment Header for A class=nonexistent href=http://wiki.minzkn.com/index.php/IPv6I/APv6 /TD TD class=wiki(Deering) /TD/TR TR class=wiki TD class=wiki align=middle45 /TD TD class=wikiIDRP /TD TD class=wikiInter-Domain Routing Protocol /TD TD class=wiki(Hares) /TD/TR TR class=wiki TD class=wiki align=middle46 /TD TD class=wikiRSVP /TD TD class=wikiReservation Protocol /TD TD class=wiki(Braden) /TD/TR TR class=wiki TD class=wiki align=middle47 /TD TD class=wikiGRE /TD TD class=wikiGeneral Routing Encapsulation /TD TD class=wiki(Li) /TD/TR TR class=wiki TD class=wiki align=middle48 /TD TD class=wikiDSR /TD TD class=wikiDynamic Source Routing Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC4728R/AFC4728) /TD/TR TR class=wiki TD class=wiki align=middle49 /TD TD class=wikiBNA /TD TD class=wikiBNA /TD TD class=wiki(Salamon) /TD/TR TR class=wiki TD class=wiki align=middle50 /TD TD class=wikiESP /TD TD class=wikiEncap Security Payload /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC2406R/AFC2406) /TD/TR TR class=wiki TD class=wiki align=middle51 /TD TD class=wikiAH /TD TD class=wikiAuthentication Header /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC2402R/AFC2402) /TD/TR TR class=wiki TD class=wiki align=middle52 /TD TD class=wikiI-NLSP /TD TD class=wikiIntegrated Net Layer Security TUBA /TD TD class=wiki(GLENN) /TD/TR TR class=wiki TD class=wiki align=middle53 /TD TD class=wikiSWIPE /TD TD class=wikiIP with Encryption /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/JI6J/AI6) /TD/TR TR class=wiki TD class=wiki align=middle54 /TD TD class=wikiNARP /TD TD class=wikiNBMA Address Resolution Protocol /TD TD class=wiki(A class=nonexistent href=http://wiki.minzkn.com/index.php/RFC1735R/AFC1735) /TD/TR TR class=wiki TD class=wiki align=middle55 /TD TD class=wikiMOBILE /TD TD class=wikiIP Mobility /TD TD class=wiki(Perkins) /TD/TR TR class=wiki TD class=wiki align