Notes 7

[Network] 스위치와 브릿지를 기깔나게 구분해보자

CS 분야에 엄지발가락이라도 담가봤다면 아마 허브와 스위치를 구분할 줄 모르는 사람은 없을 것이다. 통상적으로 허브를 말하면 '더미 허브'를 의미하는 경우가 일반적인데, 이러한 더미 허브는 ARP와 같은 프로토콜을 이용하지 못 하기 때문에 허브는 자기 자신과 연결된 장비들의 MAC 주소를 저장하지 않고 있다. 때문에 패킷이 들어온 포트를 제외한 나머지 모든 포트로 이를 브로드캐스트하는 방식으로 작동한다. 반면에, 스위치는 허브보다 똑똑하게 동작하는 친구이다. 여기에서는 허브와 비교를 위해 동일하게 L2 레벨에서 접근해보자. 스위치는 ARP를 통해 스위치에 연결된 장비들의 MAC 주소와 포트를 연결지어 기억하고 있다. 때문에 패킷이 들어게 되면 사전에 작성해둔 ARP Table을 바탕으로 패킷의 수신지와 ..

Notes/Network 2023.05.19

함수 호출 규약 정리 Function Calling Convention

어느 함수에서 다른 함수를 호출하는 상황을 생각해보자. 기존 함수에서 현재 스택의 상태로 복귀할 수 있도록 현재의 스택 포인터가 가리키고 있는 위치를 기억하고(Caller의 스택 프레임 상태), 리턴 주소(Caller가 Callee를 호출한 주소값)를 어딘가에 저장해둘 필요가 있겠다. 함수 호출 규약이란 간단히 말해 이러한 정보를 어떻게 저장하고 로드할 것인가에 대한 약속이라고 생각하면 된다. 물론 이러한 과정은 컴파일러에 의해 처리되는 것이 일반적이기 때문에 사용자는 컴파일러의 configuration에서 본인이 원하는 규약을 선택해주기만 하면 된다. ( MSVC기준으로 언어별로 자동 선택되는 것인줄 알았는데, 컴파일러에서 컴파일중인 장치의 아키텍처를 보고 적절한 호출 규약을 알아서 선택하게 된다고 한..

Notes/System 2023.05.18

[Network] NAT - PAT와 포트포워딩을 구분지을 수 있을까?

친구와 마인크래프트에서 만나 멀티플레이를 하기 위해서 서버를 열려고 한다. 서버에 친구를 초대하기 위해서는 우선 서버를 열기 위해 마인크래프트 버킷을 세팅하고 우리집 공유기의 25565포트로 들어오는 TCP 패킷을 내 컴퓨터로 전송하도록 공유기 어드민 페이지에서 설정해주어야 한다. 우리는 이 과정을 포트포워딩이라고 부른다. 하나의 공인 ip로 들어오는 요청을 포트 번호 별로 구분지어 사용하는 포트포워딩과 유사하게 우리는 하나의 공인 ip를 보다 효율적으로 사용하기 위해 라우터나 스위치 단계에서 자체적인 주소 체계 (사설 ip)를 만들어 사용한다. LAN을 구성하는 장치들에 사설 ip를 할당하는 프로토콜은 DHCP (Dynamic host Configuration Protocol)라고 부르며, 사설 ip와..

Notes/Network 2023.04.21