[지식창고]/네트워크

[ 컴퓨터 네트워크 ] 2.8 socket programming with UDP and TCP

개발새발주발 2023. 4. 2. 16:51
728x90

 

1. Socket Programming 

goal : 소켓을 이용하여 통신하는 클라이언트- 서버 애플리케이션을 구축하는 방법을 배울 것이다 ! 

소켓 : 데이터를 주고 받기 위한 인터페이스를 제공하는 소프트웨어 모듈이며 클라이언트와 서버 간의 데이터 전송을 안정적으로 처리할 수 있도록 도와준다 !

'문'과 같은 역할을 한다고 생각하면 된다 ~ 애플리케이션 프로세스와 end-end간 전송 프로토콜 사이의 문! 

ex. 소켓은 클라이언트와 서버 간의 통신을 가능하게 해주는과 같은 역할을 한다. 이 문을 통해 애플리케이션 프로세스와 종단 (end-end) 간 전송 프로토콜 간에 데이터를 주고받을 수 있다. 소켓은 통신을 위한 인터페이스를 제공하며, 클라이언트와 서버 간의 데이터 전송을 안정적으로 처리할 수 있도록 도와준다 ! 

 

Two socket types for two transport services(두 가지 전송 서비스를 위한 두 가지 소켓 타입) : 

  • UDP: Unrealiable Datagram → 신뢰할 수 없는 데이터그램 
  • TCP : reliable, byte stream-oriented → 신뢰성이 있으며, byte stream중심 

응용 프로그래밍 예시(TCP 소켓 사용) :

  1. 클라이언트는 키보드에서 문자열(데이터)을 읽고 해당 데이터를 서버로 전송한다.
  2. 서버는 데이터를 수신하고 문자를 대문자로 변환한다.
  3. 서버는 수정된 데이터를 클라이언트로 보낸다
  4. 클라이언트는 수정된 데이터를 수신하고 해당 줄을 화면에 표시한다. 

* 응용 프로그램은 클라이언트와 서버 간에 데이터를 주고 받는 단순한 예시이다 ! 

클라이언트는 사용자 입력을 서버로 보내고, 서버는 해당 데이터를 수신하여 수정한다. 그리고 다시 수정된 데이터를 클라이언트로 보내어 클라이언트가 해당 데이터를 화면에 출력한다. 이 예시에서는 TCP소켓을 사용하여 데이터를 주고 받는다 (TCP는 신뢰성이 있기 때문에, 데이터의 손실이나 손상 없이 안정적으로 전송될 수 있다) 

 


2. Socket Programming 

Socket programming with UDP 

UDP : 클라이언트 - 서버 간 연결이 없다 !  '던져두고 자기가 할 일 한다'고 생각하면 이해하기 쉽다 

  • 데이터를 보내기 전 handshaking 과정이 없음 (데이터를 전송하기 전 클라이언트-서버 간에 연결 설정 과정) 
  • sender는 각각의 packet에 IP주소와 포트 번호를 명시적으로 붙여서 전송한다. 
    → 전송할 데이터에 대한 IP주소와 포트 번호가 각각의 패킷에 명시적으로 붙어서 전송된다.
  • UDP에서 수신된 패킷에서 수신자(rcvr)는 보내는 측(sender)의 IP주소와 포트 번호를 추출하여 데이터를 처리한다. 

UDP : 데이터를 전송할 때 전송 중에 손실되거나, 전송 순서가 바뀔 수 있다(out-of-order). → 데이터를 보내는 측에서 전송 순서나 오류 검사 등을 수행하지 않기 때문임 ! 

 

응용프로그램 관점 : 

UDP를 이용하여 서버 간에 바이트그룹(datagrams)을 전송할 수 있다 

* 하지만 이는 신뢰성이 없는 전송 방식임 → 데이터 손실이나 순서 변경이 발생할 수 있다.

 

UDP를 이용한 클라이언트- 서버 소켓 interaction 

서버 : 

1. 서버는 소켓을 생성하고 해당 소켓의 포트 번호를 x로 지정한다.

2. 클라이언트로부터 전송된 datagram을 서버 소켓에서 읽습니다. 

3. 서버는 클라이언트 주소와 포트 번호를 지정하여 응답을 클라이언트에게 보낸다

 

클라이언트 :

1. 클라이언트는 소켓을 생성한다.

2. 서버의 IP주소와 포트 번호를 지정한 datagram을 생성하고, 해당 datagram을 클라이언트 소켓을 통해 전송한다. 

3. 서버로부터 전송된 datagram을 클라이언트 소켓에서 읽는다. 

4. 클라이언트는 전송을 완료하고 소켓을 닫는다. 

 

UDP 소켓 통신 예시이다.

클라이언트 - 서버를 파이썬으로 구현했다. 이부분에 대해서는 TCP와 함께 자세히 다음 포스팅에서 다루어 보겠다. 

 


Socket programming with TCP 

1. 클라이언트는 서버와 연결해야'만' 한다

  • server process must first be running : 서버 프로세스는 먼저 실행되어야한다. 
  • 서버는 클라이언트의 연락을 기다리는 소켓(door)을 만들어야한다. 

2. 클라이언트는 다음과 같이 서버에 연락한다 ! 

  •  IP 주소, 서버 프로세스의 포트 번호를 지정하여 TCP 소켓을 만든다
  • 클라이언트가 소켓을 만들 때 : 클라이언트 TCP는 서버 TCP에 연결을 설정한다. 
  • 클라이언트로부터 연락을 받으면, 서버 TCP는 특정 클라이언트와 통신하기 위해 새로운 소켓을 만든다 ! 
    - 서버는 여러 클라이언트와 대화할 수 있다. 
    - source 포트 번호는 클라이언트를 구별하는 데 사용된다 

3. 응용 프로그램 관점 : 

TCP는 클라이언트와 서버 간 신뢰성이 있고 순서대로 바이트 스트림 전송('파이프')을 제공한다. 

 

 

 

TCP를 이용한 클라이언트- 서버 소켓 interaction 

서버 : 

1. 서버는 수신 대기용으로 소켓을 생성하고, 해당 소켓의 포트 번호를 x로 지정한다. 

2. 클라이언트의 연결 요청을 대기하고, 연결이 수립되면 새로운 소켓을 생성한다. 

3. 연결된 소켓에서 요청을 읽어들인디ㅏ.

4. 연결된 소켓에 응답을 보낸다. 

5. 연결된 소켓을 닫는다.

 

 

클라이언트: 

1. 클라이언트는 소켓을 생성한다.

2. 서버의 IP주소와 포트 번호를 지정한 후, 해당 소켓으로 요청을 보낸다. 

3. 서버로부터 전송된 응답을 읽어들인다. 

4. 연결을 완료하고 소켓을 닫는다. 

 

 

 

 


[출처 및 참고]

 

https://seolin.tistory.com/97

한국항공대학교 「컴퓨터 네트워크」 강의 자료