Network. DHCP(Dynamic Host Configuration Protocol)

개요 DHCP: Dynamic Host Configuration Protocol 디바이스가 네트워크에 접속하려면 고유한 IP주소가 필요하지만, 수동으로 설정하면 불편하고 충돌이 발생할 가능성이 있음, DHCP 서버는 자동으로 IP 주소와 서브넷 마스크, 게이트웨이와 같은 파라미터를 배정한다. 동작 방식 DORA Discovery 클라이언트가 네트워크에 연결되면, IP 주소가 필요하다고 브로드 캐스트 요청을 보냄 Offer DHCP 서버가 사용 가능한 IP 주소를 찾아서 클라이언트에게 제안 Request 클라이언트가 서버에게 응답함 Acknowledge DHCP 서버가 설정을 최종적으로 승인 임대 DHCP는 IP 주소를 영구적으로 할당하지 않고 일정 시간 동안 임대(Lease)하는 방식으로 관리한다. ...

February 1, 2025

Network. ARP(Address Resolution Protocol)

ARP ARP: Address Resolution Protocol 네트워크에서 IP 주소와 MAC 주소를 변환하는 프로토콜 동작 방식 데이터 전송 시, 송신자는 목적지의 MAC 주소를 알아야 한다. 송신 장치가 ARP Request를 브로드캐스트한다. 여기서 네트워크의 범위는 LAN, 즉 서브넷 내부 서브넷 마스크를 이용해서 공유기를 거쳐야 하는지 판단함. 이때 기본 게이트웨이는 이미 알고 있음 해당 IP 주소를 가진 장치가 ARP Reply를 유니캐스트로 응답한다. 이 정보를 ARP 캐시에 저장하여 다음 통신에서 요청하지 않는다 Note. ARP 캐시: IP 주소와 MAC 주소의 대응 관계를 임시로 저장한 캐시 메모리 ...

February 1, 2025

Network. UDP(User Datagram Protocol)

소개 UDP(User Datagram Protocol)는 전송 계층(L4)에서 동작하는 비연결형(Connectionless) 프로토콜이다. 연결 설정 없이 데이터를 빠르게 전송하며, 신뢰성보다 실시간성이 중요한 환경에서 주로 사용된다. UDP: User Datagram Protocol OSI 7계층에서 전송 계층(L4)에 해당 특징 장점 데이터 전송 전에 연결을 설정하지 않는 비연결형 서비스 지연 시간이 낮음 단순한 프로토콜 구조 헤더 크기가 작고, 오버헤드가 적음 IP 계층의 유니캐스트, 브로드캐스트, 멀티캐스트 전송에 사용할 수 있음 단점 신뢰성 부족 패킷 손실, 순서 오류, 중복이 발생해도 복구할 수 없음 애플리케이션 수준의 보완 필요 데이터그램 패킷 통신 각 데이터그램은 다른 데이터그램과 독립적으로 전달된다. UDP 자체에는 순서 번호, 재전송, 중복 제거 기능이 없으므로 도착 순서나 전달 성공을 보장하지 않는다. ...

January 31, 2025

Network. TCP(Transmission Control Protocol)

소개 TCP(Transmission Control Protocol)는 전송 계층(L4)에서 동작하는 연결 지향(Connection-oriented) 프로토콜이다. 신뢰성 있는 데이터 전송을 위해 연결 설정, 순서 제어, 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공한다. 특징 신뢰성 있는 연결형 서비스 제공 포트 번호를 이용한 다중화, 순서 제어, 오류 제어, 흐름 제어, 혼잡 제어 기능 제공 애플리케이션에는 메시지 경계를 보존하지 않는 연속된 바이트 스트림을 제공 TCP 헤더 TCP 세그먼트 앞부분에 위치한 데이터 전송을 위한 제어 정보를 포함하는 구조, 20바이트로 구성되며 최대 60바이트로 확장 가능 ...

January 31, 2025

Network. TCP vs. UDP

TCP vs. UDP TCP와 UDP는 모두 전송 계층에서 동작하는 프로토콜이지만, 연결 방식과 데이터 전송 방식이 다르다. TCP는 신뢰성을 우선으로 하고, UDP는 속도와 실시간성을 우선으로 설계되었다. 비교 구분 TCP UDP 연결 방식 연결 지향 (Connection-oriented) 비연결형 (Connectionless) 신뢰성 O X 순서 보장 O X 데이터 전송 방식 스트림(Stream) 데이터그램(Datagram) 흐름 제어 O X 혼잡 제어 O X 헤더 크기 20~60 Byte 8 Byte 속도 상대적으로 느림 상대적으로 빠름 언제 사용할까? TCP 웹 서비스 (HTTP, HTTPS) 이메일 (SMTP) 파일 전송 (FTP) 데이터의 정확성이 중요한 서비스 UDP DNS DHCP 실시간 스트리밍 VoIP 온라인 게임 빠른 응답이 중요한 서비스 선택 기준 데이터의 정확성과 순서가 중요하다면 TCP를 사용한다. 일부 패킷 손실이 발생하더라도 실시간성이 더 중요하다면 UDP를 사용한다.

