-자료출처-네이버지식캐스트
TCP
TCP(Transmission Control Protocol)는 IP 프로토콜 위에서 연결형 서비스를 지원하는 전송계층 프로토콜로, 인터넷 환경에서 기본으로 사용한다. TCP에서 제공하는 주요 기능은 다음과 같다. 연결형 서비스를 제공한다.전이중(Full Duplex) 방식의 양방향 가상 회선을 제공한다.신뢰성 있는 데이터 전송을 보장한다. 인터넷 환경에서 사용하는 TCP/IP의 계층적 구조를 보여준다. 인터넷에서 네트워크 계층의 기능을 제공하는 프로토콜은 IP며, IP 프로토콜 위에서 실행되는 전송 계층 프로토콜은 서비스의 유형에 따라 두 종류로 구분한다. TCP는 연결형 서비스를 지원하는 프로토콜이고, UDP는 비연결형 서비스를 지원하는 프로토콜이다. 전송 계층 프로토콜은 운영체제 내부 기능으로 구현된다. 따라서 이 서비스를 사용하려면 상위 계층에서 시스템 콜이라는 프로그램 호출 방식을 이용해야 한다.
전송 계층 프로토콜인 TCP와 UDP 위에는 세션 계층, 표현 계층, 응용 계층의 기능을 지원하는 다양한 응용 프로그램이 존재할 수 있다. 응용 프로그램이 해당 응용 환경에 적합한 기능을 지원하기 위해 연결형 서비스가 필요한지, 비연결형 서비스가 필요한지를 판단해 TCP와 UDP를 선택한다. TCP와 UDP 선택에서는 단순히 신뢰성이나 연결 유무의 차이뿐만 아니라, 이러한 차이가 응용 프로그램의 구축에 어떤 영향을 끼치는지를 이해해야 한다. 응용 프로그램의 종류는 아주 다양하다. 파일 전송 기능, 메일 송수신 기능 등은 일반 사용자가 가장 많이 이용하는 인터넷 서비스다. 호스트의 이름과 주소를 변환하는 네임 서버 기능은 사용자가 의식하지는 못하지만 가장 많이 이용하는 인터넷 서비스다. 이에 대한 자세한 내용은 뒤에서 다룬다. 마지막의 NFS(Network File System)는 원격 분산 파일 시스템 기능을 지원하는 것으로, 호스트 사이의 파일 공유와 유사한 기능을 제공한다. 네트워크 계층의 아래에는 데이터 링크 계층을 지원하는 X.25, 이더넷, 위성 통신 등 다양한 종류의 네트워크 인터페이스가 존재할 수 있다.
TCP에서는 데이터를 세그먼트(Segment)라는 블록 단위로 분할해 전송한다. 전송되는 블록의 크기는 네트워크 부하 정도, 윈도우 크기 등의 영향을 받으며, 가변 크기를 지원한다. TCP에서는 세그먼트를 하나의 단위로 간주하여 순서 번호를 관리하지 않는다. 대신 세그먼트에 실려 전송되는 데이터의 바이트 개수를 순서 번호에 반영한다.
UDP
소켓
AF_UNIX로 표시되는 유닉스 주소 체계는 한 호스트 내부에서 실행되는 프로세스 사이의 통신을 지원한다. 사용하는 주소 체계는 파일 시스템의 경로명을 기반으로 한다. 다음 구조체는 유닉스 주소 체계에서 주소를 표현하는 방법이다. sockaddr_un 구조체는 두 개의 필드를 사용한다. 우선 sun_family 필드는 유닉스 주소 체계를 의미하는 AF_UNIX 값을 갖는다. sun_path 필드에는 소켓을 구분하는 주소를 표시하기 위하여 정의되었으며, 파일 시스템의 경로명을 기록한다.
유닉스 주소 체계를 사용하는 통신 방식은 앞서 설명한 것처럼 하나의 호스트에서 실행되는 프로세스 사이의 통신만 지원한다. 서로 다른 호스트에서 실행되는 프로세스 사이의 통신을 지원하려면 인터넷 주소 체계 방식인 AF_INET을 사용한다. AF_INET 방식에서는 소켓이 생성되는 호스트의 32비트 IP 주소와 16비트의 포트 번호를 조합하여 소켓 주소를 표현한다. 인터넷 주소 체계를 지원하는 sockaddr_in 구조체는 모두 4개의 필드를 정의한다. sin_family 필드는 인터넷 주소 체계를 의미하는 AF_INET을 지정한다. sin_zero 필드는 사용되지 않으며, sin_addr과 sin_port 필드에는 주소를 표시한다. sin_addr에는 호스트의 IP 주소를 기록하고, sin_port에는 포트 번호를 기록한다. IP 주소가 보관되는 sin_addr 필드는 in_addr 구조체에 의해 크기가 32비트인 u_long 타입의 s_addr 필드로 재지정된다.
통합 주소 체계 소켓 주소 체계는 사용하는 프로토콜의 종류에 따라 달라진다. 따라서 운영체제에서 제공하는 통신 프로토콜의 수가 증가하면 이에 비례하여 주소 체계의 표현 방식도 증가한다. 소켓 주소의 사용은 동일한 소켓 시스템 콜을 통해 이루어지는데 의미는 같으나 형식이 다른 여러 구조체를 하나의 함수에서 수용하는 것은 문법적으로 불가능하다. 따라서 여러 소켓 구조체를 통합해 일반 구조체 하나로 정의할 필요가 있다. 다음과 같이 sockaddr이라는 공통 주소 체계를 지원하는 구조체를 사용해 소켓 주소 표현 방법을 정의한다. 이 구조체는 단순히 프로그래밍 환경에서의 문법적인 측면만을 고려하여 정의한 것이다. sockaddr 구조체에 의해 할당되는 공간의 크기는 유닉스나 인터넷 주소 체계 같은 다른 주소 체계에서 필요한 공간보다 커야 한다. 예를 들어, 인터넷 주소 체계를 이용해 소켓 프로그래밍을 하는 경우에 소켓 변수는 다음과 같이 인터넷 주소 체계에서 제공하는 sockaddr_in 구조체를 사용한다. 이후, 주소를 보관하는 addr 변수에는 실제로 인터넷 주소 체계에서 사용하는 IP 주소와 포트 번호 값을 지정한다. 맨 아래 행의 소켓 관련 시스템 콜의 하나인 bind( )는 모든 통신 프로토콜에서 공통으로 사용한다. 따라서 주소 값이 입력되는 두 번째 매개변수를 특정 주소 체계의 구조체로 정의할 수 없다. 예처럼 공통 주소 체계인 sockaddr 구조체로 형 변환하여 문법의 통일성을 유지해야 한다. 결과적으로 bind( ) 함수의 두 번째 매개변수는 struct sockaddr 유형의 포인터 변수만 오도록 정의되었으나, 실제로 사용되는 변수는 각 프로토콜에서 정의되는 주소 체계 유형으로 선언된다. 위의 예에서는 addr 변수를 통해 인터넷 주소 체계인 sockaddr_in 구조체에 의해 소켓이 생성되지만, 시스템 콜에서는 문법적으로 sockaddr 구조로 표현한다.
'IT 백과' 카테고리의 다른 글
[C#] Namespace - 네임스페이스 (0) | 2017.02.06 |
---|---|
[MSSQL] View 한계 / 제한 / limitations (0) | 2017.01.23 |
IoT - 사물인터넷 (0) | 2016.12.30 |
CPU 컴퓨터의 CPU 란?? (0) | 2016.12.28 |
애플 - IOS (0) | 2016.12.27 |