(예전에 정리해 놓은것 하드 뒤적거리다가 발견해서 올림)
___________________________________________________________________
네트워크 소켓프로그래밍 일반(Network Socket Programming Guide)
___________________________________________________________________
-------------------------------------------------------------------
[!] BSD계열의 Internet 프로토콜을 기반으로 한내용이다.
소켓을 구현하고자하는 Process는 동작 형태에 따라서 Server,Client로
뷴류되고 프로토콜 형태에 따라서 연결지향인 TCP(가상회선을 이용하여
항상 연결이 되어 있는것처럼 한다),비연결형인 UDP로 구분될수 있다.
소켓API는 표준화를 따르므로 o.s플랫폼에 상관없이 서로 이식가능하다.
Server:요청한 일을 처리하거나 요청을 기다리는 프로세스나 컴퓨터
예) 은행창구 직원
Client:서버의 기능을 사용하여 결과를 얻고자하는 프로세스나 컴퓨터
예) 은행고객
[그림] 연결지향 프로토콜(TCP)의 소켓동작의 예
<Server>
+---------+
|socket() |
+---------+
|bind() |
+---------+
|listen() | <Client>
+---------+ +----------+
|accept() | | socket() |
+---------+ +----------+
| . | | |
| | +----------+
| . |<------------- | connect()|
+---------+ +----------+
|read() |<------------- | write() |
+---------+ +----------+
| . | | |
| . | | |
+---------+ +----------+
|write() | ------------> | read() |
+---------+ +----------+
|close() | | close() |
+---------+ +----------+
- 설명:Server 는 먼저 수행되어 있고 client의 요청(연결요청)
이 있을때까지 accept()에서 리턴되지 않는다.
client가 Server가 bind한 port로 connect를 시도한다.
연결이 되면 Server의 accept()에서 빠져나오며
read()상태에 들어간다.
client가 write()한후 네트워크 속도와관련되어 Server가
이것을 read()한후 사용자처리를 한후 write()로
client에 전송하게 된다.
accept()이후부분은 보통 fork()를 수행한 child Server가
업무처리를 하게 하고 Parent는 중개역할만 담당한다.
[그림] 비연결 프로토콜(UDP)의 소켓동작의 예
<Server>
+----------+
|socket() |
+----------+
|bind() | <Client>
+----------+ +-----------+
|recvfrom()| | socket() |
+----------+ +-----------+
| . | | bind() |
+----------+ +-----------+
| . |<------------- | sendto() |
+----------+ +-----------+
|sendto() | ------------> | recvfrom()|
+----------+ +-----------+
|close() | | close() |
+----------+ +-----------+
Association(주소 연계)
상대방 호스트와 통신하기위해 기본적으로 필요한 정보 즉,
프로토콜과 인터넷주소,포트 등을 모두 포함하여 실제적으로
통신이 가능하도록 5개의 항목으로 연계를 구성한다.
{프로토콜,Local Host주소,Local Port,Remote Host주소,Remote Port}
예>{TCP,210.106.81.35 2002,203.236.117.74,2002}
-Socket Address Structure(소켓주소구조체)
소켓api함수에서 사용되는 구조체이다.
#include <netinet/in.h>
struct in_addr{
u_long s_addr;//32bit network byte order(big endian)
};
#include <sys/socket.h>
struct sockaddr{
u_short sa_family; //주소군
char sa_dat[14]; //주소관련내용
};
>sockaddr_in와 크기가 같으며(16bytes) 해당내용도 같다.
>sa_family = AF_UNIX
AF_INET (Internet 규약)
AF_NS
AF_IMPLINK
#include <netinet/in.h>
struct sockaddr_in{
short sin_family;
u_short sin_port; //포트번호
struct in_addr sin_addr; //32비트 인터넷주소
char sin_zero[8]; //예약
};
통신규약을 설정한다.
주소연계중 프로토콜을 지정하는역할
int socket(int family,int type,int protocol);
family : AF_INET
type : 소켓의 Type을 지정한다
SOCK_STREAM 연결형소켓
SOCK_DGRAM 비연결형 udp소켓
SOCK_RAW
SOCK_SEQPACKET
SOCK_RDM
소켓에 주소와 포트를 부여한다.
주소연계중 Local의 주소와 포트를 지정하는역할
int bind(int sockfd,struct sockaddr *myaddr,int addrlength);
E.A.S.T.W.O.O.D Nonstop Quasar KimKyungRae 1998.
(예전에 정리해 놓은것 하드 뒤적거리다가 발견해서 올림)
'Server | Network' 카테고리의 다른 글
Man for Pthread: Basic Routines (0) | 2011.02.08 |
---|---|
예전의 CGI 방식의 서버 프로그램 C 예제소스 (0) | 2011.01.27 |
네크워크 개념(Conception of Network) (0) | 2011.01.27 |
Daemon Process 작성시 주의사항 (1) | 2011.01.27 |
고성능 네트워크 서버모델 서버엔진 개발기술.. (0) | 2011.01.15 |