728x90

VISO 로 헤더구조 그림 그리던 때가 새록 새록 생각나네요.

그냥 가볍게 한번 보시면 됩니다.



IP헤더구조는 이렇게 생겼다.

총 20바이트이고 그중에서 IP주소부분이 송신주소와 수신주소가 각각 4바이트(=32비트)씩이다.

이 헤더구조에서는 다른 것도 중요하지만 Time to Live 필드부분과 Protocol필드부분도 눈여겨서 공부해둘 필요가 있다는 것이다.

상위계층의 프로토콜이 TCP인지 UDP인지에 대한 구분을 해주는 필드가 필요하지 않을까??

데이터가 전송될 때 에러가 발생할 가능성을 염두에 두지 않고 헤더구조를 만든다??? 상상이 안되는 부분이다.

망을 설계하다보니 잘못 설계가 되었다거나 장비가 이상이 있어서 Loop이 형성된다면 목적지까지 가지 못하고 인터넷(또는 전용네트웍)을 수 없이

떠돌아 다니는 패킷이 존재한다면????

송신IP주소는 속이기가 가능한가??? 가능하다면 왜 가능할까???

모두 ???로 의미를 대신한다.

왜냐구요??? 그래야 아 왜 필요할까 하고 생각이라는 하게 될 것이고 공부를 할 마음이 생길 것이기 때문이죠..


블로그 이미지

Link2Me

,
728x90


지금 인터넷은 TCP/IP 프로토콜을 사용합니다.

TCP 헤더구조가 어떻게 되어 있는지는 책을 보거나 여기저기 보면 많이 나옵니다.

다음에 기회가 되면 제가 워드로 잘 정리해둔 자료를 가지고 다시 한번 올려볼 생각입니다.



우리가 접속하는 인터넷에서 사용되는 패킷구조중의 하나를 나타내는 TCP 헤더구조가 위의 그림과 같다.

물론 초보자들은 좀 어렵게 느낄 수도 있지만 전문가가 되려면 반드시 헤더구조를 분석하는 버릇을 길러야 된다.

물론 이렇게 말하는 나자신도 아직은 전문가는 아니다. 그러나 기술을 공부하는 사람이라면 알아할 것이 위 헤더구조중에서

특히 포트번호와 Code Bits 부분은 꼭 알아둘 필요가 있다.

포트번호는 왜 필요할까?

우리는 하나의 컴퓨터에서 수없이 많은 Application을 실행한다. 웹 브라우저를 띄워놓고 똑같은 사이트 또는 각기다른 사이트를 접속하는데 하나같이 제대로 웹 브라우저에 보여준다. 왜 그럴까???

그것은 바로 포트번호로 구분해 줄 수 있기 때문이다.

목적지가 서버일 경우 찾아게 될 때도 어떤 서버는 웹서버이고 어떤 서버는 FTP서버이고 또다른 게임서버인지를 어떻게 알아서 찾아간다고 보는가??

목적지 포트번호가 미리 예약되어 사용되기 때문에 가능하다.


