개발자는 OSI 5계층, 6계층, 7계층 영역을 코딩한다. 어떤 기능을 넣을 것인지(7계층), 어떻게 인코딩하고 암호화 할 것인지(6계층), 어떻게 동기화 할 것인지(5계층)를 코딩한다. 하지만 전송계층(4계층)에는 접근하지 못한다. 4계층 전송계층 영역의 프로토콜 TCP와 UDP 프로토콜은 OS 내부에 구현되어 있기 때문이다. 그러므로 우리는 4계층으로 통하는 인터페이스에 접근해야한다. 그것이 우리가 잘 아는 소켓(Socket)이다.
( TCP와 IP는 OS마다 동일하지만 LAN카드는 종류별로 다름으로 종류에 맞는 드라이버 루틴(인터페이스)를 갖는다. )
대부분의 운영체제는 TCP/IP 모델을 사용한다. TCP/IP는 미국 국방성이 만든 전송모델이다. 과거에는 MS사가 만든 NETBEVI나 IPX/SPX같은 모델도 존재했다. 두 모델은 회사 내에서 이루어지는 정보 공유 같은 LAN에서 주로 사용하는 전송 모델이다. 그래서 신속성보다는 정확성에 더 초점을 맞추었다. 하지만 인터넷이 발달하기 시작하자, 정보의 이동이 중요해졌고 정확성보다는 신속성에 중요해졌다. IP 프로토콜은 이 조건을 충족하기에 충분하였고 그 결과 TCP/IP는 현재 전송모델의 거의 표준이 되었다.
TCP/IP 계층 구조
TCP/IP 계층에서 가장 중요한 것은 주소를 설정하는 것이다. TCP와 UDP가 송신측(source)과 수신측(destination)의 Port 번호를 세그먼트에 저장한다. IP는 송신측과 수신측의 IP주소를 패킷에 저장한다. 그리고 마지막으로 송신측과 수신측의 MAC 주소를 프레임에 저장하면 데이터 전송 준비가 마무리된다.
ARP (Address Resolution Protocol)
여기서 수신측 MAC주소는 라우터를 거칠 때마다 달라진다. 라우터가 수신측 MAC주소를 바꾸며 데이터의 경로를 설정하기 때문이다. 라우터에 접근한다는 의미는 LAN을 벗어나 WAN으로 접근한다는 의미이다. 그러므로 송신측 IP계층은 디폴트 게이트웨이(첫 라우터)까지의 MAC 주소만 알면 된다. 나머지는 라우터들이 알아서 IP주소를 통해 수신측 MAC주소를 갈아끼우기 때문이다.
만약 WAN이 아닌 LAN에서 통신한다면 LAN에 속한 장비의 MAC주소를 알아야한다. 정리하면, 디폴트 게이트웨이도 LAN의 일부이므로, IP계층에서 수신측 MAC주소를 설정할 때는 동일 네트워크(LAN)에 있는 장비의 MAC주소를 설정해야한다.
유무선 공유기를 사용하는 장소는 디폴트 게이트가 192.168.XXX.1로 설정되어 있을 것이다. 공유기를 사용하지 않는다면 인터넷사가 제공하는 라우터가 디폴트게이트웨이가 된다.
이때 수신 측의 IP주소는 알지만 수신 측 장비의 MAC주소(LAN)를 모르는 경우가 생긴다. 이때 사용하는 프로토콜이 ARP(Address Resolution Protocol)이다. ARP 규약대로 패킷이 만들어진다. ARP 패킷의 목적은 LAN 안에서 수신측 IP 주소와 일치하는 장비의 MAC 주소를 알아내는 것이다. ARP는 IP주소는 알지만 MAC주소는 모르기에 Broadcast 방식으로 네트워크 전역에 ARP 패킷을 뿌린다. 그러면 IP주소에 해당하는 장비가 반응하여 Reply한다. Reply에 MAC 주소가 담겨져 온다. MAC 주소를 얻은 뒤에야 본격전인 데이터 전송이 시작된다.
cmd창에 > arp /a 명령어를 치면 ARP 테이블이 나온다.
ARP 테이블은 최근에 사용한 IP주소를 MAC주소와 매핑하여 관리한다. 그래서 특정 IP주소로 데이터를 전송할 때 ARP 테이블을 스캔하여 MAC 주소를 알아낸다. 만약 ARP 테이블에 MAC 주소가 없다면 그때 ARP 패킷을 Local Network에 Broadcast하는 것이다. 유형 컬럼에는 '동적'과 '정적'이 있다. 동적은 ARP 패킷을 Broadcast해서 알아낸 MAC주소를 의미하고 정적은 관리자가 직접 입력한 MAC주소를 의미한다.
192.168.0.1은 내 공유기 주소이다. 노트북이 공유기와 연결되면 공유기 IP주소는 알지만 MAC주소는 모른 상태이다. 그러므로 ARP 패킷을 뿌려 MAC주소를 알아낸 후, ARP 테이블에 저장시켰기 때문에 ARP 유형에 동적이라고 출력되는 것이다.
RARP (Reverse Address Resolution Protocol)
RARP는 본인의 IP주소를 확인 할 때 사용하는 프로토콜이다. LAN카드에는 MAC주소가 저장되어 있다. MAC주소를 통해 본인의 IP주소를 파악하는 프로토콜을 RARP라고 한다. 일반적인 컴퓨터는 파일시스템에 IP주소가 저장되어 RARP 프로토콜을 사용할 필요가 없지만, 저장장치가 장착되지 않은 시스템은 RARP 프로토콜이 필요하다.
ICMP(Internet Control Message Protocol)
송신측(source)과 수신측(destination)은 정보가 포함된 데이터만 주고 받는 것이 아니다. 프로토콜을 통해 오류나 흐름을 제어하기 위해 열심히 제어 데이터를 주고 받는다. OSI 7계층의 프로토콜들은 그래서 기본적으로 오류제어와 흐름제어를 할 수 있는 기능을 포함하고 있다.
여기서 오류가 발생했을 때, 오류 메세지(Message)를 생성한다. 이 오류 메세지를 전송하는 기능을 담당하는 프로토콜이 ICMP이다. 네트워크 관리자는 ICMP로 적힌 메세지를 보고 네트워크의 어떤 부분에서 오류가 났는지 파악한다.
우리는 cmd창에 ping 명령어를 쳐서 수신측과 통신이 원할한지 여부를 파악한다. nslookup 명령어로 구글의 ip주소를 알아낸 후, ping 명령어를 치면 수신측과 ICMP 프로토콜로 대화할 수 있다.
여기서 TTL(Time To Live)이다. 해당 패킷이 살아있는 시간을 나타낸다. 살아 있는 시간은 패킷이 거쳐가는 장비의 수로 결정된다. TTL에 할당된 비트 수는 8bit이므로 최대 255가 표현된다. 거기서 거쳐가는 라우터 개수에 따라 1씩 차감한다. 구글서버까지 TTL이 115가 뜨니 140개의 라우터를 거쳐간 것 같다. ( OS마다 TTL이 다르다고 해서... 정확하게 계산한 건지는 모르겠다. )
nslookup 명령어로 naver서버의 ip주소를 알아낸 후, ping을 보내봤다. 하지만 이렇게 요청시간이 만료되었다고 출력된다. 이런 경우는 데이터 전송에는 문제가 없지만 수신 측 서버에서 방화벽을 쳐놓아 ping 요청을 막아놓은 경우를 나타낸다.
이렇듯 단순히 정보만을 전송하는 것이 아니라, 수신 측(destination)의 주소는 정확히 들어갔는지, 수신 측과 통신은 제대로 이루어지는지, 내 주소는 올바르게 기입됐는지 등등을 점검하는 프로토콜을 통해 안정성있게 데이터를 전송할 수 있게 된다.
참고자료
'CS > NETWORK' 카테고리의 다른 글
LAN, WAN 그리고 MAN (0) | 2021.06.24 |
---|---|
교환 시스템(Switching) (0) | 2021.06.24 |
OSI 7계층 기본 정리 (0) | 2021.06.21 |
Network 기본용어정리 (0) | 2021.06.21 |
다중화기(Multiplexer) (0) | 2021.06.21 |