본문 바로가기

Ethernet Chat Server/채팅 프로그램의 개요와 목적

채팅프로그램의 개요 및 목적

안녕하세요.
Edward Ahn입니다.
현재 WIZnet사에 근무하고 있으며, 지금부터 C언어를 처음접하시는 분께서는 저의 블로그를 통해 같이 배우며 많은 것들을 알아보도록 하겠습니다.
먼저, 우리가 C언어와 친해지기 위해서 채팅 프로그램을 만들어 보겠습니다.

만약, C언어의 기초를 모르시는 분들은 블로그 메뉴에서 C Programming란에서 C언어 기초편에 보시면 제가 링크한 사이트가 있으니 참고하셔서 같이 배우셨으면 좋겠습니다.

채팅프로그램의 목적은 W5500-EVB Evaluation Board를 활용하여 만드는 것에 목적을 둡니다. 그러기 위해 통신의 기본 개념부터 알아야 하는데요.. 아래의 설명은 통신의 기본 개념을 짚어보는 시간입니다. 글이 길더라도 참고 봐주시면 도움이 되리라 생각이 듭니다.

그리고 어디까지나 이 블로그의 글은 서로 같이 실력을 쌓아가는 목적일뿐 틀린 부분이 있다면 지적해주시면 감사하겠습니다. (댓글 달아주시면 감사하겠습니다.)

먼저 통신의 기본개념을 보기 전에 채팅프로그램이란 무엇인가. 라는 것이 생각에서 시작합니다.

채팅 프로그램이란 단순하게 생각하면 1:1(Peer to Peer) 방식으로 문자를 주고 받는 형식을 말합니다.

  즉, 컴퓨터(peer) <----> 컴퓨터(peer) 간 통신입니다.

그렇다면, 1:1방식은 무엇으로 어떻게 구현하여야 하는가? 가 우리의 주요 포인트겠죠?

우리가 구현할 방식은 Server 와 Client라는 Ethernet Socket 함수를 만들어서 서로 통신을 주고 받을 예정입니다.

여기서 사용되는 통신은 TCP(Transport Control Protocol) 통신이라는 것으로 Server(peer)와 Client(peer)가 연결을 하게 되고, 연결이 되면, 내가 보내고자 하는 Data를 주고 받는 것이 채팅프로그램의 목적입니다.

TCP가 무엇인지 모르는 분은 아래의 링크를 참고하세요.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/Documents/IntroTCPIP

간단하게 말씀드리면, TCP는 Request를 주면 Response를 받아야 하는 통신방식입니다.

TCP가 어떤 것인지 알아내셨다면, 이제 TCP(3-way handshake)을 어떻게 연결하는지에 대한 설명을 보겠습니다.

아래 내용 출처 - http://www.hacure.com/b/it_tip-90

TCP는 3 way handshaking! 이라 불립니다. 아래의 그림을 보시면,

1. Listen
WebServer가 포트를 열어놓고 사용자의 요청을 대기중인 상태
 
2. SYN-Sent
사용자가 WebServer 에 접속요청을 시도하는 단계(Request)
 
3. SYN-Recived
사용자 요청에 대한 응답으로 ACK와 SYN을 전송(Response)
 

4. ACK사용자는 다시 한 번 WebServer의 응답에 확인 메시지인 ACK를 전송

 
<! 세션연결이 되었으면 상호간 (웹클라이언트와 웹서버) 데이터를 주고받는다.
 
5. GET Document - PUSH
TCP스택 에서는 PUSH 옵션을 통해 빠른 처리를 요청 할 수 있으며 상위 프로토콜인 HTTP에서는 GET메소드를 이용하여 기본페이지를 요청하게 된다.
 
6. TCP check sum ACK
웹서버는 사용자요청 데이터에 대한 손실 및 훼손을 점검하고 이상없다는 ACK메시지를 전송한다.
 
7. 요청분석제공 – PUSH

웹서버는 요청문서를 사용자에게 전송한다.

8. TCP check sum ACK

사용자측에서도 웹서버 전송 데이터에 대한 손실 및 훼손을 점검하고 이상없다는 ACK메시지를 전송한다.

 
<! 필요한 데이터 주고받기를 완료하면 HTTP는 즉시 연결해제 작업을 수행한다.-->
 
 

1. FIN-WAIT1
사용자는 세션종결 요청을 위해 FIN 과 ACK를 전송한다.
(연결을 시도한자가 먼저 종결요청을 한다.)

2. Close-WAIT
세션종결 요청을 웹 애플리케이션에 전달한다.

3. FIN-WAIT2
웹 서버의 대답(응답)을 기다리는 중

4. LAST-ACK
웹 서버는 종결합의 의 의미로 FIN과 ACK를 전송한다.

5. TIME-WAIT
데이터(FIN,ACK)를 잘 받았다는 의미로 ACK를 웹 서버로 전송하게 된다.
회선 연결이 완전히 끊어진 상태는 아님! 늦게 도착할 데이터를 위해 일정시간 잠시 기다린다.

6. Close
회선이 완전히 끊어지게 된다.

여기까지가, TCP의 설명이었습니다. 이 부분을 이해하시지 못하셨다면, 다음 (윈도우 채팅프로그램)란 예제에서 확인해보시면 쉽게 이해가 가실거라 생각이듭니다.

그리고 다시 말씀드리자면, 이 블로깅의 목적은 W5500-EVB를 활용하여 채팅프로그램을 만드는데에 목적을 둡니다.

W5500-EVB의 개발 환경 구축은 전혁진 강사님의 블로그 - http://jindabang.net/2015/01/01/1-w5500%EC%9C%BC%EB%A1%9C-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-%EC%9D%B4%EB%8D%94%EB%84%B7-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95/
에서 확인해주셔서 개발환경 구축해주시면 되겠습니다.
1. LPCXpresso 설치
2. Flash Magic 설치
3. 신규 프로젝트 생성 방법
4. W5500 드라이버 포팅