SYSTEM PROGRAMMING

TCP/IP 소켓 프로그래밍 02. 소켓의 타입과 프로토콜의 설정

뉴암스테르담 2015. 8. 5. 21:23


TCP/IP 소켓 프로그래밍 02. 소켓의 타입과 프로토콜의 설정.  시스템프로그래밍 

2013.03.15. 22:04  수정  삭제

복사http://blog.naver.com/pwk0810/40183958877

전용뷰어 보기

02-1. 소켓의 프로토콜과 그에 따른 데이터 전송 특성

 

+ 프로토콜(protocol) 이란 무엇인가?

 

 

  • 멀리 떨어져 있는 두사람의 대화를 주고 받기 위해서는 나름의 대화방법을 결정해야 한다. 전화? 문자 메시지?
  • 이경우 사용한 프로토콜은 전화/ 문자 메시지가 될것이다.
  • 프로토콜 : 컴퓨터 상호간의 대화에 필요한 통신 규약

+ 소켓의 생성
  •  int socket(int domain, int type, int protocol);
    • domain : 소켓의 사용할 프로토콜 체계 전달
    • type : 소켓의 데이터 전송 방식에 대한 정보 전달
    • protocol : 두컴퓨터간 통신에 사용되는 프로토콜 정보 전달

+ 프로토콜 체계 ( Protocol Family )
  • PF_INET   : IPv4 인터넷 프로토콜 체계
  • PF_INET6 : IPv6 인터넷 프로토콜 체계
  • PF_LOCAL : 로컬 통신을 위한 UNIX 프로토콜 체계
  • PF_PACKET :LOW LEVEL 소켓을 위한 프로토콜 체계
  • PF_IPX : IPX 노벨 프로토콜 체계
+ 소켓의 타입
  • 소켓의 데이터 전송 방식을 의미 
  • 첫번째 인자로 전달된 프로토콜 체계가 전달되었다고 해서 데이터 전송 방식까지 결정되는 것은 아니다.  ( 서버간에도 UDP 소켓 가능 )
+ 연결 지향형 소켓 ( SOCK_STREAM )
  • 중간에 데이터가 소멸되지 않고 목적지까지 전송된다.
  • 전송 순서대로 데이터가 수신된다.
  • 전송되는 데이터의 경계(Boundary) 가 존재하지 않는다.

  • 라인상에 문제가 없다면 데이터가 소멸되지 않고 전송을 보장받을 수 있다.
  • "사탕 100개가 여러번에 걸쳐서 보내졌다. 그러나 받는 사람은 사탕 100개를 순서대로 쌓은 다음 이를 한번에 봉지에 담아갔다.
  • 데이터를 수신하는 컴퓨터가 세번의 세번의 write 함수 호출을 통해서 총 100 바이트를 전송하였다. 그런데 데이터를 수신하는 컴퓨터는 한번의 read 함수호출을 통해서 100 바이트를 전부 수신하였다.
  • 데이터를 송수신하는 소켓은 내부적으로 버퍼,  바이트 배열을 지니고 있다.
  • 소켓에 전송되는 데이터는 일단 이 배열에 저장
  • 데이터가 수신되었다고 해서 바로 read 함수를 호출 하는 것이 아님.
  • 배열의 용량을 초과 하지 않는 한 데이터가 채워진 후 한번의 read 함수 호출로 데이터를 전부 읽어 들일수도 있으며
  • 반대로 한번의 write 함수 호출로 전송된 데이터 전부를 여러번의 read 함수 호출로 읽어 들일수도 있다.
  • 때문에 연결 지향형 소켓은 데이터의 경계가 존재하지 않는 다고 말하는 것.

  • 소켓에 존재하는 버퍼가 꽉 차면?
    • 버퍼에 수신된 데이터는 read 함수 호출을 통해서 데이터가 읽어지면 읽혀진 만큼 버퍼에서 비워지게 됨.
    • read 함수 호출로 읽어지는 양보다 많은 양의 데이터가 수신되면 버퍼가 꽉 차게 되어 소켓은 더 이상 데이터를 수신할 수 없게 된다.
    • 이경우에도 데이터가 소멸되는 일은 발생하지 않는데, 데이터를 전송하는 영역의 소켓의 더이상 데이터를 전송하지 않기 때문.
    • 연결 지향형 소켓은 자신과 연결된 상대 소켓의 상태를 파악해 가면서 데이터를 전송.
  • 소켓대 소켓 연결은 반드시 1대 1이어야 한다.
  • 신뢰성 있는 순차적인 바이트 기반의 연결 지향 데이터 전송 방식의 소켓

+ 소켓의 타입 2 : 비연결지향형 소켓 ( SOCK_DRAM )

  • 전송된 순서에 상관없이 가장 빠른 전송을 지향한다.
  • 전송된 데이터는 손실의 우려가 있고 , 파손의 우려가 있다.
  • 전송되는 데이터의 경계(Boundary)가 존재한다.
  • 한번에 전송할 수 있는 데이터의 크기가 제한된다.
  • 신뢰성과 순차적 데이터 전송을 보장하지 않는, 고속의 데이터 전송을 목적으로 하는 소켓

+ 연결 지향형 소켓 ! TCP 소켓의 예


02-2. 윈도우 기반에서 이해 및 확인하기

 SOCKET socket(int af, int type , int protocol);