팀장이 내주신 과제를 기반으로 배웠던 내용을 정리하고자 한다.

내가 알고 있는 건 새 발의 피였고, 내가 이해한다는 것은 남에게 쉽게 설명할 수 있을 정도로 물리적 시간을 많이 둬야 한다.

어려운 용어로 설명 안한다. 쉽게 누구나 이해하도록 정리 및 설명하는 게 목적이다.

비전공자들이 들어도 이해할 정도로 쉬입게.

 

flow

위 사진은 패킷이 7계층에서 어떠한 flow로 전달되는 지 설명할 때 최고다. 

일단, 먼저 내가 캡쳐한 패킷을 소개한다. 

http 포트가 열려 있는 웹 페이지에 접속하였고, 이 접속을 통해 와이어샤크로 패킷을 캡쳐했다. 

바로 2번 패킷, http protocol인, 즉 7계층에 있는 패킷에 대해 설명하고자 한다.

보면 다음과 같이 상세한 정보를 파악할 수 있다. 밑에 보이는 hex값은 raw 데이터로, 우리가 보기 힘들기 때문에 이를 일반 사람들이 보기 쉽게 나타낸 거로 생각하면 된다. 

하나하나씩 까보도록 하자. 

L1

먼저 보이는 첫번째 줄은 1계층 물리적 계층에 해당하는 내용이다.

내가 이걸 찾아보고 공부했을 때, 어느 책에는 패킷에 대한 전체적인 내용이라고 나와있었고, 1계층 같기도 해서 되게 고민이어서 질문하려고 했는데, 생각해보니 위에 flow 그림을 보면 물리 계층에는 모든 계층에서 받은 헤더를 달고 있는 게 최종 모습이다. 따라서 전체 패킷에 대한 최종 모습이고 이걸 수신측에게 보내 비로소 데이터 전달이 된 것이기 때문이다. 그래서 1계층이라고 볼 수도 있고, 패킷에 대한 전체적인 모습이라고 볼 수도 있었던 것. (유레카!)

쉽게 말하면 1계층은 별로 하는 게 없다. 즉, 데이터 전달 말고는 딱히 하는 일이 없다는 것. 그냥 데이터 전달이 핵심일 뿐, 일종의 행동대장일 뿐 그걸 설계하거나 명령하는 것이 아닌 행동으로만 보이는 것이다. 그래도 하나하나 한 줄 씩 따져보자.

아! 여기서는 5,6계층이 없다. 이 두 계층에 대한 정보는 적기 때문에 다른 라인에 함께 섞여 있다. 이것도 짚고 넘어갈 것이다.


Interface id : 패킷을 캡쳐한 인터페이스의 번호 (그냥 해당 패킷통신을 하는 인터페이스 정보, 내 pc가 와이파이 연결로 통신했다면 그거에 해당하는 인터넷 망에 대한 정보임.)

Encapsulation type : 캡슐화한 종류.  (2계층의 헤더를 달고 1계층으로( 캡슐화 ) 내려오기 때문에, 이 캡슐화 때 사용한 프로토콜 정보임.)

Arrival time : 패킷을 캡처한 시간

Epoch time : 유닉스 시간으로 바꿔서 나타낸 시간.

Time since~ : 최초 패킷을 시작한 시점부터 현재 패킷을 캡처한 시간까지의 경과 시간

Frame number : 패킷 캡처시 할당되는 순서번호 (와이어샤크 내에서 보여지는 패킷 순서 번호)

Frame length : 패킷 크기

Capture length : 캡쳐했을 때의 프레임 크기 (=frame length)

Frame is marked ,  ignored : 패킷에 색으로 마크되어 있는지, 아님 무시되는 패킷인지

Protocols In frame : 패킷에 포함되어 있는 헤더 (7->4->3->2->1 모두 헤더를 붙이면서 내려왔기에 그에 해당하는 정보임.)