[TIP] TCP/IP 에 널리 사용되는 포트번호값들


    ●TCP/IP에서 일반적으로 널리 사용되는 포트 번호를 알아 보자

    TCP

    포트번호

    응용프로그램 계층 서비스

    TCP

    포트번호

    응용프로그램 계층 서비스

    0

    예약

    102

    ISO-TSAP

    1

    TCP 포트 서비스 멀티플렉서

    107

    원격 Telnet 서비스

    2

    관리 유틸리티

    108

    SNA 게이트웨이 접속 서버(snagas)

    3

    압축 프로세스

    110

    우체국 프로토콜 - 버전 3(POP3)

    5

    원격 직무 항목

    111

    Sun 원격 프로시저 호출(sunrpc)

    7

    반향(echo)

    119

    네트워크 뉴스 전송 프로토콜(NNTP)

    9

    삭제

    123

    네트워크 시간 프로토콜(NTP)

    11

    활성 사용자(systat)

    134

    INGRES-NET 서비스

    13

    137

    NETBIOS 이름 지정 서비스

    (netbios-ns)

    17

    오늘의 인용문(QUOTD)

    138

    NETBIOS 데이터그램 서비스

    (netbios-dgm)

    20

    FTP 데이터 포트

    139

    NETBIOS 세션 서비스(netbios-ssn)

    21

    FTP 제어 포트

    142

    Britton-Lee IDM

    23

    Telnet

    191

    Prospero

    25

    SMTP

    194

    인터넷 중계 대화 프로토콜(irc)

    35

    개인 프린터 서버

    201

    AppleTalk 경로 설정 유지보수(at-rtmp)

    37

    시간

    202

    AppleTalk 이름 바인딩(at-nbp)

    39

    자원 위치 프로토콜

    213

    IPX

    42

    호스트 이름 서버(nameserver)

    215

    Insigniax(Soft PC)

    43

    Who Is(별명)

    217

    dBASE UNIX

    49

    로그인 호스트 프로토콜(로그인)

    372

    UNIX Listserv

    52

    XNS 시간 프로

    519

    unixtime

    53

    도메인 이름 서버(domain)

    525

    시간 서버(timed)

    54

    XNS 정보 센터

    533

    비상 방송용(netwall)

    66

    Oracle SQL*NET(sql*net)

    556

    RFS 서버(remoterfs)

    67

    부트스트랩 프로토콜 서버(bootps)

    565

    Who Am I(whoami)

    68

    부트스트랩 프로토콜 클라이언트(bootpc)

    749

    Kerberos Administration

    (kerberos-adm)

    70

    Gopher 프로토콜

    767

    전화(phonebook)

    79

    Finger 프로토콜

    1025

    네트워크 블랙잭(blackjack)

    80

    world Wide Web HTTP

    1352

    Lotus Notes(lotusnote)

    88

    Kerberos

    7000-7009

    Andrew 파일 시스템(AFS)에서 사용

    94

    Trivoli Object Dispatcher(objcall)

    17007

    ISODE 디렉토리 사용자 대행자

    (isode-dua)

    95

    SUPDUP

     

     


 

블로그 이미지

Link2Me

,
728x90

본 자료는 잘 읽어보시면 도움이 많이 되실 겁니다.

인터넷 붐이 일던 2000년대 초반에 네트워크 강의를 목적으로 정리했던 자료입니다.

자료 정리 : 2001년도





클라이언트A에서 서버B로 접속을 하는 방법에는 여러 가지가 있겠지만 서버B가 웹서버라고 가정을 하고서 접속하는 과정을 한번 알아보도록 하자.

먼저, 라우터 R1에 속한 망이 공인IP주소를 사용하고 있다고 가정하면,

녹색원에 해당하는 부분이 broadcast domain이다.

클라이언트A가 웹 브라우저를 기동하고서 http://www.mk.co.kr이라는 매일경제신문 사이트인 서버B에 접속을 하기위해 엔터키를 친다.

여기서 실제적으로 어떠한 과정을 통해서 접속을 하는지 한번 알아보자 물론 상세하게 모든 과정을 설명드리지는 못하지만 기본적으로 필요한 사항에 대해서 알고서 넘어가자.

웹서버에 접속하는 과정은 TCP/IP통신 프로토콜을 이용하여 통신을 하게된다.

잘 아시다시피 TCP/IP통신과정은 클라이언트A에서 어플리케이션 계층과 TCP계층간에는 TCP 헤더구조에 보면 Source Port와 Destination Port라는 헤더부분이 있다.

이 부분에서 우리가 알고 넘어가야 할 부분은 목적지 포트는 웹서버를 사용하는 경우즉 WWW일 때는 80번 포트, telnet 데몬 접속시는 23번 포트, FTP서버에 접속시는 21번 포트를 사용한다는 것이다.

이 외에도 많은 포트들이 Reserved되어 있는데 보통 예약된 포트번호는 1~1023번 사이에 존재하여 이 부분을 well-known 포트넘버라고 한다.

소스포트는 통상적으로 1023번 이후부터 65535번 포트사이에 있는 임의의 번호를 랜덤하게 할당받게 되는데 예를 들어 10,000번 포트번호를 할당받았다고 한다면, 목적지 포트번호는 이미 접속하는 서버가 웹서버이므로 80번으로 세팅이 된다.

