책정리/열혈 TCP,IP 19

8장 도메인 이름과 인터넷 주소

Domain Name System IP주소와 도메인 이름 사이에서의 변환을 수행하는 시스템을 가리켜 'DNS(Domain Name System)'라 하며, DNS의 중심에는 DNS서버가 있다. 도메인 이름이란? 인터넷에서 서비스를 제공하는 서버들 역시 IP주소로 구분이 된다. 그러나 기억하기 쉽지 않아 기억하기 좋고 표현하기도 좋은 형태의 도메인 이름이라는 것을 IP주소에 부여해 사용하고 있다. DNS 서버 네이버의 IP주소인 222.122.195.5를 직접 입력하여 네이버의 메인페이지에 접속하는 것과 www.naver.com 의 입력틍 통해 접속하는 것에 어떤 차이점이 있는 것일까? 네이버의 메인 페이지에 접속한다는 점에서 차이가 없지만, 접속의 과정에는 차이가 있다. 도메인 이름은 해당 서버에 부여된..

7장 소켓의 우아한 연결종료

TCP 기반의 Half-close TCP에서는 연결과정보다 중요한 것이 종료과정이다. 연결과정에서는 큰 변수가 발생하지 않지만 종료 과정에서는 예상치 못한 일이 발생할 수 있기 때문이다. 일방적인 연결종료의 문제점 리눅스의 close 함수호출과 윈도우의 closesocket 함수호출은 완전종료를 의미한다. 완전종료라는 것은 데이터를 전송하는 것과 수신하는 것조차 불가능한 상황을 의미한다. 때문에 한쪽에서의 일방적인 close 또는 closesocket 함수호출은 경우에 따라서 우아해 보이지 못할 수 있다. 호스트A가 마지막 데이터를 전송하고 나서 close 함수의 호출을 통해서 연결을 종료하였다. 때문에 이후부터 호스트A는 호스트B가 전송하는 데이터를 수신하지 못한다. 결국엔 호스트B가 전송한, 호스트A..

6장 UDP 기반 서버/클라이언트

UDP에 대한 이해 TCP/IP 프로토콜 스택의 상위 두 번째 계층인 '전송(Transport) 계층'이 TCP와 UDP로 나뉜다. 이렇듯 데이터 송수신은 TCP소켓을 생성해서 TCP방식으로 송수신하는 방식과 UDP소켓을 생성해서 UDP방식으로 송수신하는 방식으로 나뉜다. UDP 소켓의 특성 UDP 소켓은 신뢰할 수 없는 전송방법을 제공한다 신뢰성만 놓고 보면 분명 TCP가 UDP보다 좋은 프로토콜이다. 하지만 UDP는 TCP보다 훨씬 간결한 구조로 설계되어있다. ACK와 같은 응답 메시지를 보내는 일도 없으며, SEQ와 같이 패킷에 번호를 부여하는 일도 없다. 때문에 상황에 따라서 TCP보다 훨씬 좋은 성능을 발휘한다. 물론 프로그래밍의 관점에서 보더라도 UDP는 TCP보다 구현이 용이하다. 계다가 U..

5장 TCP 기반 서버/클라이언트2

에코 클라이언트의 완벽 구현 에코 서버는 문제가 없고 에코 클라이언트만 문제가 있나요? 문제는 에코 서버에 있지 않고, 에코 클라이언트에 있다. 먼저 에코 서버의 입출력 문자을 보면 아래와 같다 while((str_len = read(clnt_sock, message, BUF_SIZE)) != 0 ) write(clnt_sock, message, str_len); 에코 클라이언트의 입출력 문장은 아래와 같다 write(sock, message, strlen(message)); str_len = read(sock, message, BUF_SIZE-1); 둘 다 read 함수와 write 함수를 반복 호출하는데 차이가 없다. 실제로 앞서 보인 에코 클라이언트는 자신이 서버로 전송한 데이터를 100% 수신한다..

4장 TCP 기반 서버/클라이언트1