Coloring rule name : 와이어샤크가 컬러링에 사용한 규칙 이름

Coloring rule string :  사용한 규칙의 표시 필터 (http 필터 씀 http 포트 번호 = 80) 

여기까진 딱히 중요한 내용이 없다. 

 

L2

다음은 2계층에 해당하는 내용이다. 

항상 팀장님이 말하길 왜? 왜 L2니? 라는 질문을 하라고 하셨다.

바로 해당 정보가 왜 2계층이냐면 , 단순하다. MAC 주소가 있기 때문이다. 

그리고 내가 생각하기엔 2계층에서 사용하는 프로토콜이 대표적으로 이더넷이기 때문에, 이더넷 + 목적지와 출발지의 mac 주소를 나타내고 있기에 2계층이라고 할 수 있다. 

1계층 -> 2계층으로 어떠한 정보를 주는가?

바로 쉽게 말하면 패킷이 가는 길을 알려준다.  다음 계층으로 가는 정보를 알려준다. 따라서, 여기서의 길은 바로 MAC주소인 것이다. 

2계층이 하는 일은 쉽게 말해 공유기의 역할을 해준다. (내가 팀장님한테 물어봤을 때는 공유기가 스위치 역할과 비슷하다고 하셨다.)

우리가 집에서 공유기를 쓰는 이유가 뭔가?

내 휴대폰에도 연결하고, 내 pc에도 연결하고, 엄마 폰에도 연결하고, IPTV에다가도 연결하고 있지 않은가

1개의 인터넷 연결을 다중의 디바이스에도 연결해주기 위해 공유기를 쓰는 것이다. 각 디바이스마다 기지국에서 나오는 인터넷 연결선을 할당해준다면 이건 속도는 빠를지 몰라도 비용이 어마어마하다.

또한, 우리 집에서 쓰는 공유기는 우리 집에서만 쓸 수 있다. 또 우리는 다른 집의 공유기를 쓸 수 없다. 왜?

그것은 서브넷이 다르기 때문이다. 1개의 공유기를 통해 1개의 서브넷을 제공한다. 

우리가 디바이스에서 공유기를 연결하면, 공유기는 해당 디바이스의 정보를 알고 있다. 즉, MAC 주소를 알고 있는 것이다. 

그래서 내 디바이스로 어떠한 패킷이 들어와 정보를 공유해야 한다고 치면, 외부에서 load 시킬 데이터가 내 디바이스로 들어오려면 우리 아파트로 들어오는 인터넷 선에서 우리 집 공유기로 들어온다. 공유기는 스위치역할도 하기 때문에,  내 디바이스 주소 (mac주소)와 일치하는 지 판단한 후, 내 디바이스로 해당 데이터가 load된다. 

이렇게 목적지를 알려줘야 하기 때문에 2계층에서는 MAC주소가 필요하다. 

2계층은 단일 서브넷에서 MAC 주소로 구분한다. 


Destination: 수신지  mac 주소로 표시되어 있음  (EFMNetwo_7b = 우리 집 LAN카드에서 만든 벤더명)

Source: 송신지 mac 주소로 표시되어 있음.  (apple 내 맥북)

Type: 이더의 타입, 패킷의 헤더 형식  IPv4( 2계층 패킷에는 이전 3계층에 해당하는 프로토콜 헤더가 붙여 있기 때문에 그 헤더 정보)

 

L3

다음 영역은 3계층에 해당하는 정보이다.

왜 3계층인가? IP 주소 정보를 담고 있기 때문이다.

2계층에서 3계층으로 넘어갈 때는, IP주소를 통해 3계층으로 가기 위한 길을 안내한다.

L2는 단일 서브넷에서 MAC주소만을 가지고 길을 찾았다면, L3는 여러 개의 서브넷에서  MAC 주소 +IP 주소를 가지고 길을 찾는 것이다.(라우팅임)

