NetWork-TCP 서버.클라이언트 동작원리
- 프로그래밍/NetWork
- 2011. 5. 16. 11:40
* 클라이언트/서버 (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 컴파일러 명령을 사용
이 글을 공유하기