네트워크

[컴퓨터네트워크] week4 - 네트워크 인터페이스 계층 / 패킷 분석

haerangssa 2024. 11. 30. 23:57
네트워크 인터페이스 계층의 프레임 전송

 

1. 네트워크의 신뢰 통신 방법 

- 순방향 에러 정정(Forward Error Correction, FEC) + 역방향 에러 정정(Backward Error correction, BEC) + 재전송 기법

 

 

2. 역방향 에러 정정 방식

1) 긍정 응답 프레임(ACK 프레임)

- 수신한 정보 프레임 오류가 발생하지 않았으면(정상수신), 송신 호스트에 ACK 프레임 회신.

- 수신한 정보 프레임 오류가 발생하면, ACK 회신하지 않고/ 송신 호스트는 일정시간 동안 ACK 못 받으면 정보 프레임을 재전송함.

가운데 ACK를 확인 >> ACK분실 + 타임아웃 = 긍정응답프레임오류/ 그냥 타임아웃 = 정보프레임 오류

 

2) 부정 응답 프레임(NACK 프레임)

- 정보 프레임에 오류가 발생(변형)하면, 송신 호스트에 NACK 프레임 회신. > 오류 발생을 인지하고, 원래의 정보 프레임 재전송을 요청

- 송신 호스트는 부정 응답 프레임 NACK을 수신하면 정보 프레임을 재전송 함.

 

 

3. 계층별 데이터 타입

- 송신, 수신, 중간 노드 각각이 계층별로 데이터를 처리.

 

4. 프레임 헤더 구조

프레임 = 이더넷 헤더(송.수신지 MAC주소) + IP 헤더(송.수신지 IP주소) + TCP 헤더(송.수신지 포트번호) + 메시지(헤더+데이터)

 

5. 네트워크 전송

1) 데이터 구조

- 빅데이터가 여러개의 데이터로 분할되어, 각각에 패킷 헤더를 붙여 네트워크로 전송됨.

- 패킷 = 헤더 + 데이터 + 트레일러

 

* 헤더: 데이터 종류, 길이, 페이로드 수신 방법(전송 기법)에 관한 정보

> 헤더 데이터도 자체적인 CRC로 오류를 검사 

* 페이로드: 송신자가 전송하는 데이터(오류 정정 인코딩 된 최종 데이터)

> 트레일러로 오류 검사

* 트레일러: 페이로드의 오류를 확인하기 위한 체크섬 (FCS=CRC)

 

2) TCP/IP와 패킷 교환

- OSI 7계층의 3계층(네트워크) IP프로토콜과 4계층(전송) TCP프로토콜을 활용하여, WWW의 LAN과 WAN을 연결

>> 인터넷 서비스를 실현시키는 네트워크 표준

- TCP/IP 프로토콜은 많은 양의 데이터를 효율적이고 안정적으로 전송하기 위해 ** "패킷 교환 방식" ** 으로 전송.

- 패킷 교환 방식은 미리 고정된 이동 경로를 건들지 않는 대신 데이터를 패킷 단위로 나누고, 각 패킷에 고유 번호를 붙여 네트워크에 흩뿌려 전송함. >> 각 패킷은 전송 당시 가장 효율적인 경로를 따라 최종 수신지로 각각 보내지며, 최종 수신지에서 원래의 데이터로 재결합함.

- 패킷을 수신한 중간노드는 패킷의 수신지 호스트 주소를 확인하고, 수신지까지 가는 다양한 경로 중 가장 좋은 경로를 선택해 다음 중간 노드로 패킷을 전송하는 라우팅 수행.


네트워크 인터페이스 계층의 주소(MAC)

 

1. MAC 주소

- 랜카드(NIC)에 할당된 값. 전세계에 하나만 존재하는 고유값.

- 48 비트로 표현 = 상위 24 비트는 랜카드 제조사에서 부여한 OUI + 하위 24 비트랜카드 고유번호 UAA

* OUI: Organizational Unique Identifier

 

- 48 비트 = 6 바이트  >> 앞 3칸 OUI, 뒤 3칸 UAA

- 콜론이나 하이픈으로 16진수 표기함 > F1-A3-00-2F-3B-21

 

 

 

2. ARP

송신 호스트의 네트워크 인터페이스 카드는 수신 호스트의 네트워크 인터페이스 카드의 MAC 주소를 ARP 프로토콜(3계층)로 알 수 있음.

1) ARP 이용해서 MAC 주소 알아내는 과정

 

[목표] 송신 pc1(IP: 192.168.0.2)가 수신 pc2(IP: 192.168.0.3)에게 데이터 전송

 

- 송신 pc1은 자신의 메모리인 ARP 테이블에 192.168.0.3 IP 주소의 MAC 주소 정보가 있는지 확인

- 정보가 없다면, pc1은 네트워크 주변 컴퓨터들에게 192.168.0.3이라는 IP 주소의 MAC 주소 컴퓨터가 있는지 ARP 요청 프레임브로드캐스팅(네트워크 내 모든 기기에게 데이터 전송)함. 