TCP계층에 또다른 헤더부분에 대한 것은 생략하기로 한다. 이유는 오늘 설명하고자 하는 초점과 거리가 멀기 때문이다.

그러면 네트워크 계층의 IP헤더구조에서는 상대방의 목적지주소와 자신의 주소가 설정된다.

물론 IPv4이므로 각각32비트로 설정된다.
여기서 소스주소가 210.100.100.10이라고 가정하고 목적지주소는 매경사이트 주소인 211.40.179.98이다.

여기서도 또한 다른 헤더는 생략한다. 자세한 것은 본인이 정리한 기술자료란에서 자세히 보시면 된다.

3계층까지 만들어진 패킷은 이제 하위계층인 MAC주소 계층에서 필요한 프레임을 만들 게 된다.

물리계층에서는 실제적으로 전기적인 신호로 데이터가 전송된다.

패킷을 전송하기 위해서는 어디로 전송할 것인지를 결정해야 한다.

만들어진 패킷이 같은 broadcast domain에 존재하는지 확인은 어떻게 하는가?

자신의 컴퓨터에 보게되면



IP주소 및 서브넷 마스크, 기본 게이트웨이가 세팅되어 있을 것이다.

개인컴퓨터에도 TCP/IP프로토콜이 동작하여 라우팅 테이블이 존재한다.

호스트에 존재하는 라우팅 테이블은 라우터처럼 패킷이 들어오면 어떤 경로로 패킷을 전송할 것이지 결정하는 기능은 존재하지 않지만 상위계층에서 만들어진 패킷을 라우팅 테이블을 참조하여 어디로 보낼 것이지를 결정한다.

목적지 경로가 같은 서브넷 영역안에 존재하는지 다른 영역에 존재하는지 판단은 어떻게???

먼저 시스코 라우터를 예로 들어 세팅하는 부분중에 이런부분이 있을 것이다.

ip route 0.0.0.0 0.0.0.0 serial0

여기서 0.0.0.0 0.0.0.0가 의미하는 것은 무엇인가?

앞에 있는 0.0.0.0는 목적지 네트웍이고 뒤에 있는 0.0.0.0는 서브넷 마스크이다.

위의 그림에서 보게되면 기본 게이트웨이가 존재할 것이다. 이 기본게이트웨이는 라우터의 이더넷IP주소를 뜻한다.

개인컴퓨터에서 목적지 경로를 찾는 과정은.....

자신의 주소와 서브넷마스크간에 AND gate연산을 하게된다. 위의 그림에 나온 숫자로 연산된 결과값은 210.100.100.0이다.

그리고 목적지주소와 서브넷마스크간에 AND gate연산을 하게되면 211.40.179.0가 나온다.

이 두 개의 값을 비교하여 연산된 결과값이 서로같으면 같은 서브넷 영역에 속하는 것이고

다르면 다른 영역에 존재하는 것이다.

같은 영역에 존재할시에는 상대방의 주소를 모를 경우에는 arp동작을 실행하여 목적지 하드웨어주소를 알아서 목적지로 패킷을 보내게 되는 것이고 다른 영역에 존재할시에는 라우터 MAC주소를 2계층 프레임에 설정하여 프레임을 라우터로 보내게 된다.

라우터에서는 도착한 프레임을 2계층에서 3계층으로 전달시에 헤더를 제거하고 3계층에서 목적지 주소를 확인하고서 라우팅 테이블에서 적당한 경로를 찾아서 패킷을 전송한다.

물론 전송시에는 라우터와 라우터간에 설정된 프로토콜이 HDLC로 설정이 되어있으면 HDLC프레임으로 만들어서 상대방 라우터로 전송을 하게 되는 것이다.

패킷이 R2라우터에 도착하게 되면 라우터R2는 목적지 서버로 패킷을 전송한다.

목적지 서버에서는 클라이언트에 응답하여 패킷을 만들어 보내게 된다.

이때 보내게 되는 소스포트 번호는 랜덤하게 설정이 될 것이며 목적지포트는 클라이언트 소스포트번호인 10,000번을 할당하게 되고

목적지 주소는 210.100.100.10번을 설정하여 반대의 과정을 거쳐서 원래의 클라이언트A에 패킷이 도착하여 원하는 응답을 받게된다.

