|
TCP/IP에 대해서 알아봅니다.
앞서 OSI 7 Layer에 대해서 간략히 알아봤습니다.
IP는 3계층에서 동작하는 프로토콜이고, TCP는 4계층에서 동작하는 프로토콜이라고 언급이 살짝 되었지요..
TCP/IP가 중요한 이유는 폭 넓게 쓰고 있는 인터넷이라는 놈이 바로 TCP/IP를 쓰기 때무입니다.
OSI 7 Layer가 통신 단계별 표준화를 이야기 하고 있다면, 인터넷 표준은 TCP/IP다 라고 감히 말할수 있을 겁니다.
인터넷이 폭발적으로 쓰이면서 표준으로 자리매김한게 TCP/IP이거든요...
그래서 OSI 7 Layer 계층과 TCP/IP 계층을 서로 비교하며 설명하는 책을 많이 봤을 겁니다. 다 이유가 있는 거죠...
여하튼 먼저 IP 주소에 대해서 알아보도록 하겠습니다.
IP주소는 이진수 32자리로 되어 있고, 8자리마다 점을 찍어 구분을 하고 있습니다. 이진수 8자리를 십진수로 표현하는
제일 큰 수는 255이고, 이것을 주소로 표현한다고 하면 0~255까지 총 256개를 나타낼수 있습니다.
이진수를 십진수로 십진수를 이진수로 바꾸는 방법을 잘 모르시는 분은 별도로 공부해야 할듯 합니다. 여기서는 언급을
안할꺼에요..
그럼 이진수 32자리를 십진수로 표현한 가장 큰 수는 뭘까요? 2의 32승 대충 49억 9천 얼마 이렇게 나올겁니다.
즉, 컴퓨터 마다 IP주소라는 것을 유일하게 하나씩 부여하게 되면 대략 42억 9천개 정도 부여할 수 있습니다.
그런데...처음에 IP주소를 32bit로 약속했을 때는 인터넷이 이렇게 폭발적으로 사용될거를 예상치 못했던듯 합니다.
지금 컴퓨터만 IP주소를 갖는것이 아니고, 인터넷이 되는 모든 단말에는 IP가 부여되어야 하기 때문에 32Bit로는 택없이
부족한 사태가 나타난거죠...그래서 128bit IPv6라는 주소체계가 나오는 겁니다.
암튼 여기서는 IPv4 32bit IP주소 체계를 언급하도록 합니다.
IP주소는 크게 네트워크 부분과 단말기인 호스트 부분으로 나누어져 있습니다.
(안개가 나눈것은 아니고, ""이렇게 하자 라는 약속"")
흡사 우리집 주소가 어느시, 어느구, 어느동, 몇번지 라고 부여가 되어 있을 때, 어느시,어느구, 어느동까지가 공통된 영역이고,
몇번지가 우리집인 것과 마찬가지라고 생각하시면 됩니다.
이것을 IP주소 상 네트워크 부분과 호스트 부분을 나눠 총 5개 클래스로 약속해 놨고, A,B,C,D,E 클래스로 구분합니다.
이중에서 두개는 D : 멀티캐스트용, E: 연구용으로 확보되어 있는 관계로 A,B,C 클래스만 다루도록 합니다.
A클래스는 32bit 중 맨앞자리가 0으로 채워집니다.
즉, 00000000.00000000.00000000.00000000 ~ 01111111.11111111.11111111.11111111 까지이고,
십진수로는 1.0.0.0 ~ 126.255.255.255 까지 입니다. (이중 맨처음과 맨뒤대역은 제외 -""약속"")
A클래스는 앞 8bit가 네트워크 대역이고, 나머지 뒤 24bit가 호스트 대역입니다. 왜냐고요? ""약속""이니까...
따라서 A클래스 하나의 네트워크 대역은 총 2의 24승 빼기 2개의 호스트가 붙을 수 있습니다. (16,777,214개)
(호스트 대역이 모두 0인것은 네트워크 대역을 의미하고, 모두 1인것은 브로드캐스트 주소임으로 2개 제외)
하나의 네트워크에 16,777,214개의 호스트를 갖는다는 것은 현실적으로 어렵기 때문에 별도로 서브네트워크
해서 사용하게 됩니다. 서브네트워크 개념은 뒤에 설명할께요...
B클래스는 32bit 중 맨앞 두자리가 10(이진수)으로 채워집니다.
즉, 10000000.00000000.000000000.0000000 ~ 10111111.11111111.11111111.11111111 까지이고,
십진수로는 128.0.0.0 ~ 191.255.255.255까지 입니다.
B클래스는 앞 16bit가 네트워크 대역이고, 나머지 뒤 16bit는 호스트 대역입니다.
따라서 B클래스 하나의 네트워크 대역은 총 2의 16승 빼기 2개의 호스트가 붙을 수 있습니다.(65,534개)
왜 2개 빠지는 지는 앞서 설명했지요?
C클래스는 32bit 중 맨앞 세자리가 110(이진수)으로 채워집니다.
즉, 11000000.00000000.00000000.00000000 ~ 11011111.11111111.11111111.11111111까지이고,
십진수로는 192.0.0.0 ~ 223.0.0.0 까지 입니다.
C클래스는 앞 24bit가 네트워크 대역이고, 나머지 뒤 8bit는 호스트 대역입니다.
따라서 C클래스 하나의 네트워크 대역은 총 2의 8승 빼기 2개의 호스트가 붙고 254개 입니다.
대부분 공유기를 사서 내부 DHCP로 할당받는 대역을 보면 C Class의 192.168.1.0 대역입니다.
물론 이거는 사설IP입니다. (사설IP 말고 또 뭐가 있을 까요? 공인 IP)
즉, DHCP로 IP할당 받을 수 있게 공유기를 세팅했다고 하면 (아마 디폴트일겁니다.) 1~254까지 할당
받을 수 있습니다.
대략 IP 클래스 개념은 이쯤 마무리 하고...서브네트워크에 대해서 알아봅니다.
A클래스의 경우 서브네트워크로 나누지 않고 디폴트로 사용할 경우 하나의 네트워크에 16,777,214개의
호스트를 붙여 사용할수 있습니다.
하지만 하나의 네트워크로 천육백만개의 호스트를 붙여 사용한다고 하면..이거 관리가 될까요?
또한, 이렇게 큰 회사가 과연 얼마나 될까도 싶네요...
그래서 A,B,C클래스의 네트워크는 관리차원상, IP효율적 사용을 위해서 목적에 따라 서브네트워크를 사용하게 됩니다.
즉, 서브네트워크의 목적은 IP주소를 보다 효율적으로 낭비없이 쓰면서 적정한 주소배정을 위해 사용한다라고 생각하시면
됩니다.
앞서서 서브넷마스크라는 것을 배웠습니다. IP와 서브넷마스크를 이진수로 AND 조건을 하게 되면 네트워크 대역이 나온다라고
했는데...혹 기억나시나요?
예를 들어보겠습니다.
A클래스 10.1.1.1이라는 호스트의 디폴트 서브넷 마스크는 255.0.0.0입니다.
이진수로 표현해 볼까요?
IP주소 : 00001010.00000001.00000001.00000001
S/M : 1111111.00000000.00000000.00000000 => 255.0.0.0
AND : 00001010.00000000.00000000.00000000 => 10.0.0.0
해당 호스트는 10.0.0.0 네트워크에 속하고 있음을 의미합니다.
만일 서브넷 마스크를 이진수로 표현될때 상위 24bit까지 1로 채워볼까요?
IP주소 : 00001010.00000001.00000001.00000001
S/M : 1111111.11111111.11111111.00000000 => 255.255.255.0
AND : 00001010.00000001.00000001.00000000 => 10.1.1.0
자 어떻게 되었습니까?
해당 호스트는 10.1.1.0 네트워크에 속하고 있음으로 바뀌었습니다.
두가지를 비교해 보면 중요한 2가지를 도출해 낼 수 있습니다.
아..1.서브넷팅을 하려면 상위 이진수 자리를 1로 채우면 되는 구나...와
2.상위에 채워진 1로 인해 네트워크 갯수는 많아지고, 호스트 수는 줄어드는 구나...
첫번째꺼는 알겠는 데...두번째꺼는 잘 모르겠다고요?
보세요...
앞서 A클래스는 상위 8bit가 네트워크 대역을 의미하고, 뒤 24bit가 호스트대역을 의미한다고 했습니다.
서브넷팅을 하니 어떻게 바뀌었지요? 상위 24bit가 네트워크 대역, 뒤 8bit가 호스트 대역으로 바뀌었지요?
A클래스 본디 네트워크 갯수가 2의 8승 빼기 2개 만큼(0과 127은 제외), 호스트 갯수가 2의 24승 빼기 2개 만큼인데...
서브넷팅을 하니 네트워크 갯수가 2의 24승개, 호스트갯수가 2의 8승 빼기 2개로 바뀌었습니다.
즉 서브넷팅을 하면, 네트워크 갯수는 증가되고, 호스트 갯수는 감소됨을 알수 있습니다.
이걸 이진수로 나열해 보니...
서브넷마스크에서 앞자리부터 1로 채우면 네트워크가 늘어나는 구나 대신 호스트 갯수는 감소하겠네로 표현됩니다.
자 예를 들어보겠습니다.
지점이 많은 유통점이 있다고 합시다.
물론 전용회선으로 연결되어 있고, 각 지점은 별도 네트워크 대역으로 구성되어 있습니다.
전용회선으로 연결된 부분도 사용자 네트워크 대역과 다른 별도 네트워크로 부여하고자 합니다.
어떻게 하면 될까요?
물론 본점과 지점을 각각 C클래스 대역 하나씩 줘도 상관 없을 겁니다...하지만 지점 갯수가 엄청나게 많으면?
IP주소가 부족할 수 있습니다. 그래서 서브넷팅을 생각합니다.
자....본점과 지점간 연결이기 때문에 각 장비에 부여되는 IP는 2개만 있으면 되겠네요...
C클래스 네트워크 대역 192.168.1.0을 호스트 IP 2개만 갖도록 해 봅시다..
IP주소 : 11000000.10101000.00000001.00000000
SM1 : 11111111.11111111.11111111.00000000 => 이거는 디폴트 호스트가 254개 짜리..
SM2 : 11111111.11111111.11111111.11111100 => 마지막 0이 두개죠? 2bit로 표현할수 있는 호스트 갯수는? 4개? 아님 2개?
4개라고 하신분은 숫자계산을 잘하신 분... 2개라고 하신분은 안개나라 글을 잘 읽으신분....
답은 2개죠? 어라? 요구하는 업무목적과 딱 맞는 서브넷 마스크네요...
이로인해 늘어나는 네트워크는 몇개? 2의 6승개...
즉 서브넷 마스크를 255.255.255.252로 하게 되면 하나의 C클래스 네트워크를 2의 6승개 만큼 늘리면서 업무목적에 부합되게끔
IP주소를 효율적으로 사용할 수 있습니다.
여기까지 서브네트워크에 대해 알아봤습니다.
이제 TCP에 대해서 알아봅시다.
그전에 왜 TCP랑 IP랑 짝꿍이 되어서 인터넷을 하기 위한 필수 프로토콜이라고 이야기 할까요?
OSI 7 Layer에서 TCP는 4계층, IP는 3계층이라고 했습니다.
IP에 대해서는 설명을 좀 드렸고,
4계층이 하는 역할은
//3계층으로 부터 올라온 패킷을 손실이나 중복 등 오류없이 전달하는 계층으로, 시퀀스를 붙여 오류제어를
하고, 5계층으로 부터 받은 데이터 유닛을 작은 패킷 단위로 자르는 단편화 작업을 하는 계층입니다.
기본 MTU 사이즈는 1500byte입니다.
쉽게 포트번호를 생각하시면 될듯 하고, TCP나 UDP가 속한 계층입니다. 장비로는 L4 로드밸런서 장비를
생각하시면 될듯 하네요.//라고 앞선 글에서 말씀드렸죠?
인터넷은 HTTP라는 프로토콜을 사용합니다...이는 hypertext라는 문서를 교환하기 위한 통신규약으로 문서 중간중간에
특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로 서로 다른 문서라 할지라도 하나의 문서처럼
보이게 하면서 참조하기 쉽도록 하는 방식을 의미하죠..(지식백과사전에 나온말)
즉, 브라우져에서 http://으로 시작되는 것은 하이퍼텍스트 문서교환을 http라는 프로토콜을 이용해서 하라라는 의미입니다.
왜 갑자기 http라는 프로토콜을 이야기 했냐면...앞서서 언급을 안해서요...이거는 OSI 7 Layer 중 7계층 어플리케이션계층에
속하는 프로토콜입니다.
잠깐 돌아가겠습니다. OSI 7 Layer가 7계층으로 이루어져 있고, 하단부터 상위단까지 통신단계별 표준화라고 말씀드렸습니다.
제일 하단부가 신호의 점멸, 강약 등으로 표현되는 물리적계층에서 이해하는 컴퓨터를 사람이 사용하기 위한 조건이 뭐라 생각
하세요....ET말고 human...사람이 이해할수 있고, 사용하기 편한 도구로 컴퓨터가 이해할 수 있도록 만들어 줘야 사람이 사용할수
있지 않겠어요? 키보드 자판을 보시면 영어/한글 자판으로 되어 있잖아요...이거는 사람이 이해하는 거지...컴퓨터가 이해하지
않습니다.. 사람이 인지하는 키보드를 누를 때...결국 최하단부는 컴퓨터가 이해할수 있는 이진수로 변환되게끔 하는 뭔가가
있어야 인터넷도 하고, 업무문서도 보고 그럴거 아니에요...
그래서 OSI 7 Layer의 각 통신계층들이 맡은 역할을 수행하기 위해 Data를 각 밑단부로 내려 보낼때, 또는 상단부로
보낼때 뭔가(헤더)를 붙이거나 떼거나 합니다... 이거를 encapsulation, de-encapsulation이라고 말합니다.
좀 길어졌는 데요....
결국은 인터넷을 하기 위해 IP와 상위계층 짝꿍인 TCP는 IP계층으로 부터 올라온 데이터를
신뢰성 있게 데이터를 상대방으로 보내기 위한 기능을 담당한다는 말입니다.
좀더 알아보겠습니다.
TCP는 Transmission Control Protocol의 약자로, 전송제어프로토콜입니다.
IP는 출발과 도착 주소를 가지는 헤더를 참조해 네트워크를 통해 데이터를 목적지에 전달하지만,
이 과정에서 데이터가 잘못 전달되거나 파손될 수도 있고, 보내진 순서대로 데이터를 전송하지 못할 수도 있습니다.
이러한 단점(?)을 보완하기 위해 TCP가 IP상위계층에서 업무를 보고 있는 겁니다.
자 신뢰성있게 데이터를 보낼려면 어떻게 해야 될까요?
배추를 뽑아서 트럭에 적재할 때, 트럭 밑에 한사람, 트럭 위에 한사람이 존재하고, 트럭밑에 있는 사람이 트럭위에 있는
사람과 합을 맞춰 잘 던지고 잘 받고 하면서 적재하잖아요...
만일 받는 사람은 없는데...막 던지기만 하면 배추가 개판 오분전 되겠죠?
마찬가지 입니다. TCP는 3way handshake라는 과정을 통해 세션을 생성한 후 데이터를 전송하게 됩니다.
A에서 B로...
A-> B : 나 너랑 데이터 주고 받을 건데? (SYN)
B-> A : 그래..나 너랑 통신할 준비할테니...답변줘라.. (SYN+ACK)
A-> B : 알았어..데이터 던질께..(SYN)
이 과정을 통해 A와 B간 신뢰를 쌓은다음..데이터를 전송하게 됩니다.
즉, TCP는 연결지향적이고 흐름제어나 상태제어를 통해 신뢰성있는 데이터를 전달합니다.
흐름제어는 데이터를 받는 쪽 부하가 걸리지 않도록 적절히 조절하는 것을 말하고, (수신측 버퍼 부하량 조절)
상태제어는 병목현상의 혼잡을 제어합니다. (노드간 데이터 전송속도 차이에 의한 병목현상 제어)
좀 길었지만, 간단히 마치도록 하겠습니다.