[완료] 네트워크 일반 : 패킷 전송 시, 호스트가 subnet을 이용하여 LAN, WAN으로 보낼 경우

sabihanl의 이미지

현재 gateway로 데이터를 보내는 프로그램을 짜고 있는데요

프로그램 구현이야 어찌어찌 한다고 쳐도.. 갑자기 궁금한게 있어서
인터넷좀 찾아보고 어쩌고 하다보니 개념만 더 헤깔려서 개념 정리 요청 차원에서 질문 드립니다.
물론 구글링좀 하면 나오는데 왜 질문하냐시면 죄송하다는 말씀 밖에 드릴 수가 없는데
한시간이고 두시간이고 찾자니 코딩 할 내용은 많고 뭐.. 변명 입니다 ( _ _;;

일단 제가 알기로는 호스트가 데이터를 전송 할 경우 subnet을 이용하여
Gateway 외부로 내보낼 데이터인지 아니면 같은 subnet인지 알 수 있기 때문에
같은 subnet에 있는 호스트로는 직접 보낸다.
subnet으로 masking했을 경우 나오는 값이 다르면 gateway로 데이터를 보낸다.
여기 까지는 알겠습니다.

그렇다면
호스트는 같은 subnet의 상대로 데이터를 보낼 경우 그냥 IP패킷에 dst ip를 적어주면
이 데이터가 유니캐스트로 간다.. 라고는 하지만 실제적으로 이 패킷이 LAN상에서는 브로드 캐스트로 돌아다니는 것인가요?
즉 같은 LAN상의 모든 데이터는 피지컬하게 연결 되어있는 모든 선을 통해 보내지게 되는 것 인지.
물론 gateway아래에 더미 허브라면 그럴 것이고, 스위칭 허브라면 스위칭 허브가 걸러주겠지요?

만약 호스트가 다른 subnet으로 데이터를 보낼 경우 역시 IP패킷에 dst ip를 적어서 보내게 될 텐데
이런 경우 게이트 웨이가 알아서 이 패킷을 외부로 보내 주는 것인지요?

즉, 궁금 한건 호스트가 subnet에 따라서 gateway 내/외부로 가야할 패킷을 인지하고 이에 따른 어떠한 작업을 하는지,
아니면 호스트는 단지 IP패킷을 전송하면 gateway가 내/외부로 가야할 패킷인지 알아보고 알아서 처리 하는지가 궁금 합니다.
그리고, 호스트가 데이터를 보낼 경우 이 데이터가 LAN상에서 흘러다니고 이를 받은 gateway가 알아서 외부로 보내준다면
호스트는 gateway ip를 알 필요가 없는 것 아닌가요?
LAN상에서 MAC주소로 유니캐스트를 한다고 알고 있는데 실제로 패킷을 캡쳐해보면 내/외부 상관없이 패킷 구조는
동일한것 같아서 약간 혼란이 옵니다.

너무 두서없는 질문이 부끄럽습니다, 스스로도 깔끔하게 개념정리가 덜 된 상태라 지저분한 질문이 죄송할 따름입니다.

노랑망토의 이미지

네트워크를 공부하고 있는 학생입니다.

제가 이해하는 선에서 설명 드리면 자신의 서브넷에 속한 호스트가 dst IP일 경우엔 dst Host의 MAC주소를 패킷에 심어 전송하고
외부 네트워크의 호스트일 경우엔 Gateway의 MAC주소를 패킷에 심어 전송을 합니다.

그럼 이러한 패킷을 더미허브인 경우 MAC broadcasting하고 스위칭허브일 경우 MAC address table을 가지고 있어서 해당 MAC address를 사용하는
호스트의 포트로 패킷을 전송하게 됩니다.

올바른 대답이 되었는지 모르겠네요.
대답이 올바르지 못하거나 질문을 제대로 이해하지 못했다면 코멘트 부탁드립니다.

sabihanl의 이미지

gateway가 자신의 MAC주소가 dst인 패킷을 받은 경우 외부로 나가야 할 패킷임을 인지하여
외부로 보내게 되면 어차피 라우팅은 ip기반으로 동작하니까 최종 목적지 호스트가 있는 gateway까지 도착하게 되고,
이때 최종 목적지 호스트의 gateway가 arp등을 이용하여 해당 ip호스트의 mac으로 패킷을 전달 하는 구조 입니까?

노랑망토의 이미지

시나리오 에서 설명을 드리도록 하겠습니다.

일단 기본적인것은 IP 주소와 라우팅 테이블은 라우팅, 즉 패킷이 누구한테 도착해야 하고 그렇게 하기 위해 누구에게 전달해야 할지를 판단하기 위해 필요한 것입니다.
MAC주소는 패킷을 전달해야 하는 호스트(PC나 라우터)가 정해졌을 때 해당 호스트의 네트워크 인터페이스로 패킷을 전달하기 위해 필요한 것이죠.
따라서 arp 및 MAC주소는 gateway와 호스트사이에서만 사용되는 것이 아니라 패킷을 다음 호스트로 전달할 때마다 사용됩니다.

source는 패킷을 전달하기 위해 destination의 IP 주소와 관련해서 패킷을 전달해야 할 다음 호스트를 라우팅 테이블을 검색합니다.
같은 서브넷이 아니므로 default인 gateway에게 전달하기로 결정합니다. (라우팅 테이블에 gateway의 IP 주소가 적혀있습니다.)
따라서 gateway의 IP는 알았으니 MAC주소가 필요하겠죠. arp cache에 gateway의 MAC주소가 적혀있다면 그걸 이용하겠지만 없다면 알아내야 합니다.
그럴 때 arp를 이용해서 MAC주소를 알아내죠. MAC주소를 알아내면 이제 gateway로 패킷 전달이 가능합니다.

패킷을 받은 gateway는 다시 destination의 IP주소와 관련되어 패킷을 전달해야할 호스트를 자신의 라우팅 테이블에서 검색합니다.
중간에 몇몇 라우터를 더 거칠 수도 있겠지만 편의상 destination의 gateway를 테이블에서 찾았다고 가정하겠습니다.
그럼 destination의 gateway의 IP주소는 알아냈으니 역시 MAC주소가 필요하겠죠
먼저 arp cache를 찾아보고 해당 MAC주소가 없으면 arp를 통해서 알아낼 것입니다. 그런 후에 destination의 gateway에게 패킷을 전달 합니다.

destination의 gateway도 마찬가지의 방법으로 destination호스트를 찾게 될 것이고 패킷은 목적지에 도착하게 될 것입니다.

라우팅에 관련해서는 라우팅 테이블이 어떻게 생성되고 유지/관리 되는지를 좀 더 공부해 보시면 될것 같습니다.

sabihanl의 이미지

예를 들어 주시면서 설명해주시니 이제 대략 느낌이 옵니다.
덕분에 궁금했던 부분이 어느정도 시원하게 정리가 된 것 같습니다.

정말 감사합니다 ^^ //

네트워크.. 공부할 수록 재미있네요 ^^ //

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.