- ARP 요청 프레임을 수신한 pc는 자신의 IP를 192.168.0.3과 비교

- 192.168.0.3 IP인 pc2가 컴퓨터 pc1에게 ARP 응답 > 일대일 unicast

- 그 이후부터 pc1은 pc2와 통신할 때 ARP 테이블을 참조하여 통신. > 테이블에 pc2의 MAC주소 넣어둔거죵?

week3-1의 표 확인

 

2) ARP 프로토콜의 취약점을 활용한 공격 = ARP 스푸핑 공격

- ARP 메시지를 이용해 상대방 데이터 패킷을 중간에서 가로채는 중간자 공격 기법

- 데이터 링크(2계층)프로토콜인 ARP 프로토콜을 이용하므로 근거리 네트워크인 LAN에서만 먹히는 공격

Q.  어라? ARP 프로토콜을 앞에선(심지어는 week2 표에서도) 3계층이라고 하다가 갑자기 데이터링크 2계층이라니?
A.  2계층 물리주소인 MAC주소와 3계층 논리주소 IP주소 모두를 사용한다. 그래서 결론: 그냥 2.5 계층이라고 생각해라

 

ARP 스푸핑 원리: 공격자가 클라이언트와 서버의 패킷 전송 흐름을 변경하여, 패킷을 도정하거나 위변조할 수 있도록 함. 

 

 

 

3. Ethernet : 데이터링크 2계층 

1) 이더넷 프레임

- 프리엠블(지금부터 프레임이 도달한다는 신호) + 헤더(주소+타입) + 데이터(46~1500 byte) + FCS(crc,체크섬)

 

2) 이더넷 헤더

2-1) 프리엠블

- 이더넷 프로토콜이 시작되는 지점을 알려주는 기능

- 총 8byte이고, 1010 1010 (=10)이 7번 반복되며(7byte) 전기신호를 보내는쪽과 받는쪽을 동기화하고,

마지막 1byte는 시작을 알려주는 SFD(start frame delimiter)로, 1010 1011 (=11)를 전송하여 이더넷 헤더의 시작을 알려준다.

 

2-2) 주소 (Destination/ Source Address)

- 목적지 MAC 주소 6byte, 출발지 MAC 주소 6Byte = 12 byte

- pc1이 공유기를 통해 pc2로 데이터를 전달한다면, pc1이 보내는 프레임의 목적지 주소는 공유기의 MAC주소가 되고,

출발지 주소는 pc1의 MAC주소가 됨. 

 

2-3) 이더넷 타입 (상위 프로토콜의 유형)

- 데이터를 캡슐화할 때 사용한 3계층 프로토콜(네트워크 계층)이 무엇인지 알려주는 기능. 

- 3계층 프로토콜은 ARP(0x0806)나 IPv4(0x0800)인 경우가 많다. 

 

3) 이더넷 프로토콜 프레임 캡쳐 후 분석하기

- 프리엠블에서의 010101 x7번이 왜 전기신호를 송.수신하는 쪽의 동기화인지 설명한다.

사실 이해 잘 못 해서 추가 공부가 필요할 수도 있는 듯


네트워크 패킷 분석

 

1. 패킷 분석기(packet analyzer) / 패킷 스니퍼(packet sniffer)

1) 네트워크 분석: 네트워크 통신 과정에서 패킷을 스니핑하여 수집(=capture)하고, 분석하는 것.

- 패킷 캡쳐: 네트워크 케이블로 전송되는 전기 신호를 데이터 형태로 획득하는 것

- 덤프 분석: 획득 패킷의 의미를 분석

2) 네트워크 분석가의 기본 요건

- TCP/IP 프로토콜에 대한 이해

- 패킷 분석기 사용법

- 패킷 구조와 흐름 이해

3) 패킷 분석기

- 네트워크를 통해 전달되는 패킷을 캡쳐하여, 그 내용을 화면에 나타내 주는 소프트웨어

하드웨어 분석기 / 소프트웨어 분석기로 나뉨

 

 

2. Wireshark

- 근거리 네트워크 상에서 전달되는 패킷을 분석하는 소프트웨어 도구 (무료 오픈소스라네요)

- Ethereal이 1988년 개발된 와이어샤크 첫 버전

- 유닉스, 리눅스 등 다양한 OS에서 사용 가능

- Npcap이라는 소프트웨어를 사용하여 윈도우에서 패킷 분석이 가능

 

1) 용도

- 컴퓨터 네트워크 프로토콜을 배우기 위해 

- 네트워크 관리자가 네트워크 트러블을 해결하기 위해

- 보안 기술자가 보안 문제를 시험하거나 확인 및 해결하기 위해

- 개발자 프로토콜을 구현할 때 디버그 하기 위해

- 품질 관리 엔지니어가 네트워크 애플리케이션을 확인하기 위해

 

2) 주요 기능

- 대부분의 OS 지원

- 네트워크 인터페이스로부터 실시간으로 패킷 데이터 캡쳐가 가능

- 패킷에 대한 프로토콜 정보를 자세히 보여줌

