본문 바로가기
일상,취미

다시 시작하는 TIL 31일차

by 진득한진드기 2024. 7. 24.

오늘 한일

회사 처음에 교본 보고 할 떄는 매일매일 뭔가를 배우는 느낌이들어서 시작한 TIL이지만 이제는 뭔가 연구하는 느낌이 강해서 

하루하루 뭘 큰걸 배우는게 어려운것 같다. 게다가 나를 알려주던 사수가 퇴사 해서 혼자 삽질하는 시간이 길어져서 좀 더 방황하는 거 같다.

 

일단 오늘 삽질한거 하나를 기록하라고하면 jefferson 파일이나 다른 .upload형 파일을 extract하는데 문제 생겼다.

 

정확히 말하면 문제보다는 이상한 상황이 생겨서 해결을 못했다.

 

binwalk를 가상환경 안쓰고 네이티브로 돌아가게는 만들었는데 여기에 지원하지 않는 파일을 올려서 실행 파일로 만들려고했다.

 

추출 자체는 성공적으로 되었다고 나오는데 추출결과물이 안나온다.

 

뭐 지원을 안해서 중간에 안되면 안되던가 해야되는데 그냥 성공 했다고 나오는데 결과물만 안나오니 미칠 노릇....

 

결국 2일 동안 삽질하면서 알아낸 사실은 내용이 tz 형식으로 되어있는 파일이라고 가정하면 Unix계열 kernel에서 직접적으로 사용한 압축 알고리즘계열이므로 성공적으로 추출에 성공해도 운영체제에 load가 직접적으로 안되는 것이다.

 

OS path 딴에서 게속 오류가 나와서 내가 해결절대못하겠다 생각했는데 어떻게 실마리는 찾아서 다행이라고 해야되나..... 최대한 가상 환경안쓰고 window에서 사용되는 멀티플랫폼 추출툴을 만들려고 했는데 윈도우만 wsl 을 사용하면 플랫폼마다 생기는 

 

지연률이 너무 높을거 같은데...... 방안을 연구해봐야 되나 싶다.

 

진짜 아무것도 모르는 감자라 요즘 현타가 좀 오긴하는데 뭐..... 요즘 그냥 퇴근하고 개인공부하는 낙으로 사는거 같다.

 

 

퇴근 후 공부

 


멀티캐스트

 

멀티캐스트 어드레스 - 4바이트 어드레스이다.

즉, 멀티캐스트용 ip 주소라고 생각하면된다.

A.B.C.D 라는 데이터를 보내는 주소가 있다고 하면

여기서 보내는 보내는 데이터를 수신하겠다라는 절차를 거치고 A.B.C.D라는 곳에 가입이 된다.

데이터를 보내는 sender와 receiver가 있다.

근데 이 둘은 연결의 개념이 아니다. 만약 sender가 방송을 시작하고 가입을 한 호스트가 하나가 없다고 가정하면 송신은 가능하다. 받는 주체가 없을뿐이다.

 

즉 이들은 UDP 기반으로 통신한다.

상황에 따라 다르지만 만약에 클라이언트가 1000개이고 라우터에 다 연결되어있으면 1000번 다 보내야된다.

멀티캐스트에선 서버가 1번만 보내고 라우터가 복사하고 나머지 클라이언트에게 다 보내는 형식을 취한다.


멀티캐스트의 데이터 전송방식과 트래픽 이점


- 멀티캐스트 서버는 특정 멀티캐스트 그룹을 대상으로 데이터를 딱 한번만 전송한다.
- 딱 한번 전송하더라도 그룹에 속하는 클라이언트는 모두 데이터를 수신한다.
- 멀티캐스트 그룹의 수는 IP주소 범위 내에서 얼마든지 추가가 가능하다.
- 특정 멀티캐스트 그룹으로 전송되는 데이터를 수신하려면 해당 그룹에 가입하면 된다.

멀티 캐스트 그룹을 대상으로 하는 데이터의 수신을 위해서는 가입 절차를 걸쳐야한다.

모든 호스트에 데이터 전송을 해야할 때, TCP또는 UDP보다 발생하는 트래픽의 양이 적다.

UDP도 결국 대상이 있었지만 멀티캐스트 하면 대상이 그룹 단위이기에 더 트래픽이 적다.

 

라우팅과 TTL


TTL (Time to Live)

- 패킷을 얼마나 멀리 보낼 것인가를 결정하는 요소
- TTL은 정수로 표현되며, 라우터를 하나 거칠때 마다 1씩 감소
- TTL이 0이되면, 해당 패킷은 소멸된다.

TTL 설정과 관련된 프로토콜의 레벨은 IPPROTO_IP이고, 옵션의 이름은 IP_MULTICAST_TTL이다.


그룹으로의 가입방법


멀티캐스트 그룹의 가입은 소켓의 옵션정보 변경을 통해서 이뤄진다.
그룹의 가입에 사용되는 프로토콜 레벨은 IPPROTO_IP이고, 프로토콜의 이름은 IP_ADD_MEMBERSHIP이다.
그리고 그룹의 정보는 ip_mreq 구조체 변수를 이용해서 표현한다.

struct ip_mreq{
struct in_addr imr_multiaddr;
struct in_addr imr_interface;
}


sender에서는 특정 멀티캐스트 그룹을 향해 파일에 저장된 데이터를 전송하고 있다.

이 데이터는 라이오 방송과 마찬가지로 receiver가 그룹에 가입을 하는순간부터 수신을 시작한다.

 

브로드캐스트

브로드캐스트와 멀티캐스트는 멀리 보내는데 이를 물리적으로 제한하지 않는다는 차이가 있다.

브로드캐스트는 네트워크상에서의 방송만을 목적으로 데이터 전달을 위해 사용된다.

브로드캐스트의 이해와 구현의 방법


브로드캐스트
- 동일한 네트워크 내에 존재하는 호스트에게 데이터를 전송하는 방법
- 데이터 전송의 대상이 호스트가 아닌 네트워크이다.
- 멀티캐스트와 마찬가지로 UDP소켓을 기반으로 한다.
- IP에서 네트워크 주소를 제외한 호스트 주소를 모두 1로해서  전송하면, 해당 네트워크로 데이터가 전송된다. - Directed 브로드캐스트
- 255.255.255.255로 데이터를 전송하면, 전송한 호스트가 속한 네트워크로 데이터가 전송된다. - local 브로드캐스트

브로드캐스트가 가능 하려면, 소켓의 SO_BROADCAST 옵션정보를 1로 변경한다.