그러면 여기에서 간단히 정리를 해보면

공인IP주소를 가지고 통신할 시에 필요한 것은

(소스포토번호, 목적지포트번호, 소스IP주소, 목적지IP주소)로 압축하여 볼 수가 있다.

라우터는 목적지IP주소를 보고서 경로설정을 하는 것이다. 라우터와 라우터간에 주고받는 라우팅 프로토콜이라든가 이런 개념은 본 설명의 취지와는 거리가 멀기 때문에 생략한다.

먼저, 라우터 R1에 속한 망이 사설IP주소를 사용하고 있다고 가정하면,

라우터에서 사설IP주소를 공인IP주소롤 바꾸어주는 기능이 설정되어있지 않다고 가정한다면

IP주소가 192.168.10.10이라고 하는 사설IP주소라고 하자.

클라이언트A에서 만들어진 패킷은 라우터로 보내지게 될 것이다.

라우터는 목적지IP주소를 보고서 경로설정을 하여 패킷을 전송하여 목적지인 서버B에 도착하였다고 한다면 다시 역으로 응답을 하게될 때 상대방의 IP주소를 설정하여 보내게 될 때 이 패킷은 다시 클라이언트A로 찾아오게 될 수가 없다.

왜냐하면 인터넷상에서는 공인IP주소만이 찾아갈 수 있는 경로가 설정되어 있기 때문이다.

라우터에서 사설IP주소를 공인IP주소로 변경해 주는 기능을 해주어야만 사설IP주소를 사용하는 클라이언트A가 서버B와 통신을 할 수가 있는 것이다.

그러면 라우터에서는 어떻게 이러한 기능을 하게되어 통신이 가능하도록 하는 것인가?

먼저 클라이언트A가 생성한 패킷을 라우터로 전송된다. (소스포트번호, 목적지포트번호, 사설 소스IP주소,목적지IP주소)

라우터는 클라이언트A의 사설IP주소를 공인IP주소로 변경한다. 즉 NAT(Network Address Translation)을 하게된다.

이러한 IP주소변환을 한 결과를 라우터 엔트리에 저장을 한다.

엔트리 테이블에 (No, 소스포트번호, 목적지포트번호, 사설 소스IP주소,목적지IP주소, 공인 소스IP주소)를 만들어 저장하고서 다시 만들어진 패킷을 서버B로 전송하여 서버B로부터 응답을 받게된 패킷이 도착할시에는 반대의 과정을 거쳐서 목적지 주소를 공인IP주소 → 사설IP주소로 바꾸어 클라이언트A로 전송해준다.

그럼 여기서 아무런 문제가 발생하지 않을까?

소스포트번호와 목적지포트번호가 생성된 것은 어떤 계층인가?

Transport Layer인 4계층이다. 아시다시피 라우터는 3계층까지의 정보를 가지고 패킷을 전송한다.

그런데 4계층에서 만들어진 소스포트번호는 클라이언트A만 생성할 수 있는 것은 아니라는 것이다.

인접한 다른 클라이언트들도 같은 소스포트번호를 생성할 수가 있다는 것이다.

즉 10,000번 이라는 소스포트번호를 다른 클라이언트도 생성할 수가 있기 때문에

(No1, 소스포트번호 = 10,000, 목적지포트번호, 사설 소스IP주소=192.168.10.10,목적지IP주소, 공인 소스IP주소=210.100.100.5)

(No2, 소스포트번호 = 10,000, 목적지포트번호, 사설 소스IP주소=192.168.10.11,목적지IP주소, 공인 소스IP주소=210.100.100.5)

와 같은 엔트리 테이블이 존재할 수가 있다는 것이다.

목적지로부터 도착한 패킷을 과연 어디로 다시 주소변환을 하여 보내야 할 것인가?

1번 엔트리인가? 아니면 2번 엔트리에 등록된 것인지 알 수가 없게 된다. 방법은 다음과 같이 하면 해결이 된다.

(No, 소스포트번호, 목적지포트번호, 사설 소스IP주소,목적지IP주소, 공인 소스IP주소, 라우터생성 소스포트번호)

로 엔트리 테이블을 만들게되면 목적지인 서버B에서 도착한 응답이 다시 클라이언트A로 주소변환을 하여 보내게 될 때 명확해진다.