TCP와 UDP에 대한 이해 TCP는 Transmission Control Protocol의 약자로써 '데이터 전송과정의 컨트롤'이라는 뜻을 담고 있다. TCP/IP 프로토콜 스택 다음 그림은 TCP/IP프로토콜 스택(Stack, 계층)을 보여준다 TCP/IP 스택이 총 네 개의 계층으로 나뉨을 알 수 있는데, 이는 데이터 송수신의 과정을 네 개의 영역으로 계층화했다는 의미로 받아들일 수 있다. 즉 '인터넷 기반의 효율적인 데이터 전송'이라는 커다란 하나의 문제를 하나의 덩치 큰 프로토콜 설계로 해결한 것이 아니라, 그 문제를 작게 나눠서 계층화하려는 노력이 시도되었고, 그 결과로 탄생한 것이 'TCP/IP 프로토콜 스택'인 것이다. 따라서 TCP 소켓을 생성해서 데이터를 송수신할 경우에는 다음 네 계층..

3장 주소체계와 데이터 정렬

소켓에 할당되는 IP주소와 PORT번호 IP는 Internet Protocol의 약자로 인터넷상에서 데이터를 송수신할 목적으로 컴퓨터에게 부여하는 값을 의미한다. 반면 PORT번호는 컴퓨터에게 부여하는 값이 아닌, 프로그램상에서 생성되는 소켓을 구분하기 위해 소켓에 부여되는 번호를 뜻한다 인터넷 주소(Internet Address) 인터넷에 컴퓨터를 연결해서 데이터를 주고받기 위해서는 IP주소를 부여 받아야 한다. IP주소체계는 다음과 같이 두 종류로 나뉜다 IPv4(Internet Protocol version 4)4바이트 주소체계IPv6(Internet Protocol version 6)16바이트 주소체계IPv4 기준의 4바이트 IP주소는 네트워크 주소와 호스트(컴퓨터를 의미함) 주소로 나뉘며, 주소..

2장 소켓의 타입과 프로토콜의 설정

소켓의 프로토콜과 그에 따른 데이터 전송 특성 프로토콜(Protocol)이란 무엇인가? 프로토콜이란 대화에 필요한 통신규약을 의미한다 컴퓨터 상호간의 대화에 필요한 통신규약 소켓의 생성 #include int socket(int domain, int type, int protocol); // 성공 : 파일 디스크립터 // 실패 : -1 domain : 소켓이 사용할 프로토콜 체계(Protocol Family) 정보 전달 type : 소켓의 데이터 전송방식에 대한 정보 전달 protocol : 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달프로토콜 체계(Protocol Family) socket 함수의 첫 번째 인자로, 생성되는 소켓이 사용할 프로토콜의 부류정보를 전달해야 한다. 이러한 부류정보를 가리켜 ..

1장 네트워크 프로그래밍과 소켓의 이해

네트워크 프로그래밍과 소켓의 이해 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고받을 수 있도록 하는 것이 네트워크 프로그래밍이다. 네트워크로 연결되어 있는 두 컴퓨터간에 데이터를 주고받기 위해 필요한 것 물리적인 연결 물리적인 연결을 기반으로 하는 소프트웨어적인 데이터의 송수신 방법 ( 운영체제에서 '소켓(Socket)'이라는 것을 제공 ) 소켓은 물리적으로 연결된 네트워크상에서 데이터 송수신에 사용할 수 있는 소프트웨어적인 장치를 의미한다. 전화기의 장만에 비유되는 socket 함수호출의 이해 전화기에 해당하는 소켓을 생성하는 함수 #include int socket(int domain, int type, int protocol); // 성공 : 파일 디스크립터 // 실패 : -1 반환..

목차

네트워크 프로그래밍과 소켓의 이해 네트워크 프로그래밍과 소켓의 이해 리눅스 기반 파일 조작하기 윈도우 기반으로 구현하기 윈도우 기반의 소켓관련 함수와 예제 소켓의 타입과 프로토콜의 설정 소켓의 프로토콜과 그에 따른 데이터 전송 특성 윈도우 기반에서 이해 및 확인하기 주소체계와 데이터 정렬 소켓에 할당되는 IP주소와 PORT번호 주소정보의 표현 네트워크 바이트 순서와 인터넷 주소 변환 인터넷 주소의 초기화와 할당 윈도우 기반으로 구현하기 TCP 기반 서버/클라이언트 1 TCP와 UDP에 대한 이해 TCP기반 서버, 클라이언트 구현 Iterative 기반의 서버, 클라이언트 구현 윈도우 기반으로 구현하기 TCP 기반 서버/클라이언트 2 에코 클라이언트의 완벽 구현 TCP의 이론적인 이야기 윈도우 기반으로 구..