NetWork-TCP 서버.클라이언트 동작원리

* 클라이언트/서버 (client/server)모델
- 두 개의 애플리케이션이 상호 작용하는 방식
- 서버가 먼저 실행하여 대기
- 클라이어느가 서버에게 요청을 하면 서버는 이 요청을 받아 처리

사용자 삽입 이미지


■ TCP 서버/클라이언트 동작 원리



 


1. listen     : 서버는 먼저 실행하여 클라이언트가 접속하기를 기다린다.

2. connect : 클라이언트가 서버에게 접속하여 데이터를 보낸다.(send)

3. accept   : 서버는 클라이언트 접속을 수용하고 클라이언트가 보낸 데이터를 받아서(recv) 처리한다.

4. send     : 서버는 처리한 데이터를 클라이언트에게 보낸다.

5. recv      : 클라이언트는 서버가 보낸 데이터를 받아서 자신의 목적에 맞게 사용한다.





■ TCP 서버/클라이언트 분석
 
▷ TCP/IP 소켓 통신을 위해 필요한 요소
 
- 프로토콜 : 소켓을 생성할 때 결정
 
- 지역 IP주소와 지역 포트 번호 : 서버 또는 클라이언트 자신의 주소
 
- 원격 IP주소와 원격 포트 번호 : 서버 또는 클라이언트가 통신하는 상대방의 주소

 
▷ 소켓 데이터 구조체
 



소켓이란?
* 소켓의 개념
 데이터 타입 관점
 통신 종단점 관점
 네트워크 프로그래밍 인터페이스 관점
을 가지는 데이터 구조인데 
양이 너무 방대하니 따로 다루겠다.
 

[프로그래밍/NetWork] - NetWork-소켓(Soket)

 


■ TCP서버 함수

 

 


▷ bind()
함수 : 서버의 지역 IP주소와 지역 포트 번호를 결정

listen()함수 : 소켓과 결합된 TCP포트 상태를 LISTENING으로 변경
(클라이언트 접속을 받아들일 수 있는 상태가 됨을 의미
 


▷ accept()
함수 : 접속한 클라이언트와 통신할 수 있도록 새로운 소켓을 생성하여 리턴

                       접속한 클라이언트의 IP주소와 포트 번호를 알려줌

 

■ TCP클라이언트 함수


   

 
▷ connect()함수 : 서버에게 접속하여 TCP프로토콜 수준의 연결 설정

 
 

데이터 전송 함수

 ▷ 소켓 데이터 구조체
 

 

 send()함수 :
 
 애플리케이션 데이터를 송신 버퍼에 복사함으로써 궁극적으로 하부 프로토콜에 의해 데이터가 전송되도록 함


 
 recv()함수 : 수신 버퍼에 도착한 데이터를 애플리케이션 버퍼로 복사


 

■ 메시지 설계시 고려 사항
  *
송신자
 
- 항상 고정 길이 데이터를 보낸다.
 
- 경계 구분을 위해 특별한 표시(EOR:End Of Record)를 삽입한다.
 
- 보낼 데이터 길이를 고정 길이 데이터로 보낸 후, 가변 길이 데이터를 이어서 보낸다.

 *
수신자
 
- 항상 고정 길이 데이터를 받는다.
 
- EOR이 나올 때까지 데이터를 읽은 후 처리한다.
 
- 고정 길이 데이터를 읽어 뒤따라올 데이터의 길이를 알아낸다. 이 길이만큼 데이터를 읽어 처리한다.


*공동작업
=>바이트 정렬
-  엔디안 방식으로 통일

=>멤버 정의  - 구조체(공용체, 클래스 포함)멤버의 시작 주소에 대한 제약 사항
                  
- #prgma pack 컴파일러 명령을 사용

이 글을 공유하기

댓글

Designed by JB FACTORY