ICMP
Internet Control Message Protocol
: 라우터와 호스트 간의 제어 or 오류정보를 통신하는 방식
-> 라우터가 경로설정을 할 수 없거나 데이타를 전달 할 수 없는 경우 발생했을때,
네트워크상의 문제를 피하거나 복구하도록 출발지 호스트에 오류의 처리와 전송경로의 변경등을 ICMP를 이용해 통보.
[ ICMP 구조 ]
- ① type (1 byte) : error message 구별
- ② code(1 byte) : 각 type 에 따라 오류 유형에 대한 추가정보
- ③ checksum( 2byte): ICMP message 에 대한 checksum
- ④ message ( 4 btye): type 와 code 에 연관된 내용들
: 32 bit ICMP 헤더 + ICMP 데이터
[ ICMP 헤더]
netinet/ip_icmp.h
- ① type 유형
0 icmp echo replay icmp 요청에 대한 icmp 응답, ping에 사용 --② code : 0
----④ 추가내용 : identifier(2byte), sequence number (2byte)
3 destination unreachable message 수신지까지 메시지가 도착할 수 없음 - ② code : 0~15
0 = network unreachable
* IP 목적지 주소에 지정된 네트워크가 없을 때(라우터에서만 생성,경로설정 실패)
1 = host unreachable
* 데이터그램이 라우터에서는 성공적으로 전달되었지만 마지막 라우터가 호스트와 통신 불가
* 발생이유 : 호스트종료,구성오류,IP설정오류,(목적지네트워크에 직접 연결하는 라우터에서 생성)
2 = protocol unreachable
* 데이터그램이 목적지 호스트에 도착했지만 IP데이터그램이 운반하고 IP헤더의 프로토콜 필드로
식별된 상위 프로토콜을 사용할 수 없다는 뜻
* TCP/IP 호스트에서 구현되는 공통의 상위 프로토콜은 TCP,UDP,OSPF임.
* IP header의 프로토콜 ID를 이용해 사용가능여부를 확인하여 문제를 해결할 수 있다.
3 = port unreachable
* 지정된 운반계층 프로토콜(TCP,UDP)이 데이터그램을 개별화할 수 없고 송신자에게 알릴 수 있는
다른 프로토콜 메커니즘을 가지고 있지 않을 경우 생성(ex: 서버의 데몬등)
4 = fragmentation needed but DF bit set * 네트워크 인터페이스의 MTU size가 datagram의 크기보다 작기 때문에 datagram을 발생해야 하는
라우터가 생성.그러나 datagram IP header에 DF flag가 1로 설정되면 라우터는 datagram DF할수 없다
* DF flag는 TFTP 파일전송을 수행하는 디스크없는 WS이 시스템 부트 메시지 다운로드를 위해 1로 설정
5 = source router failed
* IP출발지 경로 옵션을 사용하는 IP datagram에 대해 라우터에서 생성, 라우터는 datagram삭제
6 = destination network unknown
* 라우터가 경로 설정표에서 목적지 네트워크를 알 수 없다는 것을 탐지 했을 때 생성.
7 = destination host unknown
* 라우터가 네트워크 인터페이스에 있는 데이터링크층 소프트웨어를 통해 목적지 호스트가 없다는 것을
탐지 했을 때 라우터에서 생성
8 = source host isolated(not used)
* 라우터가 나머지 네트워크에서 호스트가 격리된 것을 탐지하면 생성, RFC1812에서 사용못하도록 함.
9 = destination network administratively prohibited
* 목적지 네트워크와의 통신이 관리상 금지됨.
10 = destination host administratively prohibited
* 목적지 호스트와의 통신이 관리상 금지됨
11 = network unreachable for TOS
* 라우터에서 경로 설정테이블의 경로가 요청한 ToS값 또는 기본 ToS와 일치할 수 없기 때문에
datagram을 발송할 수 없을 경우 생성
12 = host unreachable for TOS
* 목적지 호스트에 도달할 수 없을 경우(code 11과 유사)
13 = communication administratively prohibited by filtering
* 통신 방화벽 때문에 관리상 금지됨.
14 = host precedence violation
* 호스트 우선권 위반(송신자 호스트에 대한 첫 번째 홉 라우터가 생성)
15 = precedence cutoff in effect
* 우선권 효력이 차단됨(라우터에서 우선권을 낮게 보낸 datagram을 삭제하고 송신자에게 보낸 MSG)
----④ 추가내용 : unused
4 source quench message 송신지 억제
(라우터의 버퍼가 차서 더이상 자료를 받을 수 없을 때) --② code : 0
----④ 추가내용 : unused
5 redirect message 재지정(대체 경로를 알리기 위해) --② code: 0~3
0 = redirect for networks
1 = redirect for host
2 = redirect for type of service and network
3 = redirect for type of service and host
: 모델리스형 대화상자 생성 생성만하고 화면에 출력하지 않으므로 ( 기본 설정이 WS_VISIBLE 스타일 없음),
ShowWindow(HWND hWnd, SW_SHOW);
: 함수로 화면에 출력해야 함.
BOOL IsWindow (HWND hWnd);
: 유효한 윈도우 핸들인지 검사. 윈도우가 존재하면 TRUE, 없으면 FALSE 리턴 -> 대화상자가 이미 생성된 상태에서 여러개의 대화상자 만들어 질수 있음 이를 방지하기 위해 FALSE 일 경우에만 대화상자 생성. (대화상자의 핸들을 전역변수로 선언, 생성시 핸들 값을 저장하고, 파괴시 핸들 값을 초기화 함)
DestroyWindow(HWND hWnd);
: 대화상자 닫기
IsDialogMessage (hMDlg, &Message)
: 대화상자와 관련된 메시지면 TRUE 리턴 관련없는 메시지면 FALSE 리턴 대화상자가 유효할 때 (TRUE==IsWindow) 메시지가 입력되면, 대화상자의 메시지인지 구분함.
모달형 대화상자
모델리스형 대화상자
DialogBox 대화상자를 만들고 운용하는 모든 일. 대화상자가 닫힐 때 리턴
OK /Cancel 버튼 주로 사용
EndDialog 대화상자 종료
CreateDialog 대화상자를 만들고, 운용하지는 않음 생성 후 즉시 대화상자 핸들리턴 (다중 생성 방지위해 생성전 검사필요)
Change / Close 버튼 주로 사용
InvalidateRect 값 변경시 대화상자 닫지않고 메인 윈도우 무효화, 화면 재출력 DestroyWindow 대화상자를 닫을 때 사용 닫기 후, 대화상자의 윈도우 핸들 초기화
예제, InfoDlg 프로젝트 이용해 , 대화상자를 닫지 않은 채로 값을 변경 & 출력 (마우스 왼클릭시 대화상자, 우클릭시 메시지박스 출력)
LRESULT OnLbuttondown(HWND hWnd, WPARAM wParam, LPARAM lParam) { if(!IsWindow(hMDlg)) // 이전 생성된 대화상자가 없으면 { hMDlg=CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, MlessDlgProc); // 새로 생성 ShowWindow(hMDlg,SW_SHOW); // 대화상자 생성후 화면에 출력 } return0; }
ps. 네트워크가 제대로 정리가 안되네요; 추가설명해주실 분 대환영! 합니다.
질문은 CM쌤한테?^^;