네트워크 프로그래밍을 위한 준비로 인터넷 근간을 이루는 TCP/IP 프로토콜을 살펴보자
소켓(socket)의 개념
소켓은 버틀리 유닉스(Berkeley Software Distribution UNIX)에서 개발한 프로그래밍 인터페이스이다. 이를 윈도우 환경에서 사용할 수 있게 만든 것을 윈도우 소켓(Window Sockets), 줄여서 윈속(Winsock)이라고 한다.
윈속 함수 오류 처리 방법
WSAStartup, WSACleanup
(2-5 그림) 이번에는 소켓을 생성하고 닫는 방법을 알아볼 것이다. 소켓 생성 소켓을 사용해 통신을 하기 위한 기본 요건은 통신 양단이 같은 프로토콜을 사용하는 것이다. socket() 함수는 사용자가 요청한 프로토콜을 사용해 통신할 수 있도록 내부적으로 리소
소켓 주소 구조체(docket address structures)란?
바이트 정렬(byte ordering): 메모리에 데이터를 저장할 때 바이트 순서를 나타내는 용어
도메인 이름(domain name)이란 IP 주소와 마찬가지로 호스트나 라우터의 고유한 식별자
TCP 서버-클라이언트
코드를 분석하고 관련 소켓 함수를 공부할 것이다.
해당 링크는 IPv4를 사용한다고 가정하고 작성한 것이다. 여기에서는 IPv6를 지원하기 위한 코드 수정 방법을 소개한다.
응용 프로그램 수준에서 주고받는 데이터의 형식과 의미 그리고 처리 방식을 정의한 프로토콜
다양한 데이터 전송 방식
책 61페이지에 존재하는 Chapter02의 연습문제를 풀이하며 알게된 새로운 윈속 함수 정리
소켓 응용 프로그램과 멀티스레드
아래 코드는 스레드 생성 함수를 사용하여 만든 멀티스레드 TCP 서버의 기본 형태이다. 1: 클라이언트가 접속하면 accept()함수는 클라이언트와 통신할 수 있는 소켓을 리턴한다. 2: 클라이언트와 통신을 담당할 스레드를 생성한다. 이때 스레드 함수에 소켓을 넘겨준다. 3: 스레드 함수는 인자로 전달된 소켓을 SOCKET 타입으로 형변환(casting)...
멀티스레드를 이용하는 프로그램에서 스레드 2개 이상이 공유 데이터에 접근하면 다양한 문제가 발생할 수 있다.이러한 멀티스레드 환경에서 발생하는 문제를 해결하기 위해 일련의 작업을 스레드 동기화(thread synchronization)라 한다.
콘솔 응용 프로그램도 표준 윈도우 응용 프로그램의 한 형태다.
여기에서는 대표적인 전송 계층 프로토콜 중 하나인 UDP(User Datagram Protocol)를 이용한 소켓 프로그래밍을 다룰 것이다.
https://github.com/LEEBONGHAK/TCP-IPwindowsocket/tree/main/Chapter07/UDPIPv4 여기에서는 위에 작성된 UDP 서버-클라이언트의 구조와 관련 소켓 함수를 살펴볼 것이다. 먼저 UDP 소켓과 연관된 데이터 구조체를 살펴보자. (7-11 그림) 위 그림은 UDP 소켓과 연관된 운영체제의 데이터 구조...
여기에서는 IPv6를 지원하는 UDP 서버-클라이언트를 작성한 결과이다. 기존 IPv4 코드를 IPv6 코드로 변환하는 규칙을 다시 소개하면 다음과 같다. ws2tcpip.h 헤더 파일을 포함한다. 소켓 생성 시 AFINET 대신 AFINET6 를 사용한다. 소켓 주소 구조체로 SOCKADDRIN 대신 SOCKADDRIN6를 사용한다. 구조체...
TCP와 구별괴는 UDP의 특징으로 브로드캐스팅과 멀티캐스팅을 들 수 있다. 이를 이용하면 다자 간 통신을 쉽게 구현할 수 있다.
소켓 입출력 모델(socket I/O model)은 다수의 소켓을 관리하고 소켓에 대한 입출력을 처리하는 일관된 방식을 뜻한다.
Select 모델은 select() 함수가 핵심 역할을 한다는 뜻에서 붙인 이름이다. Select 모델을 사용하면 소켓 모드(블로킹, 넌블로킹)에 관계없이 여러 소켓을 한 스레드로 처리할 수 있다.
WSAAsyncSelect 모델은 WSAAsyncSelect() 함수가 핵심 역할을 한다는 뜻에서 붙인 이름이다.
WSAEventSelect 모델은 WSAEventSelect() 함수가 핵심 역할을 한다는 뜻에서 붙인 이름이다. WSAEventSelect 모델을 사용하면 소켓과 관련된 네트워크 이벤트를 이벤트 객체를 통해 감지한다.