IP 공유기 연결 관련 질문입니다.

progsows의 이미지

안녕하세요. 제가 이번에 가정 내부와 외부 간 통신을

수행하는 어플을 만들어 보려고 하는데요.

IP 공유기를 사용하면 조금 쉽게 구현을 할 수 있지

않을까 생각이 듭니다. 근데 제가 IP 공유기를 사용한

적이 없어서 모르는 점이 많네요. 그래서 고수님들께

몇가지 질문을 여쭙니다.

그럼 우선 제가 생각하는 연결도를 그려보겠습니다.

영차~

A
|
+----- IP 공유기 ----- 인터넷
|
B 가정 <===> 외부

끙... 알아 보시겠는지요?

우선 컴퓨터 A와 B가 가정내에서 IP 공유기에 연결되어

있고, IP 공유기를 통해 외부로 연결 됩니다.

그럼 몇 가지 질문을 올립니다.

질문 1:
A와 B는 제 임의로 IP를 할당할 수 있습니까? 예를 들어

A는 192.168.0.1, B는 150.234.21.123 등으로요. 만약

그렇다면 A와 B간 통신을 하는 응용 프로그램을 작성하는

것은 매우 쉽겠죠.

질문 2:
만약 질문1과 같은 기능이 허용되지 않아서

A와 B가 IP 공유기로 부터 dhcp를 이용하여 IP를

배당받아야만 한다면 응용 프로그램에서 서로간에 어떻게

통신을 구현해야 할까요?

질문 3:
외부에서 보자면 A와 B가 같은 IP를 갖은 것으로 보일

것입니다 (하나의 IP 공유기에서 나온 내용이므로).

이것이 문제가 되지는 않습니까? 예를 들어 A가 외부의

서버에 요청한 내용에 대해 A가 응답을 받고, B가 외부의

서버에 요청한 내용에 대해 B가 응답을 받는데 문제가

없을까요?

아... 궁금한 점은 훨씬 더 많은데, 잘 정리가 안 되네요.

고수님들의 답변을 기다리고 있겠습니다.

그럼...

bugiii의 이미지

질문1 의 답변

공유기에 보통 스위칭 허브가 달려있습니다. 이 스위치에 물리는 A, B 는 같은 IP 대역을 사용해야 한다고 알고 있습니다. 예를 드신 192.168.0.x 대역은 C 클래스일 것이고 150.234... 도 C 나 뭐 그 이상일 수도 있겠지만 하여튼 서로 대역이 틀린 것이므로 좋은 (높은 레벨) 스위치가 아니면 서로 통신이 되지 않을 것 같습니다.

질문2 의 답변

질문의 요지가 서로 어떤 IP 를 할당 받았는지 모르니까 어디로 쏴야할지 모르겠다는 것으로 이해하겠습니다. 보통 윈도우 같은 경우에는 이것을 컴퓨터 브라우징이나 그런 걸로 해결하겠지만 보통의 경우 브로드캐스팅 정도로 충분히 알아낼 수 있다고 생각합니다.

질문1 과 질문2 의 내용을 보면 왜 같은 IP 대역을 사용하면 안되는지 궁금하고 서로 다른 대역을 사용해야 하는 이유가 있는지도 궁금합니다. 그냥 A 에 192.168.0.2 B 에 192.168.0.3 이렇게 지정해버리면 안되나요?

질문3 의 답변

말씀하신대로 외부에서는 하나의 IP 로 보입니다. 질문하신 문제 때문에 포트를 나눠서 이 포트로 오는 패킷은 특정 내부 IP 로 라는 포트 포워딩이라는 기술이 있습니다. NAT 라고도 합니다만 공유기들은 포트 포워딩이라고 많이들 합니다. 많이 쓰이는 게임이나 메신저의 경우에는 패킷 검사를 하거나해서 자체적으로 해결해주기도 합니다.

최초의 접속이 외부에서 공유기 안쪽 컴퓨터들로 들어올 때에는 포트 포워딩 등을 이용해서 해결하고, 최초의 접속이 내부에서 외부로 나가는 경우에는 문제될 것이 없습니다. 어떻게든 공유기가 해당 패킷들을 변조해서 알맞게 외부로 보내고 응답을 다시 변조해서 원래 보낸 내부 컴퓨터에 전달해줍니다.

이런 내용은 리눅스와 NAT 를 함께 검색해보시면 기본적인 개념과 실제 응용법 등을 이해하실 수 있습니다. wiki.kldp.org 에서도 검색해보시고 google 에도 많은 정보가 있을 겁니다.

