NetWork-소켓(Soket)

* 소켓의 개념
=> 데이터 타입 관점
     운영체제가 통신을 위해 관리하는 데이터를 간접적으로 참조할 수 있도록 만든 일종의 핸들
     생성과 설정 과정이 끝나면 이를 이용하여 통신과 관련된 다양한 작업을 할 수 있는 간편한 데이터 타입

=> 통신 종단점 관점
     소켓은 통신을 위해 필요한 여러 요소의 집합체 (ex. 사용할 프로토콜, 송수신측 IP주소 및 포트 번호)
     애플리케이션은 자신의 소켓이 상대방의 소켓과 연결된 것으로 생각하고 데이터를 교환
 
=>네트워크 프로그래밍 인터페이스 관점
    애플리케이션과 전송계층 사이에 위치하는 것으로 간주하며 통신 양단이 모두 소켓을 사용할 필요는 없음


* 윈속 라이브러리 추가

사용자 삽입 이미지


* 소켓 주소 구조체(Socket Address Structures)
- 네트워크 프로그램에서 필요로 하는 주소 정보를 담고 있는 구조체
- 다양한 소켓 함수의 인자로 사용
- 주소 체계에 따라 다양한 형태가 존재(TCP/IP => SOCKADDR_IN,  lrDA => SOCKADDR_IRDA)
- 기본형은 SOCKADDR 구조체


* SOCKADDR 구조체
사용자 삽입 이미지

- sa_family : 주소 체계를 나타내는 상수 값
                  ex) TCP/IP 프로토콜 => AF_INET
 

- sa_data : 해당 주소 체계에서 사용하는 주소 정보
                 ex) TCP/IP 프로토콜 => IP주소와 포트번호


* 소켓구조체의 특이한 케이스들 (다양한 형태중 많이 쓰는것들만 정리)
1) SOCKADDR_IN 구조체
사용자 삽입 이미지
- sin_addr : 32비트
- in_addr 구조체


2) IN_ADDR 구조
사용자 삽입 이미지



* 소켓 주소 구조체 비교사용자 삽입 이미지



* 바이트 정렬(byte ordering)

ex) 예전글을 참조한다.
[프로그래밍/운영체제] - 빅엔디안,리틀엔디안 정리 
 

- 빅 엔디안 방식(Big-Endian) : 대소비교가 빠름, 슈퍼컴퓨터나 네트워크 등에 사용
리틀 엔디안 방식(Little-Endian) : 산술 연산이 빠름, Intel칩이나 호스트 등에 사용
  ex) 원 데이터가 0x12345678이라면...
 

사용자 삽입 이미지









* 네트워크 애플리케이션에서 바이트 정렬 방식을 고려해야 하는 경우
- 프로토콜 구현을 위해 필요한 정보
  : IP주소 => 빅 엔디안
  : 
포트번호 => 빅 엔디안
 

- 애플리케이션이 주고 받는 데이터
  빅 엔디안 또는 리틀 엔디안으로 통일
    
* 네트워크 바이트 정렬 => 빅 엔디안 방식을 사용한다.
* 호스트 바이트 정렬 => 시스템이 사용하는 고유한 바이트 정렬 방식(Intel칩 사용으로 주로 리틀엔디안방식)



* 바이트 정렬 함수(유닉스 호환)
사용자 삽입 이미지


 * 바이트 정렬 함수(윈속 확장)
사용자 삽입 이미지


* SOCKADDR_IN 구조체의 바이트 정렬 방식
사용자 삽입 이미지


* IP 주소변환 함수

 문자열 형태로 IP주소를 입력받아 32비트 숫자(네트워크 바이트 정렬)로 리턴
사용자 삽입 이미지



 
 32비트 숫자(네트워크 바이트 정렬)로 IP주소를 입력받아 문자열 형태로 리턴 

사용자 삽입 이미지





출저:
http://alisa2304.tistory.com/31

이 글을 공유하기

댓글

Designed by JB FACTORY