쉽게 말해, L2는 우리 아파트로 들어오는 인터넷 연결선에서 우리 집으로 들어오는 것까지의 길이라면, L3는 우리 동네에서 들어오는 인터넷 연결선에서 여러 아파트 중 우리 아파트로 들어오는 것까지의 길을 찾는 것이다. 

라우터는 L3 스위치가 비슷하다.  L3 스위치는 기지국, L2 스위치는 공유기 느낌이다.(ㅇㅅㅇ)


Differentiated Services Field : 패킷의 대역을 제어하는 Qos에 사용되는 정보. (서비스 정보 관련)

DSCP : 패킷을 식별하는 필드, 패킷의 전송 우선순위나 지연 정도를 클래스로 구분함.

Total length : 총 패킷의 크기

Flags : 패킷을 재조립하는 데에 사용됨,  패킷의 혼잡 제어

Don’t fragment = 단편화 안함 ( 패킷이 너무나도 크면 이걸 분할해서 해야 병렬로 데이터 전송이 가능해 신속함)

Fragement offset : 분할된 패킷이 전체에서 어느 위치에 해당하는 지를 알려줌.

Time to live : 패킷의 수명을 나타냄. 패킷이 라우터와 같은 중계 장치를 통과할 때 마다 TTL값이 1씩 감소하는데 이때 0이 되면 해당 패킷은 패기된다.

-> 이게 되게 중요한 개념인데, 라우터를 찾는 과정에서 계속 1이 많이 줄고 있다는 것은 목적지를 못찾고 계속 헤맨다는 뜻이다. 

Protocol : 프로토콜의 정보 (3->4계층에서 4계층에서 붙은 헤더의 정보)

Header checksum : IP 헤더에 오류가 없는지 체크함.

Source address , destination address :출발지와 목적지 ip 주소

L4

센터장님이 말씀하시길. Port는 서비스라고 하셨다. 

서비스를 제공하는 길을 선택하는 것.

http port, ftp port 등 이렇게 말하지 않는가. 웹서비스를 쓰고 싶다는 것, 파일 로드하고 싶다는 것 등 서비스를 선택하는 것이다.

또 4계층이 하는 일은 부하분산 / Load Balancing : 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스입니다.

