새소식

DEV/Socket

Socket Blocking과 NonBlocking, 동기전송(synchronous)과 비동기전송(asynchronous)

  • -
728x90

1. Blocking과 Nonblocking 

 -  Blocking socket : socket()으로 생성되는 socket은 기본적으로 blocking socket.

block 될수 있는 system call 호출 시 block 될 수 있음

Blocking 상태일경우 어떤 작업도 실행하지 않는다. 이러한 단점을 보완하기 위해, Thread를 사용하거나 이벤트를 이용한다.

 

 Nonblocking socket : fcntl() 을 사용하여 Nonblocking socket로 변경 가능.

system call 사용시 block 되는 상황이면 -1 리턴. errno 가 EWOULDBLOCK 또는 EAGAIN으로 설정된다.

비동기 소켓은 읽고 쓰는 시점을 알수 없다.

 

2. Nonblocking socket 생성 예

fcntl() 사용 :

int nflag;

nflag = fcntl(sock_fd, F_GETFL, 0);

fcntl(sock_fd, F_SETFL, flag | O_NONBLOCK);

 

3. Blocking(이하 B)과 Nonblocking(이하 N)의 차이

 - read 

 B: read 버퍼가 비어 있을때, block (-> Blocking socket의 경우 read버퍼에 존재하는 데이터의 크기가 read시 요청한 크기보다 작은 경우라도 read 퍼버에 존재하는 데이터만큼 리턴되어 block 되지 않는다.)

 N: read 버퍼가 비어 있을때, -1 return, errno = EWOULDBLOCK/EAGAIN

 

- write 

 B: write 버퍼가 꽉 차있을때 block

 N: write 버퍼가 꽉 차있을 때, -1 return, errno = EWOULDBLOCK/EAGAIN

 

- accept 

 B: backlog(현재의 connection 요청 큐)가 비어 있을때 block

 N: backlog(현재의 connection 요청 큐)가 비어 있을때 -1 return, errno == EWOULDBLOCK/EAGAIN

 

- connect 

 B: connection 이 완전히 이루어질 때까지 block

 N: connection 이 완전히 이루어지지 않더라도 곧바로 return. 나중에 getsockopt로 connection이 완전히 이루어졌는지 확인 가능.

 

 

4. 동기 전송(synchronous)과 비동기 전송(asynchronous)

 - 동기식 전송은 한 단위의 문자가 아니라 미리 정해진 수만큼의 문자열을 한 묶음(Frame)으로 묶어서 일시에 전송하는 방법

  데이터와는 별도로 송신 측과 수신 측이 하나의 기준 클록으로 동기신호를 맞춰서 동작한다.

  수신 측에서는 클록에 의해 비트를 구별하는데, 동기식 전송을 위해서는 데이터와, 클록의 2회선이 필요로 한다.

  송신 측에서 데이터를 정상적인 속도로 보내면, 수신 측에서는 클록의 한 사이클 간격으로 데이터를 인식한다.

  동기 전송은 비동기에 비해 전송효율이 높으나, 수신 측에서 비트 계산해야 하고, 문자 조립하는 별도의 기억장치가 필요해진다.

   일반적으로 비동기 방식에 비해, 오버해드가 작고 고속의 데이터 전송이 가능하나, 비싸다.

 

 - 비동기식 전송은 데이터 보낼 때 동기신호를 포함시킨다.

  전송할 때, 시작 비트 -> 문자 데이터 -> 정지 비트의 순으로 문자 데이터를 전송

  1 문자씩 전송하는데, 전송하는 각 문자의 앞에 1비트의 스타트 비트와 1~2비트의 스톱 비트를 가진다.

  송신 측에서 짧은 시간 동안 몇 비트만을 연속으로 전송하고, 일 전한 휴지 시간을 가진다.

  비동기 방식은 짧은 데이터 전송에 주로 사용된다.

  구현이 간단하고 비용이 적게 들지만(전송속도가 느리기 때문에 일반 전화선도 사용 가능), 데이터 전송 시 시간 비트와 휴지 비트를 전송하기 때문에 많은 오버해드를 가진다.

 

5. 관련 단어들

- ATM(Asynchronous Transfer Mode)

 :데이터 통신에서 시간 순서보다는 제어 문자로 데이터 송수신이 제어되는 전송방법

 복합적인 정보를 셀단 위 고정 블록으로 분할, 다중화 후 통합 전송하는 비동기 전송 모드

- BPS(Bit per Second)

 :비동기 통신에서 데이터 전송 속도를 측정하는 단위로 1초에 전송한 비트수를 뜻함

- Full Duplex(전이중)

 :통신채널이 동시에 신호를 주고받을 수 있는 비동기 통신 프로토콜

- Half Duplex(반이중)

 :통신채널이 한 번에 하나의 신호만을 제어하는 비동기 통신

728x90

'DEV > Socket' 카테고리의 다른 글

소켓 관련 단어들 몇개  (0) 2021.06.23
TCP/IP 데이터 전송  (0) 2021.06.23
TCP/IP 개론  (0) 2021.06.23
Contents

Copied the posting URL.

Please sympathize with me if this article was helpful.