전공 과목인 컴퓨터 네트워크 공부를 하던중,
와이어 샤크를 이용한 헤더 분석을 더 깊게 공부해야겠다는 생각이 들어 글을 작성하려고 한다!
IP 헤더 살펴보기!
아주 블럭쌓기네요 허허
필드별로 하나씩 알아볼겁니다 물론 와이어샤크가 있으면 이해하는데 좋고 실습과 보안관제 업무에 대해 기초 다지기도 될 수가 있겟네요
버전 (Version)(길이 4비트)
0100 .... = version: 4 ??
바로 버전이 4 라는건데요 0100 는 4의 2진수 형태 입니다
다라고는 못하겟지만 거의 대부분 4 입니다 왜냐하면 IPv4 이기 때문이지요 ㅋㅌㅋㅌ
인터넷 헤더 길이 (Internet Header Length)(4bit)
이녀석은 .... 0101 = Header Length: 20 bytes (5) 라고 되어 있네요
0101 은 5의 2진수 형태입니다
이것도 버전과 같이 붙어있고, 주로 20 바이트 (5) 이렇게 있는데요
이 친구는 IP 헤더 Option 값에 따라 길이가 가변적이라는 겁니다
20 바이트라는 길이가 어디서 나오는 것일까요? 위 사진에 20 bytes (5) 에서 괄호 안에 묶인 숫자에 따라 다르답니다 아래 표를 보세요!
구분 Byte (바이트) 크기 세부 설명 만약 5 일때( 2진수로는 0101 ) 20 Byte 32/8 x (5) = 20 byte 만약 15 일때 (2진수로는 1111)(MAX) 60 Byte 32/8 x (15) = 60 byte여기서 세부 설명을 더 설명 해볼게요
IP 헤더의 Option 값의 길이는 32비트 입니다 이 32비트를 바이트 단위로 변경 하면 4바이트가 됩니다
즉 32/8 = 4 바이트 입니다 거기에 (5~15) 값에 곱하기를 해줍니다 그럼 만약 5일 경우는 20 바이트가 되는 것 이지요
위 사진도 보면 좋겟네요 분석하면
버전과 헤더 길이 와 같이 서로 붙어서 45 로 보입니다 4는 버전 5는 헤더 길이
서비스 타입 ( Type of service )
서비스 종류 또는 혼잡 알림을 나타냅니다
하지만 위 사진을 보시면 두개의 필드가 존재 한답니다 혹시 보이시는지ㅋㅋ
바로 DSCP! (Differentiated Services Code point) 와 ECN! (Explicit Congestion Notificataion) 입니다
실습을 위해 좀더 자세히 알아 볼까요?!
DSCP (Differentiated Service Code Point)
요구하는 서비스의 우선순위에 대한 유형을 나타냅니다
즉 IP 데이터그램이 라우터에서 어떻게 처리해야 할지 정하는 역할이지요
DSCP 2진수 10진수 16진수 우선순위 CS0 (default 기본값) 000 000 0x00 0 가장 낮음 CS1 001 000 0x08 8 CS2 010 000 0x10 16 CS3 011 000 0x18 24 CS4 100 000 0x20 32 CS5 101 000 0x28 40 CS6 110 000 0x30 48 CS7 111 000 0x38 56 가장 높음위 표를 통해 좀더 쉽게 이해해 봅시다
ECN ( Explicit Congestion Notification)
라우터가 패킷을 바로 폐기 하지 않고 최종 노드에 혼잡을 알리는 용도로 사용됩니다
구분 내용 00 패킷이 ECN 기능을 사용안함 01 또는 10 보내는 측이 종단점에서 ECN 기능을 사용함 11 라우터에서 혼잡이 발생 할때위 표를 통해 이해하시기 편합니다
위 사진의 16진수에서 00 으로 표현되어 있다는것은 ECN 을 사용하지 않다는 것입니다
종합 길이(헤더 + 데이터)(Total length)
헤더와 데이터가 더한 길이로 최대 65,535바이트 까지 사용됩니다
40 으로 되어있으면 40 바이트
16진수로 보면 28로 되어있네요
식별자 (Identification)
식별자를 이해하려면 단편화라는 것을 이해해야합니다
네트워크 기기가 전송할 수 있는 최대전송 단위인 MTU(Maximum Transfer Unit)라고 합니다 네트워크 환경에 따라 당연히 각각 크기는 다릅니다 일반적으로 Ethernet ( 이더넷 ) 환경에서의 MTU 는 1500 바이트로 이용합니다
아래 표를 보고 전송 매체별로 MTU 크기를 파악 해보시길 바랍니다
전송 매체 MTU 인터넷 IPv4 MTU 64 ~ 인터넷 IPv6 MTU 1280 ~ 이더넷 v2 1500 이더넷 + LLC ( Logical link control)SNAP (Subnetwork Access Protocol)PPPoE ( Point-to-point Protocol over Ethernet ) 1492 점보 프레임 ( Jumbo Frame) 1501 ~ 9216 WLAN (802.11) 무선랜 7981 토큰 링 (802.5) 4464 FDDI (Fiber Distributed Digital Interface) 4352
만약 MTU 이상의 크기로 데이터가 전송된다면 패킷이 MTU 크기에 맞춰져서 분할 하게 됩니다
이것을 "단편화"라고 합니다
단편화가 발생하면 수많은 패킷이 단편화(분할)되는데 그것들을 구분하기 위해 고유번호가 할당됩니다
★단편화되지 않은 패킷은 단편화 되기 전에 각각 1개의 패킷별로 고유한 ID 를 갖게 됩니다 (↓아래 사진 참고)
고유한 ID를 가진 패킷
★단편화된 패킷은 이더넷 기준인 MTu 1500바이트 이상의 패킷은 단편화가 되어 전송을 합니다 ( 아래 사진들 참고 )
단편화가 안된 패킷
위 사진에 대해 설명을 해보자면 제 칼리리눅스로 icmp echo를 날려 icmp ID를 확인하고 있습니다 (한번 보내는데 같은 ID 로 단편화하며, icmp 전송을 끊고 다시 하면 다른 ID 인걸 확인 하실수 있습니다. 0xc807 => 0xc907 )
단편화 된 패킷 ipv4 프로토콜을 확인 합니다
위 사진은 icmp echo 을 보내고 있는것 맞습니다만 데이터 크기를 5000으로 했을때 입니다
너무나 데이터가 커서 나눠서 보내는 것입니다 ( 단편화 )
플래그s(Flags)
단편화된 추가 패킷이 있다는 것을 알려주며, 수신 측에서 해당 정보를 통해 패킷들을 재조합합니다 (조립)
플래그들을 보도록 합시다
0 비트
0 비트는 그저 예약 필드 입니다
1비트
Dont Fregment 즉 DF 라고도 하며
분할된 패킷이 없을때 '1'로 설정합니다
2비트
그때 icmp를 단편화로 보냈을때 그 사진입니다
당연히 분할된 패킷이지요 그런 패킷이(단편화된 패킷) 더 있을때 More Fragment 즉 MF 라고 하며 '1' 로 설정 됩니다
이것도 More Fragment 에 속합니다 하지만 이때는 분할된 패킷이 존재하지 않을 때를 말합니다 MF = 0
아래 단편 옵셋을 들으면 이해가 편하실 겁니다
단편 옵셋 (Fragment Offset)
분할된 패킷을 수신측에서 다시 재조합할때 패킷들의 순서를 파악할때 이용합니다
플래그를 이해하셧지요? 이해하셧다면 단편 옵셋에 대해 이해가 잘 가실겁니다!
먼저 ICMP 데이터는 5000 데이터로 지정 하였습니다
그 후 패킷이 4번째로 나뉘었습니다 ( 저 같은 경우는 칼리리눅스 hping3 으로 했습니다 차이가 있을수 있어요 Echo가 맨 마지막 (4번째 에 생성 됩니다)
하나씩 살펴 보겟습니다 ! 잘 따라와주세요
1 번째 패킷
1번째 패킷입니다
그후 플래그를 확인하면 MF = 1 인것을 확인할 수 있습니다 즉 분할된 패킷이 더 있다는 뜻입니다
(크기는 1500 으로 설정되어 있었습니다만 IP 헤더에 의해 20바이트가 추가된 것으로 실질적으론 1480 입니다 )
2 번째 패킷
2번째 패킷입니다
그후 플래그를 확인하면 이것도 MF = 1 인것을 확인할 수 있습니다 아직도 분할된 패킷이 더 있다는 것이지요
(크기는 1480 바이트 )
3 번째 패킷
3번째 패킷입니다
그후 플래그를 보시면 이것도 MF = 1 인것을 확인하실수 있습니다 아직 분할된 패킷이 더 있다는 것입니다
(크기는 1480 )
4 번째 패킷
4번째 패킷 입니다
그후 플래그를 보시면 이것은 엇?? 더 이상 패킷이 없다고 하네요 즉 MF = 0 상태인걸로 보면 바로 아실수 있습니다
( 크기는 580 - 20 = 560 입니다 )
잘 이해 하셧길 바랍니다
TTL ( Time to live)
패킷 수명을 제한 하려고 한것으로 " 홉 ( HOP )" 이라 하여 이 "홉"수를 지정 할수 있습니다
전송 장비를 지날때 마다 "홉"의 수가 숫자 '1' 줄어듭니다
0이 되면 어떻게 될까요??! 바로 라우터에서 폐기처분 해버립니다 ..ㅋㅋ
와이어샤크로 보도록 합시다
TTL = 64 이네요 64번 이동 가능하네요
근데 그거 아십니까???
운영체제 별로 TTL 값이 다릅니다 간단히 표로 나열 하겟습니다 (그냥 구경 해주시면 됩니다 )
운영체제 TCP TTL UDP TTL FreeBSD 2.1R 64 64 Linux 64 64 MacOS/MacTCP X 64 64 Solaris 2.x 255 255 Windows 95 32 32 MS Windows NT 4.0 128 128 Windows 98 128 128 Windows server 2003 128 128 Windows XP 128 128 Windows Vista 128 128 Windows 7 128 128 Windows server 2008 128 128 Windows 10 64 64
프로토콜 (Protocol)
IP 헤더에 따라오는 상위 프로토콜을 지정하는 것으로 프로토콜의 종류를 확인 할수 있습니다
ICMP 는 어떤 값이 나올까요?
01 값 이네요 (넘버는 1)
TCP 는 어떤 값이 나올까요?
06 값이네요 (넘버는 6)
마지막으론 UDP 는 어떤 값이 나올까요?
11 값이네요 (넘버는 17)
헤더 체크섬 (Header Checksum)
헤더의 오류를 검증하기 위해 사용됩니다
계산 방식은 Version 필드값 부터 목적지 필드값까지 모두 더합니다 ( 체크섬 필드값은 제외해야합니다)
말로는 도저히 이해를 못하겟으니 직접 해봅시다!!!! (학습률 ↑)
계산 방식 (1)
인터넷 프로토콜 버전4 의 필드 값이 있습니다
시작인 Version: 4 의 값은 45 이군요 (계산 할땐 Tos 와 함께 )
마지막인 목적지 는 ac1e+0107 인걸 확인 합니다! 아래 표로 정리 합니다
(*주의 사항은 체크섬은 회피 해야 합니다
필드 값 Version: 4 와 헤더 길이 정보 + DSF( type of service) 4500 <= 45 00 입니다 Total Length 0028 Identification 50e4 Flags 4000 TTL = 118 과 프로토콜 = TCP 7606 출발지 아이피 0d6b 2a0c < = 0d 6b 2a 0c 입니다 목적지 아이피 ac1e 0107위 표를 다 더합니다
다 더하면 230AE 가 나옵니다 맨 앞자리 첫번째 값 2는 30AE + 2 이렇게 더해줍니다 그럼 30b0이 나옵니다
그것을 2진수로 변경합니다 0011 0000 1011 0000의 보수 인 1100 1111 0100 1111 이러면 답이 나옵니다
답은 ?!
cf4f 입니다 후... 프로그래밍 계산은 좀 이해가 어려워요 ㅋㅋ 16진수 10진수 2진수 개념이 필요함을 느낍니다 ;;
또한!!!! 와이어샤크에서는 체크섬 기능을 활성화 할수 있습니다 !!!! 저는 비활성화 되어 있는데요 한번 기능을 활성화 해봅시다
우클릭후 preferences 를 누르시고 IPv4 누르시고 Valiate the IPv4 checksum of possible 에 체크 하시면!
활성화된 모습입니다 ! 검증 성공!
출발지 주소
송신자의 아이피 입니다
도착(목적)지 주소
수신자의 아이피 입니다
옵션+패딩Option+Padding
새로운 실험이나 헤더 정보에 추가 정보를 표시하기 위해 설게되었습니다
IP헤더의 필수 정보는 아닙니다
옵션필드의 구조는 옵션코드(8비트)옵션 데이터(변할수 있는 길이) 들로 있으며 32비트의 배수가 되도록 패딩을 합니다
'전공 수업 CS > Computer Network' 카테고리의 다른 글
[컴퓨터 네트워크] CIDR, 서브넷 마스크 (0) | 2022.11.30 |
---|---|
[컴퓨터 네트워크] IP 주소 클래스(A, B, C 클래스) (0) | 2022.11.30 |
[컴퓨터 네트워크] IP 주소 (0) | 2022.11.30 |
[컴퓨터 네트워크] 네트워크 계층 | IPv4 단편화, 검사합 (1) | 2022.11.29 |
[컴퓨터 네트워크] 네트워크 연결성 | 교환망, 노드, 링크, 연결 세션, ISP란? (0) | 2022.09.24 |