그럼, 이만...

offree의 이미지

progsows wrote:
안녕하세요. 제가 이번에 가정 내부와 외부 간 통신을

수행하는 어플을 만들어 보려고 하는데요.

IP 공유기를 사용하면 조금 쉽게 구현을 할 수 있지

않을까 생각이 듭니다.
...
...

우선 해당 어플이 무엇인지 모르지만, 그 관점이 아닌, IP공유기 사용에 대한 관점에서 말씀을 드리겠습니다.

progsows wrote:

질문 1:
A와 B는 제 임의로 IP를 할당할 수 있습니까? 예를 들어

A는 192.168.0.1, B는 150.234.21.123 등으로요. 만약

그렇다면 A와 B간 통신을 하는 응용 프로그램을 작성하는

것은 매우 쉽겠죠.

해당 IP 를 할당할 수는 있습니다. 다만, 서로간의 통신시에는 문제가 있을 것입니다.(할당하는 의미가 없다는 것이죠.)

위처럼 서로 다른 IP 대역인경우가 그렇습니다.(단지 예를 든것이라면 모르지만요.)

같은 IP대역, C class 보통공유기가 192.168.0.xx 대의 C class 를 쓰니 그에 맞게 설정해서 사용하시면 될 것입니다.

progsows wrote:

질문 2:
만약 질문1과 같은 기능이 허용되지 않아서

A와 B가 IP 공유기로 부터 dhcp를 이용하여 IP를

배당받아야만 한다면 응용 프로그램에서 서로간에 어떻게

통신을 구현해야 할까요?

이부분은 만드시려는 응용프로그램에 대한 부분 같은데.. 통신하려는 해당 IP 를 알고 있으면 문제는 없을 듯 합니다.

질문1 이 가능하니 별문제가 없을 듯 하구요.

또한 dhcp 라고 해도, 특정 PC 에 동일 IP 를 지정하게 할 수도 있습니다.
매번 바뀌는 것이 아니라, 한번 지정이 되면, 계속 그 IP 로 할당받게 된다는 것이죠.

progsows wrote:

질문 3:
외부에서 보자면 A와 B가 같은 IP를 갖은 것으로 보일

것입니다 (하나의 IP 공유기에서 나온 내용이므로).

이것이 문제가 되지는 않습니까? 예를 들어 A가 외부의

서버에 요청한 내용에 대해 A가 응답을 받고, B가 외부의

서버에 요청한 내용에 대해 B가 응답을 받는데 문제가

없을까요?

...
...

A 와 B 는 구분이 가능합니다.

공유기 에서 포워딩 부분을 보시면, 좋을 듯 합니다.

더 자세한 설명은 다른 분들이 보충해 주시기 바랍니다.

그럼.

사용자가 바꾸어 나가자!!

= about me =
http://wiki.kldp.org/wiki.php/offree , DeVlog , google talk : offree at gmail.com

bugiii의 이미지

3분차이로 너무 똑같은 답변이... -_-;

progsows의 이미지

bugiii 님의 답변 감사합니다. 덕분에 궁금증이

많이 풀렸습니다. 제가 예로 든 A와 B의 IP 주소는

딱히 어떤 이유가 있어서 그렇게 대역차이를 둔 것이

아닙니다. 그냥 이것도 가능한지 싶어서요 ^^;

그리고 질문2 의 답변에서 한 가지 해법으로 제시하신

브로드캐스팅이라하면 A에서 '나는 A 인데 IP 주소는

뭐' B에서 '나는 B 인데 IP 주소는 뭐' 하는 것을 서로가

catch 해서 상대의 주소를 인식하는 방식인가요?

바쁘신 시간 쪼개셔서 답변을 해 주셔서 정말 감사

합니다~

bugiii의 이미지

서로 자기 자신을 알리는 것도 한 방법이겠구요.

다르게 생각해본다면, 공유기 밑의 모든 컴퓨터들이 특정 UDP 포트를 감시하도록 하고, 어떤 컴퓨터가 이 포트로 브로드캐스팅하면 (스위치 밑단의 모든 컴퓨터들에게 보내니까) 응답하도록 해주면 그 패킷의 출발지에 IP 가 묻어서 오고 그 패킷에 인식번호나 이름 정도를 포함시키면 상대방을 인식할 수 있지 않을까 합니다.

필요할 때 브로드 캐스팅해서 알아보고 아~ 보내야 할 컴퓨터 IP 가 그거구나 하고 나서 통신을 시작하면 괜찮을 것 같습니다.

익명 사용자의 이미지

감사합니다~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.