January 31, 2025

Network. TCP Flow & Congestion Control

개요 TCP는 신뢰성 있는 데이터 전송을 위해 흐름 제어(Flow Control) 와 혼잡 제어(Congestion Control) 기능을 제공함. 흐름 제어는 송신자와 수신자 사이의 데이터 전송량을 조절하고, 혼잡 제어는 네트워크 전체의 혼잡을 방지하기 위한 메커니즘이다. 흐름 제어 (Flow Control) 송신자와 수신자의 처리 속도 차이로 인해 데이터가 손실되지 않도록 전송량을 조절하는 기능이다. 정지-대기 (Stop-and-Wait) 수신 측의 ACK를 받은 후에 다음 패킷을 전송하는 방식, 한 번에 하나의 패킷만을 전송할 수 있음 슬라이딩 윈도우 (Sliding Window) ACK를 이용해서 송신 데이터의 양을 조절하는 방식, ACK를 받지 않더라도 미리 정해진 패킷의 수 만큼 연속적으로 전송하는 방식 ...

January 31, 2025

Algorithm. Counter Clock Wise

소개 2차원 평면 위에서 두 선분이 주어졌을 때 두 선분의 교차 여부를 판단하는 알고리즘 아이디어 2차원 평면 상에 3개의 점이 있을 때, 이들을 이루는 방향을 계산해서 두 선분의 교차 여부를 판단한다. 여기서 말하는 3개의 점은 기준이 되는 선분의 양 끝점($P_1$, $P_2$라 하면)과, 나머지 선분의 한 끝점($Q_1$ 또는 $Q_2$)을 말한다. 총 4개의 점인데 왜 3개의 점이냐고 하냐면, 기준이 되는 선분의 양 끝점과 나머지 선분의 한 끝점을 이용해 각각 CCW를 계산하기 때문이다. ...

January 30, 2025

The Swift Programming Language. Access Control (2)

Custom Types 커스텀 타입에 대한 명시적인 액세스 레벨을 지정하고 싶으면, 타입을 정의할 때 하면 된다. 새로운 타입은 액세스 레벨이 허용하는 곳이라면 어디에서든 사용할 수 있다. 예를 들어, file-private한 클래스를 정의하면, 그 클래스가 정의된 소스 파일 내부에서 프로퍼티나, 함수의 파라미터 혹은 리턴 타입으로만 사용할 수 있다. 또한 타입의 액세스 컨트롤 레벨은 타입의 멤버(프로퍼티, 메소드, 이니셜라이저, 서브스크립트)의 기본 액세스 레벨에도 영향을 끼친다. 만약 타입의 액세스 레벨을 private이나 file private으로 정의했다면, 멤버들의 기본 액세스 레벨도 private이나 file private이 된다. 만약 타입의 액세스 레벨을 internal 이나 public으로 정의했다면(혹은 액세스 레벨을 명시적으로 지정하지 않아 기본 액세스 레벨 internal을 사용한다면), 타입의 멤버의 기본 액세스 레벨은 internal이 된다. ...

January 29, 2025

The Swift Programming Language. Access Control (1)

Access Control 액세스 컨트롤은 다른 소스 파일이나 모듈에서 코드의 일부분에 접근하는 것을 제한한다. 이 기능은 코드의 구체적인 구현 사항을 숨기면서 해당 코드에 접근하고 사용할 선호하는 인터페이스를 지정할 수 있게 해준다. 개별 타입들 (클래스, 스트럭처, 이뉴머레이션) 뿐만 아니라 해당 타입에 포함된 프로퍼티, 메소드, 이니셜라이저, 서브스크립트에도 접근 레벨을 지정할 수 있다. 프로토콜도 특정 컨텍스트로 제한할 수 있으며, 글로벌 상수, 변수, 함수도 가능하다. 다양한 레벨의 액세스 컨트롤을 제공하는 것에 더해서, Swift는 일반적인 시나리오에 대해서 기본 액세스 레벨을 제공해서 명시적으로 액세스 컨트롤 레벨을 지정할 필요를 줄였다. 만약 싱글 타겟 앱을 작성하고 있다면, 아마도 명시적인 액세스 컨트롤을 지정할 필요가 없을 것이다. ...

January 28, 2025

The Swift Programming Language. Memory Safety (2)

Conflicting Access to In-Out Parameters 함수는 모든 in-out 파라미터에 대한 장기 쓰기 접근 권한을 가지고 있다. in-out 파라미터에 대한 쓰기 권한은 모든 non-in-out 파라미터가 evaluate된 후에 시작되어 함수가 호출되는 전체 기간동안 유지된다. 여러개의 in-out 파라미터가 존재할 경우, 쓰기 접근 파라미터들이 보이는 순서대로 시작된다. 이 장기 쓰기 접근 권한의 결과중 하나는 스코프 규칙(scoping rule)과 액세스 컨트롤이 허락하더라도, in-out으로 전달된 원본 변수에 접근할 수 없다는 것이다—원본에 접근하는 것은 충돌을 발생시킨다: ...

January 27, 2025