즉 라우터에서 생성된 소스포트번호는 각각 다르기 때문에 같은 엔트리테이블 정보가 생성될 수 없다는 것을 알 수 있다.

패킷을 내보내게 될 경우에는 사설소스IP주소 → 공인소스IP주소, 클라이언트 소스포트번호 → 라우터생성 소스번호

패킷을 클라이언트로 응답시에는 목적지주소 및 목적지포트번호만 역변환과정을 거쳐서 Translation을 해주면 해결된다.

참고적으로 말씀을 드리자면 공인 IP주소를 가지고 인터넷통신시 컴퓨터 여러대가 통신을 하는 경우에 필요로 하는 소프트웨어인 IPTime 도 이러한 NAT처리를 해주는 소프트웨어입니다.

그리고 방화벽에서 내부는 사설IP를 사용하고 외부와 통신시에 사용하는 경우에도 마찬가지로 이러한 과정이 필요한 것이죠..

지금까지 설명드린 NAT동작과정이 이해가 되셨는지 모르겠습니다.

개념은 이정도면 충분히 이해가 되셨을 줄로 아는데 혹시라도 잘 이해가 안되시면 제가 그동안 정리한 파일들중에

이더넷 동작원리, arp동작원리, IP계층에서의 헤더구조 및 동작처리과정, TCP계층 헤더구조 및 동작과정등을 참조하기시 바랍니다


블로그 이미지

Link2Me

,
728x90

시스코 CCNA 등과 같은 자격증 공부하는 분들한테는 필요한 자료일지 몰라서 올립니다.


CSMA/CD방식이라는 것은 약어를 풀어보면 Carrier Sense Multiple Access/Collision Detection의 약자로 반송파 감지 다원접속 방식의 일종이다.

즉 보내고자 하는 패킷을 송신하기 전에 통신로상에 반송파의 존재유무를 감지한 후 패킷을 보내는 방식이다.

Collision Detection이란 송신하는 동안에도 수신을 하여 데이타의 충돌을 빨리 감지한 후 패킷 송신을 멈추고 일정시간 대기후 전송하는 방식이다.

그래서 CSMA/CD방식은 Full Duplex방식이 아닌 Half Duplex(반이중)방식이다.
UTP케이블 8가닥중에서 4가닥이 송수신에 사용되는데
송신선 1,2 번과
수신선 3,6 번이다.


송신중에 수신쪽으로도 데이타를 주고 받는 방식이 양방향전송방식인데 CSMA/CD방식은 
스위칭기술이 발전함에 따라 10Mbps, 100Mbps에서는 주로 사용이 되나 1Gbps에서는 명맥은 유지되고 있으나 사실상 사용이 거의 안되는 것이라고 봐도 무방하다.
즉 전이중방식인 Full Duplex모드로 사용이 된다는 야그다.
그리고 10기가비트 이더넷에선 아예 CSMA/CD방식은 자취를 감추고 만다...


이더넷방식의 LAN에서는 공정한 경쟁방식으로 많은 단말장치들이 연결되어 있을 경우 이들에게는 되도록 공정한 전송기회가 주어져야 한다.

만약 프레임의 크기를 정해 놓지 않으면 소수의 몇 단말기가 많고 큰 사이즈의 프레임을 보냄으로서 다른 단말장치는 작은 크기의 데이타를 보내려고 해도 많은 시간을 기다려야 하는 불공평한 점이 있다.

따라서 최대 크기를 정해야 한다. 또한 최대 크기를 정해놓지 않고 전송이 이루어 진다면, 이를 처리할 수 있는 버퍼가 충분 히 커야 한다. 그렇게 되면 작은 크기의 프레임만 보내는 경우에도 버퍼 크기를 매우 크게 해야 하므로 낭비가 크다.

따라서 효율이 높고 모든 단말기에 공평하고 응답시간이 빠른 수준에서 최대 프레임 크기가 정해져 있다.

이더넷방식에서는 최대 프레임크기는 1500byte이다.


이더넷에서는 신호가 굵은 케이블에서 광속의 0.77배, 가는 이더넷 케이블에서는 광속의 0.65배로 전파된다


블로그 이미지

Link2Me

,