- 캡쳐된 패킷 데이터를 열거나 저장 가능

- 다른 패킷 분석기가 획득한 캡쳐 데이터를 변환하여 열거나 출력 가능

- 여러 조건으로 패킷을 제한하여 검색 가능

- 필터링된 패킷을 원하는 색으로 나타낼 수 있음

- 캡쳐한 데이터를 다양한 형식으로 출력 및 여러 통계 제작 가능

- 여러 암호 프로토콜 복호를 지원

 

3) 장점

- 패킷 내용을 자세히 보여줌

- 패킷 내용을 분석해줌

- 상용 패킷 분석기 보다 훨씬 쉽게 패킷 해석 간으

- 캡쳐파일, 추적파일로 캡쳐 패킷을 저장하여, 다른 파일 형식으로 출력하거나 복수의 캡쳐 파일을 결합 및 분석 가능.

 

4) 한계점

- 상용 분석기에 비해 통계,보고,임계치 기능이 약함

- 침입탐지시스템(IDS)으로 개발된 것이 아니므로 네트워크 변화를 감지하고 대응할 수 없음

- 네트워크 직접 조작 불가.(단순 스니핑. 분석 장치)

> 상용 분석기에는 패킷 생성 도구가 포함되어, 특정 조건의 패킷을 생성하여 송신 가능

 

 

3. wireshark 이용한 네트워크 패킷 분석

https://wiki.wireshark.org/

 

Home - Wireshark Wiki

 

wiki.wireshark.org

자세한 설치 방법은 ppt 확인


패킷 필터링: "" 안에 적은 단어가 포함된 프레임만 캡쳐.

명령어: frame contains "" 


 

No. - 패킷 일련번호

Time - 패킷 캡쳐한 시간 정보

Source - 패킷 발신지 상위층 주소

Destination - 패킷 목적지 상위층 주소

Protocol - 상위층 프로토콜 이름

Length - 패킷 길이

Info - 패킷 개요


좌측 하단의 상태 화면에서 패킷 개요를 확인하고

> 를 클릭하여 상세 정보 확인 가능


우측 하단의 패킷 바이트 정보를 보고 주소. 데이터 내용. 아스키를 확인 가능

주소: 패킷의 위치

16진수 덤프: 실제 데이터 내용

ASCII: 데이터 내용을 문자로 표현


상태화면에서 Ethernet II 선택하여, 우측에서 이더넷 프레임 정보를 볼 수 있음

 

같은 방식으로 IPv4, TCP 정보도 열람 가능

우측 하단의 프레임 정보


와이어샤크 필터에 eth.src == 컴퓨터 MAC주소 

입력하면 Ethernet 프로토콜 프레임 캡쳐 및 분석이 가능하다.

 

그럼 MAC주소는 어떻게 보나?

>> cmd 명령 프롬프트에서 ipconfig/all 명령어를 입력하여 물리적 주소 부분을 확인하면 됨

 

+ 번외

그럼 ip프로토콜 프레임 분석은 어떻게 하는가?

와이어샤크 필터에 ip.src==ip주소 입력하면 OK

ip주소는 ipconfig, ipconfig/all 명령어로 확인 가능

 

Ethernet II 더보기 클릭하여 

Destination address / source address / type 정보 확인 가능



* 와이어샤크 필터의 추가적인 고급 기능

 

[비교]

== 같다

!= 같지 않다

> < >= <= 비교

 

[논리]

&& 그리고

|| 또는

^^ XOR / 같으면 0 다르면 1

! 부정

 

[필터] - 패킷 검색 방법

ip.src == IP주소 : 소스 IP주소가 지정한 IP주소인 패킷 표시 / 출발지 IP주소 검색

ip.dst==IP주소: 목적지 IP주소가 지정한 IP주소인 패킷 표시 / 도착지 IP주소 검색

ip.addr==IP주소: 소스 혹은 목적지 IP주소가 지정한 IP주소인 패킷 표시 / 해당 IP주소 갖는 모든 패킷 탐색

ip.addr==IP주소1 && ip.addr==IP주소2: IP주소 1과 2 간의 주고받는 패킷 표시**

http or dns: HTTP 또는 DNS표시

tcp.port==포트번호: 지정한 포트번호가 송신측 또는 수신측 패킷인 것 표시 ** (같은 방식으로 udp도 볼 수 있음)

>> tcp.port==80 은 http를 검색한 결과 ! 

+ 송신측 또는 수신측인 dst와 src로 세부 검색도 가능함.

tcp.dstport == [포트번호] / tcp.srcport == [포트번호]

tcp contains <문자열>: 지정한 문자열 포함하는 TCP 패킷 표시

frame contains "": 따옴표 안의 단어가 포함된 패킷 프레임만 표시

tcp.flags.syn==1: TCP의 SYN 패킷만을 표시 / 연결 요청

> 클라이언트가 서버에게 접속을 요청하는 SYN 패킷을 보낸다. "나 가도 됨ㅇㅇ?"

 

 

+ 패킷 마킹(행 하이라이트)도 가능함