본문 바로가기

CS 기초/Network6

Reliable UDP (RUDP)란? Reliable: 신뢰할 수 있는 TCP는 패킷 통신에 있어서 다음과 같은 특징 및 기능 제공 통해 신뢰성을 보장하는 프로토콜이다. 패킷 순서 보장: 송신한 순서대로 수신함을 보장 패킷 무결성 보장: 송신한 패킷과 수신한 패킷의 내용이 동일함을 보장 패킷 도착 보장: 송신 패킷은 꼭 상대에게 도착할 것을 보장(재전송 등을 통해 자체적으로) 혼잡 제어(congestion control): 패킷 송수신이 원활하게 발생할 수 없는 상황에 대한 자체적인 처리 흐름 제어(flow control): 혼잡 상황 혹은 수신측이 감당할 수 없는 양의 패킷 전송 등이 최대한 발생하지 않도록 패킷의 전송 흐름을 제어하는 기능 UDP는 위와 같은 기능을 제공하지 않는다. Reliable UDP는 신뢰될 수 있는 UDP 라는 .. 2023. 2. 6.
논블로킹(Non-blocking) 소켓 만들기 | ioctlsocket, select Winsock을 기준으로 설명합니다. 혹시나 틀린 부분이 있을 수 있으니 맹신은 마시고 있다면 알려주세요~ 소켓 관련 함수에 타임 아웃을 지정하고 싶다면 비동기 소켓 + select 함수가 필요합니다. 해당 글을 전부 읽으시면 됩니다. 기본적으로 Winsock의 accept, connect, recv, send와 같은 대부분의 소켓 관련 함수들은 호출 스레드를 블로킹(blocking) 상태로 만듭니다. 블로킹 상태란 현재 스레드가 더 이상 코드를 진행하지 않고 block 상태로 멈춰 있는 상태를 말합니다. 블로킹 상태는 각 조건을 만족하거나 타임 아웃이 될 때까지 유지됩니다. 이해하기 어려우면 그냥 조건을 만족할 때까지 함수를 벗어나지 않고 기다린다고 생각하면 편합니다. accept 함수는 클라이언트의 .. 2020. 10. 22.
IP 주소 127.0.0.1 의 의미 - 루프백(loopback) or 로컬호스트(localhost) 주소 네트워크에선 특수한 IP 주소로 127.0.0.1이라는 IP 주소가 있다. 한 번씩 봤을 법한 주소인데, 이는 루프백(loopback) 혹은 로컬호스트 주소(localhost)라고도 불린다. 네트워크 통신이란 인터넷 상에 존재하는 호스트와 서로 패킷을 주고 받는 것이다. 이때, 호스트 A에서 B로 패킷을 전달하고 싶다고 생각해 보자. 그러면 A의 네트워크 계층에서 B의 네트워크 계층으로 패킷을 전송해야 한다. 패킷엔 목적지(B)의 IP 주소가 담겨 있다. 이 정보를 통해 B의 네트워크 계층에 도달한다면, B의 네트워크 계층은 수신한 패킷을 상위 계층들로 전달하고, 각 상위 계층은 알아서 패킷을 분해하고 순수 데이터(페이로드)를 수신할 것이다. 그런데 만약 목적지 IP 주소를 127.0.0.1로 설정하게 .. 2020. 10. 6.
Winsock2 라이브러리를 이용하여 간단한 TCP/IP 서버와 클라이언트를 구현해보자 | C++ 참고 유튜브 MSDN tutorial MSDN Winsock2 header 멀티플레이어 게임 프로그래밍 네트워크에 대해 처음 접하거나 소켓을 모른다면 이 포스팅을 보고오는 것을 추천 [Winsock이란?] Winsock은 Windows Sockets API(WSA)라는 Windows API이다. 인터넷 네트워크 및 소켓과 관련된 함수들을 제공해준다. Winsock은 버전1과 버전2가 있으며 Winsock1에 여러 기능이 좀 더 추가된 것이 Winsock2라고 한다. 여기선 버전 2를 사용한다. [서버와 클라이언트의 기본 로직] 코드로 구현하기 전에 서버와 클라이언트의 각 로직을 알면 더 구현하기 쉽다. 참고로 UDP가 아닌 TCP/IP 프로토콜을 사용한다. 우선 서버측의 로직 먼저 살펴보자. 서버는 클라.. 2020. 5. 4.
네트워크 프로그래밍을 위한 TCP/IP와 OSI 7 layer 개인적으로 공부하는 내용이라 틀린 내용이 있을 수 있습니다. 참고 https://www.youtube.com/watch?v=laBzCcF1414&list=PLXvgR_grOs1BjBZiePPZMR1PmZybazxg6&index=2 https://www.joinc.co.kr/w/Site/Network_Programing/Documents/IntroTCPIP [TCP/IP란?] TCP/IP란 TCP와 IP라는 두 프로토콜을 함께 가리키는 말이다. TCP와 IP라는 개념을 이해하려면 먼저 프로토콜이 무엇인지 알아야 한다. 프로토콜(Protocol)이란 컴퓨터(호스트)와 같은 통신 장비들이 서로 메세지를 주고받기 위한 통신 규약이다. 이렇게만 말하면 개념이 너무 추상적이라 잘 와 닿지 않는다. 프로토콜은 인터페.. 2020. 4. 25.
직렬화(Serialize)와 역직렬화(Deserialize)란? 직렬화(Serialize) 프로그램의 object에 담긴 데이터를 어떤 외부 파일에 write 및 전송하는 것 역직렬화(Deserialize) 어떤 외부 파일의 데이터를 프로그램 내의 object로 read 해오는 것 + 보충 설명 네트워크 통신에서 객체 또는 클래스 직렬화의 의미는 다음과 같다. 상대 호스트와 데이터를 주고 받을 때 데이터의 종류는 int, double 과 같은 기본 타입일 수도 있지만, 포인터 타입을 가질 수도 있다. 또한 바이트가 연속적이지 않은 NON-POD 타입일 수 있다.(i.e. 가상 함수 또는 vector를 멤버로 가지는 클래스 타입 등) 기본 타입은 그 값 그대로 유효하지만 포인터 타입은 그렇지 않다. 포인터 타입은 어떤 유효한 값에 대한 주소를 가지는데, 이는 자신의 컴.. 2020. 2. 29.