패켓트레이서로 구성한 간단한 네트워크가 있다
가장 기본적인 LAN 이다.
PC 와 Switch 와 Router로 이루어져 있다.
PC 는 우리의 컴퓨터고
Switch 는 중간에서 연결을 도와주는 녀석이라고 보면 된다.
그리고 Router 는 보통 Gateway 라고 한다.
Gateway 는 말그대로 문
다른 세계로 향하는 문이다. 한마디로 다른 네트워크로 가기 위한 문이라고 보면된다.
공항에서 비행기타는 출입구를 Gate 라고 한다.
다른 세계로 나가기 위해서는 문을 거쳐서 나가야 한다.
하나의 네트워크가 더 추가 됬다.
PC1 에서 보면 PC2 는 다른 세계에 있는 다른 네트워크 이다.
pc1 쪽은 192.168.1.x 이고 pc2쪽은 10.1.1.x 이다.
이것만 봐도 다른 네트워크 인 것을 알 수 있다.
우리는 이러한 구조를 통해 인터넷을 통해 다른 사람들과 통신을 할 수 있다.
PC1 과 PC 2가 통신이 되는지 알아보려면 ping 이라는 명령어를 이용하면 된다.
이런식으로 Reply , 즉 응답을 받으면 통신이 잘 되는 것이다.
앞서 배운 클라이언트와 서버와의 관계처럼 네트워크에서는
요청(ping) 을 하면 응답(reply)이 와야한다. 그래야 통신이 잘 되는 것이다.
이러한 과정을 간략하게 설명을 해보면
PC1 에서 PC2 로 통신을 하기위해서는 주소를 알아야 한다.
MAC 주소는 알 수가 없고 보통 IP 주소만 알고 있다.
PC1 이 같은 네트워크대역에
"10.1.1.1 이 누구니? 그녀석 MAC 주소좀 알고 싶은데" 하고
ARP 브로드캐스트 메시지를 보낸다.
브로드캐스트는 같은 네트워크 대역에 싹 다 뿌리는 것이고
그림에선 스위치와 라우터가 받는다.
브로드캐스트는 다른 네트워크로는 갈 수가 없다.
오로지 자신의 브로드캐스트 도메인에서만 뿌려진다.
하지만 저런 IP 는 네트워크에 없다.
스위치는 중간에서 전달만 하는 녀석이고
라우터가 메시지를 받는다.
라우터는 똘똘한 녀석이라 이렇게 응답해준다.
"PC1 아. 10.1.1.1 에 뭘 보내고 싶으면 내게보내. 내가전달해줌"
하고 연결된 Router2 에게 전달해준다.
그리고 Router2 는 자기 네트워크 안에 있는 PC2 의 맥어드레스를 찾게되고
알아낸후 맥 어드레스를 이용해서 전달한다.
데이터 전송 프로토콜
1. TCP
TCP 는 Transmission Control Protocol 의 약자로
영어 그대로 전송을 제어해주는 도구라고 보면 된다.
Layer 4계층 프로토콜이고
연결 지향성 프로토콜로 일단 상대방과 연결부터 하고
연결이 잘 됬으면 이후 데이터 요청 및 응답을 하면서 통신을 한다.
전화통화를 생각하면 쉽다. 연결이 되야 통화를 하니까
실제로도 TCP 는 전화망에서 쓰는 프로토콜을 본 따서 만들어서
거의 비슷하다고 보면 된다.
TCP 의 연결은 3way hand-shaking 해야한다.
이 과정이 성립되어야만 연결이 성립되고
통신을 할 수 있다
A B
A와 B가 통신을 하려면
A가 먼저 Syn(통신합시다)를 보내고
B가 Syn(통신합시다)에 대한 응답(Ack)와 Syn(통신합시다)를 같이 보낸다
A는 B의 Syn에 대한 응답(Ack)를 보낸다.
TCP 의 특징은
양방향 데이터 전송이 가능하며
데이터 스트림 서비스(데이터를 분할해서 보냄)를 지원한다.
단위는 세그먼트고 분할 순서는 시퀀스 넘버로 나타낸다.
데이터가 너무 크면 보내기 힘드니까 분할해서 보내야 하니 분할하는 것이다.
그리고 오류제어 및 정정 기능이 있다.
checksum 이 오류를 체크 해주는 기능이고
오류발생시 데이터를 재전송한다.
하지만 재전송을 했는데도 일정 시간이 지나도
Ack 가 오지않으면 연결을 끊어버린다.
흐름제어기능도 가지고 있다.
흐름제어는 말 그대로 데이터의 흐름을 제어하는 기능으로
데이터를 보내는 속도를 조절해서 데이터를 보냈을 때 받았다는 응답이 와야
다음데이터를 전송하는 방식이다. 신경쓰지 않고 계속 보내다보면
데이터의 유실이 발생하기 때문
흐름제어기능은 대표적으로 2가지 방법이 있다.
Stop & Wait
간단하게 데이터 하나를 보내서 받으면 응답을 보내고
다시 하나보내고 응답을 받고 이걸 반복하는 형식
느리기도하고 일일히 응답하니까 Ack 양도 많고 그러다보니
딜레이도 생긴다.
현재 이 방식을 쓰는 네트워크는 거의 없다.
Eigrp 프로토콜에서 쓰는 stop & wait
지속적으로 주고받을 데이터가 별로없어서
시퀀스번호를 보내면 그에 해당하는 Ack 를 응답
Sliding window
TCP는 흐름제어 방법으로 슬라이딩 윈도우를 사용
A가 1이라는 데이터를 보내면 B가 Ack 1 을 보내는것이 아니라
Ack 2를 보낸다 "이정도만큼 더보내도 된다"라는것
그래서 2,3 을 보내면 다시 Ack 4를 보내고
4,5,6,7 을보내고..... 점점 늘려간다
세그먼트를 점점 늘리다가 혼잡이 발생하면
세크먼트양을 절반으로 줄여버린다.
그 다음 다시 또 증가하다가 또 혼잡이 발생하면
다시 줄여버린다. 이걸 반복한다.
슬라이딩 윈도우를 쓰면 Stop & wait 에 비해
Ack 양을 줄일 수 있고 딜레이를 줄일 수 있다.
따로 표시되지 않은 위의 2개 bit 는 혼잡제어를 담당하는데
보통 그냥 라우터에서 QOS 정책을 써서 해결한다.
2bit를 사용하려면 특정 어플리케이션 프로그램이 필요하고
그래서 혼잡제어 2bit는 효용성이 있는지 없는지 말이 많다고 한다.
2. UDP
UDP 는 특징이 없는 것이 특징이다.
Layer 4계층이고
TCP 에서 하는 특징들중에 오류 검사만 있다
재전송도 X
비연결 지향 프로토콜이다.
왜 만들었나?
나름 대로 필요 하니까 만들었다.
용도가 다르게 개발되었다고 보면 된다.
TCP 는 통신 연결이 필요할 때 쓰는것이고
UDP 는 통신 연결이 불필요할 때 쓰는것이다
보통 UDP 는 TCP 에 비해 신속성이 있다고 하는데
연결과정이 없기 때문이라고 보면 된다.
그리고 연결이 안되니 상대적으로 신뢰성은 떨어지는 것이기도 하다.
그런데 솔직히 둘 다 0.00 몇 초 정도로 사람은 구분 할 수 없는 속도이기도 하다.
UDP 중에 ntp 서비스가 있는데
윈도우 7은 하루에 2번 서버에 요청을 해서 시간을 동기화 시킨다.
"몇시냐?" "몇시야" 라고 단순하게 끝나는 통신이기에
굳이 TCP 처럼 연결을 해서 복잡하게 할 필요 없는 것
상황에 맞게 쓰이도록 설계가 되었다.