(출처 :https://nesoy.github.io/articles/2018-06/Load-Balancer)

여러 클라이언트에 하나의 서버 접속량이 많아질 때, 여러 클라이언트에게 똑같이 서비스를 제공해줘야 하기 때문에 부하 분산을 하게 된다.

이는 port 정보를 알고 있기 때문에 가능한 것이다. 

4계층에서 데이터의 내용은 중요하지 않다. 단지 데이터 전달이 잘 되고, 오류가 없는지가 중요할 뿐이다. 


Source port. Destination port : 출발지와 목적지 port (어떠한 서비스를 할 것인가!)

Stream index

TCP segment Len

Sequence number : 실제 클라이언트의 초기 시퀀스 번호 1 패킷이 분할로 전송되기 때문에 시퀀스 번호를 맞춰 패킷을 조합하여 유의미 결과를 낳음

Acknowledgment number : 웹 서버의 초기 시퀀스 번호에 1을 더함 0+1 (둘다 1,1일 경우 처음 = 3-way 1, 연결시도 부분)

Flag 이전까지는 4계층 전송계층에 해당하는 내용이고, 이후부터는 데이터 전달 오류 같은 거 신경 안 씀. 세션 연결에 관한 내용으로 5계층이라고 볼 수 있다. 

PSH (push) = 즉시 응용계층으로 보내도록 명시.           ACK(acknowledgment) :연결 응답

Window :  수신 쪽에서 받을 수 있는 크기를 송신 쪽에 전달

Urgent pointer : 급하게 우선처리되어야 하는 데이터의 마지막 바이트 위치 가리킴.

TCP Payload : 헤더가 아닌 페이로드 크기

세션 연결에 관한 5계층까지 올 수 있었던 이유가 앞서 MAC주소 , ip주소, port 정보까지 모두 알았으니 이제 연결할 수 있게 되었기 때문.

L7

다음 7계층에 대한 내용이다. 물론 여기에 6계층 내용도 중간중간 끼여있다.

6계층은 말그대로 가장 쉽게 말하면, 확장자에 대한 정보가 들어있다. 이미지는 jpg,png,gif 등, 영상은 MPEG, 문서파일은, docx,hwp 등이 있듯이 확장자를 맞춰주기 위한 영역이다.

accpet와 accept-encoding 등 과 같은 부분이 6계층에 해당된다. 즉, 이부분에 내가 요청한 데이터 파일의 형태가 나타난다. 

GET은 http method로, 여러 method가 있다. GET 뒤로 오는 부분이 내가 요청한 값이 된다. 

cookie이후로는 내가 요청 데이터, html 파일 정보가 나온다. (결국 내가 알고자 하는 내용.)


GET / HTTP/1.1    : GET method를 이용. 서버가 해야할 동작을 나타냄. 웹서버로부터 자료를 가져오는 기능 1.1http 버전을 나타냄.

Host: dart.fss.or.kr : 서버에게 요청하려는 도메인 주소

Connection: keep-alive : 현재의 연결이 완료된 후 네트워크 접속을 계속해서 연결 유지 및 대기하는 구조를 나타냄. 

(keep-alive는 연결은 지속되고 끊기지 않으며 동일한 서버에 대한 후속 요청을 수행 가능함)

Cache-Control: max-age=0 :  캐시된 복사본으로 저장된 HTTP 응답을 브라우저가 사용할 수 있는 최대 시간.

: max-age =0은 캐시 서버가 실제 서버로 요청을 전달하여 유효성을 매번 확인한다.

*cache-control은 요청과 응답에서 브라우저의 캐시 정책을 정의하기 위한 매개변수를 포함한 것.

*브라우저 캐시 : 다음 클라이언트 요청에 더 빠르게 응답하고 로드하기 위해 웹 사이트 리소스를 임시 저장해놓는 것.

Upgrade-Insecure-Requests: 1 :비보안 URL을 보안 URL로 대체된 것처럼 사용자 에이전트에게 지시하는 것. =HTTPS

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36

: 브라우저 정보, 사용자 PC 정보. mozilla는 브라우저 서버 정보. 접속한 브라우저는 크롬.

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

: 내가 요청한 데이터 파일 정보

*/* (모든 문서)

Accept-Encoding: gzip, deflate : http 메시지를 압축하기 위한 헤더 정보가 들어가 있음. 이 헤더를 통해 용량있는 데이터를 압축할 수 있다. 돌려줄 리소스에 사용되는 압축 알고리즘이다.

: gzipGNU ZIP의 약자로, deflate 알고리즘에 기반한 유닉스용 파일 압축 툴이다.

Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 : 서버가 돌려주기로 예상된 언어임. 

Cookie:WMONID=sH-uLuQUqa9; JSESSIONID=EZ5JQQNYjYVEmebSm6VTc4M8D7s31o4pxrWHMWQSzTDH901LJAFl5wfYcaeux5Ak.ZG1fZGFydC9kYXJ0Ml9kYXJ0X21zMQ==; noticeWeek=Y

: SET-Cookie 헤더와 함께 서버로부터 이전에 전송했던 저장된 http 쿠키를 포함한다.

JsessionID – tomcat에서 세션을 유지하기 위해 발급하는 키

요청마다 새로운 연결이 생성되고, 응답하고 연결은 끊기게 되므로 유지하기 어렵다. 상태 저장을 위해 jsessionID쿠키를 클라이언트에게 발급해주고 해당 값을 통해 세션유지함.

 

지금까지 패킷을 일일히 하나씩 분석해보았다. 

패킷을 볼 때는 아직 하나씩 보지 말고, 

이렇게 봐야한다. 

캡슐화와 디캡슐화를 통해 어떻게 헤더가 붙는지, 헤더가 무슨 역할을 하는지 말이다.

HTTP패킷은 1~7계층까지 다 볼 수 있다. HTTP는 사용자가 실제로 전달받는 데이터로 7계층까지 모두 거쳐야 사용자가 원하는 데이터를 받을 수 있다. 

TCP패킷은 1,2,3,4계층까지 볼 수 있다. 왜냐하면 TCP 프로토콜은 4계층 프로토콜로, 전송 계층  즉 전송 연결에 대한 부분만 신경을 쓰기 때문에 실제 데이터가 어떤지에 대해선 신경쓰지 않는다. 따라서, 4계층까지만의 정보만 필요하다. 

송신 -> 수신 으로 데이터가 전달될 때, 데이터 링크 계층에서는 mac주소를 알려줬고, 네트워크 계층에서는 IP 주소를 알려줬고, 전송 계층에서는 PORT 정보를 알려줬기 때문에, 세션 계층에서 세션 연결이 가능하고, 표현 계층에서 세션을 통해 전달할 데이터의 표현 형태를 결정하고, 최종 응용 계층에서 데이터를 제공할 수 있게 된다는 것이다.

 

다음에 다뤄볼 내용은 계층별 하는 일, 장비, 어떤 정보를 가지고 있는 지 알아볼 생각이다. 


추가 공부 *****

- Url vs Uri 차이

쉽게 말하자면, Uri은 위에서 본 패킷 기준으로 http stream에서 GET method 뒤에오는 요청값에 해당한다. 

Url은 Uri에 host 정보까지 합쳐진 개념이다. 

조금 더 찾아보니, uri은 식별자 개념이고 Url은 주소, 위치를 의미한다.  uri로 식별은 가능하지만, 찾아갈 수는 없다.

- Real IP 와 Virtual IP 개념

진짜 설명 잘 되어있다.

https://run-it.tistory.com/44 

 

VIP란 무엇인가?[Virtual IP]-[★깜놀주의★]

VIP란 무엇인가? 오늘은 VIP에 대해서 알려드리는 시간을 갖도록 하겠습니다. 저도 이번 글을 작성하면서 VIP에 대해서 찾아보았는데... 속이 뻥 뚫리게 시원하게 알려주는 곳이 없더라고요... 그래

run-it.tistory.com

VIP는 하나의 웹 서버가 장애가 발생하더라도 원활한 서버 통신이 가능하도록 해야 한다.

내가 여기서 주목할 점은 4계층에서의 VIP에 해당하는 개념이다.

4계층은 port의 정보를 갖고 있고 이 port는 서비스로 웹 서버와 관련되어 있다. 

웹 서버에서 보이는 설명을 참조하면 좋겠다.

https://sonsecurity.tistory.com/123

 

L4 스위치의 가상IP 설정 및 로드밸런싱

1. 로드밸런싱 L4 = 'IP, 포트, 세션' 을 기반으로한 로드 밸런싱 - OSI 7 Layer는 7계의 계층으로 나뉘지만 크게 두 가지 구간으로도 나뉠 수 있음. @ 1-4 계층 (통신구간)   - 통신구간은 각각의 통신단

sonsecurity.tistory.com

 

 

'네트워크' 카테고리의 다른 글

Zero Trust 이행 단계  (0) 2021.08.22
DDOS 공격 대응 방안  (0) 2021.07.20
수리카타  (0) 2021.07.17
WireShark 패킷 분석  (0) 2021.07.14
네트워크 공부  (0) 2021.07.12

처음 들어보는 개념이지만, 보안기사에도 출제되었다고 해서 한번 정리.

요즘 많이 이슈화되고 있는 툴이라고 한다. 

Suricata
수리카타 
수리카타는 오픈소스 IDS IPS로 기존 Snort의 장점을 수용하고, 대용량 트래픽을 실시간으로 처리하는 데 특화된 소프트웨어.

 

'네트워크' 카테고리의 다른 글

Zero Trust 이행 단계  (0) 2021.08.22
DDOS 공격 대응 방안  (0) 2021.07.20
OSI 7 layer 패킷 분석  (0) 2021.07.17
WireShark 패킷 분석  (0) 2021.07.14
네트워크 공부  (0) 2021.07.12

인턴하면서 팀장님이 내주신 과제. 이것만 간파하면 아주 패킷,네트워크 관련 면접은 그냥 거저먹는다고 해서 공부했다.

과연 여기서 뭐가 정답이고 뭐가 틀릴지. 내가 고민했던 것, 공부했던 것을 정리해보려고 한다. 

 


http 요청 패킷 정보

어떤 블로그와 책에서는 첫번째 줄이 전체 패킷에 대한 요약, 전체적인 내용을 담고 있다고 한다 

-> 과연 1계층 물리계층에 대한 내용인가 아님 정말 전체 패킷에 대한 요약인가?

일단 1계층이라는 근거는 'on wire' 그리고 interface en0

on wire는 케이블 선 등에 있는 패킷이라는 의미고, interface en0은 현재 통신한 pc 연결망, 인터페이스에 관한 정보인 듯하다.

그리고 Encapsulation type : Ethernet은 이더넷으로 캡슐화가 되었다는 것을 의미함 -> 이는, 데이터를 전송할 때 수신측에서 보낼 때는 최종적으로 모든 계층의 헤더가 붙은 데이터그램이 형성되었다는 것. 즉, 2계층에서 이더넷 프로토콜로 캡슐이 진행되었다는 것이니까 2계층에서 1계층으로 내려왔으니 2계층에서 진행한 캡슐화에 대한 정보를 넣은 것이라고 생각함. 

 

반면 그냥 패킷에 대한 전체적인 정보, 요약 정보라는 이유는

protocol in frame: 부분에 해당 데이터에 쌓여서 헤더가 추가되는데, 이때 캡슐화에서 헤더가 추가된 헤더들의 정보를 모두 보여줌. 

흠 이걸 쓰다가 생각해보니 최종적으로 물리계층에서 마지막으로 모든 캡슐화가 진행된 상태가 마지막 부분에 비트에 있는 것처럼, 

최종적으로는 모든 헤더가 붙은 상태일텐데,,, 그러고 보니 ,, 물리계층에 있는 비트 정보를 나타내서 1계층인 거 같기도 함. 

 


왜 헤더를 추가하는가?

계층마다 사용하는 프토콜이 상이한데, 전송하려는 데이터에 해당 계층에서 사용되는 프로토콜 정보를 추가하거나 삭제해서 해당 계층에서 적절한 방식으로 데이터가 정상적으로 끊기지 않고 전송될 수 있도록 하기 위해 사용하는 것 같다. 

데이터 링크 계층 :  이더넷 등

네트워크 계층 : IP, ARP, ICMP

전송 계층 : TCP, UDP 

세션 계층 

표현 계층

응용 프로그램 계층 : http, ftp, snmp 등 (데이터가 여기까지 왔으면 이제 해당 7계층에 있는 프로토콜만 따르면 됨.)

 

 

 

'네트워크' 카테고리의 다른 글

Zero Trust 이행 단계  (0) 2021.08.22
DDOS 공격 대응 방안  (0) 2021.07.20
OSI 7 layer 패킷 분석  (0) 2021.07.17
수리카타  (0) 2021.07.17
네트워크 공부  (0) 2021.07.12

'네트워크' 카테고리의 다른 글

Zero Trust 이행 단계  (0) 2021.08.22
DDOS 공격 대응 방안  (0) 2021.07.20
OSI 7 layer 패킷 분석  (0) 2021.07.17
수리카타  (0) 2021.07.17
WireShark 패킷 분석  (0) 2021.07.14

+ Recent posts