데이터링크 계층과 인터페이스
2.1 데이터링크의 기능
- 인터”넷” = 데이터링크
- 데이터 통신 과목에서 배운 데이터링크의 4기능(프레이밍, 흐름제어, 에러제어, 회선 제어)을 IP가 알아야 할 필요는 없다.
- 그럼 IP는 인터넷에 쓰이고자 하는 데이터링크 기술에 대해 무엇을 알아야 하는가?
우리는 데이터링크 계층을 다루면서 데이터링크 계층 자체의 기능보다는 IP에서 데이터링크의 의미를 이해하기 위해 IP가 인터페이스라고 부르는 부분을 중점으로 알아볼 것이다.
2.2 IP가 데이터링크 계층에 요구하는 것
- 캡슐화(Encapsulation) 데이터링크 계층에서 IP 데이터그램을 페이로드에 싣고서 자신의 짐칸에 IP 데이터그램이 실려있다는 표시를 해야 한다. 이것이 IP 기술이 데이터링크 기술에게 요구하는 첫번째 조건이며, 부가적으로는 몇 바이트까지 실을 수 있느냐에 대한 MTU(Maximum Transmission Unit) 정보도 제공해야 한다.
-
ARP(Address Resolution Protocol) 시베리아 횡단 열차의 예시에서, 바퀴 없는 객실만으로는 이동이 불가능한 것처럼, IP 주소만을 갖고는 데이터가 배달될 수 없다. IP 주소는 발이 없다. 늘상 한 링크를 건널 때마다 데이터링크 기술에 의존해야 한다. 예를 들어, wifi나 이더넷과 같은 shared medium 종류의 데이터링크 기술에서는 MAC 주소(한 홉을 가는데 필요한 주소로 하드웨어 하나당 하나씩 할당된다.)를 사용해야 하는 데이터링크 기술들은 특히나 해당 IP 주소만으로는 불가능하다. 따라서 IP는 데이터링크 기술이 스스로 데이터를 전송해하는 기능을 갖추기를 요구한다.
- MIB(Management Information Base) - 나중에 더 구체적으로 설명하게 될 것이다. 관리자(Manager)와 대리인(Agent) 사이에 특정한 정보를 주고 받는 것이 네트웍 관리의 기본이다. 관리되어야 할 특정한 정보, 자원을 객체라 하는데, 이런 객체들을 모아놓은 집합체를 MIB(Management Information Base)라고 한다.
2.2 IP가 데이터링크 계층에 요구하는 것(1) - 캡슐화
- 캡슐화(encapsulation)
- 예시) IPv4버전의 IP데이터그램이 있음을 표시하기 위해 이더넷 프레임에는 0x0800이라는 숫자를 적는다.
- 그 밖에 프레임 타입에 어떤 숫자가 들어가느냐에 따라서 다음에 따라오는 데이터의 내용이 달라진다.
- 예시) IPv4버전의 IP데이터그램이 있음을 표시하기 위해 이더넷 프레임에는 0x0800이라는 숫자를 적는다.
- 위의 그림은 각각의 데이터링크 기술의 헤더에서 IP데이터그램이 실려있음을 표시하는 부분을 나타낸다.
- 첫번째 유선 LAN
- 두번째 PPP
- 세번째 무선 LAN
- 네번째 이더넷
2.2 IP가 데이터링크 계층에 요구하는 것(2) - ARP
- IP는 각 라우터에서 목적지 IP주소를 가기 위해 다음에 거쳐야할 라우터(“홉”)을 알아낼 수 있다.
특정 하드웨어에서 데이터가 출발하여 여러 라우터를 거친 후 최종 목적지에 도달하려면 가장 먼저, 출발지에서 넘어갈 최초의 라우터(다음 홉)을 알아야 한다.
- 라우팅 테이블 확인 방법 (Windows)
- route -4 print
- netstat -r
- netsh(가장 강력) interface ip show route
- 라우팅 테이블 확인 방법 (Windows)
위의 테이블은 라우팅 테이블로, 해당 PC의 패킷이 특정 목적지를 가기 위해서 어디로 나가야할지를 정해준다. 그런데 네트워크 대상이 목적지의 IP 주소이고, 실제로 가야하는 목적지와 네트워크 마스크를 AND시킨 결과가 네트워크 대상과 일치할 경우, 해당 경로로 패킷이 나가면 된다.
라우팅 테이블에서 주어진 경로는 목적지에 도달하기 위해 거쳐야할 바로 다음 홉까지만이다. 바로 다음 홉은 게이트웨이에서 IP주소를 확인할 수 있고, 그 게이트웨이를 찾아가기 위해서 진입해야되는 인터페이스들이 다음 컬럼으로 나타난다. 따라서 해당 목적지로 가려면 호스트에 설치된 인터페이스들 중 정해진 인터페이스로 나와 게이트웨이 IP 주소로 가면 되는 것이다.
인터페이스
네트워크에 연결될 수 있는 기기는 한 개 이상의 인터페이스가 설치되어있다. 예를 들어, 어떤 안드로이드 폰에는 wifi 인터페이스와 5G 인터페이스, LTE 인터페이스 등이 있다. 이 각각의 인터페이스는 서로 다른 IP 주소를 한 개씩 할당받는다. 따라서 IP 주소는 컴퓨터 에 붙는 것이 아니라, 인터페이스가 붙는 것이다.
우리가 아는 것들보다도 아주 다양한 포맷들의 인터페이스가 기기에 존재한다. virtual 한 인터페이스, 블루투스 등등
netsh
Netsh는 현재 실행 중인 컴퓨터의 네트워크 구성을 로컬로 또는 원격으로 표시하거나 수정할 수 있는 명령줄 스크립팅 유틸리티로, Netsh.exe라는 명령 프롬프트를 열 수 있다. 이 프롬프트에서 다양한 구문을 통해서 원하는 값을 얻을 수 있고, exit을 통해 종료할 수가 있다.
그런데 문제는 이 라우팅 테이블에 쓰여진 게이트웨이, 즉 IP 주소만 알아서는 패킷이 보내질 수 없다.
- IP 주소는 발이 없다.
- 패킷을 물리적으로 전달해주는 “발”의 역할을 링크 기술이 해주어야 한다.
- 대표적으로는 MAC 주소를 이용해서 전송이 된다.
- 각 링크마다 “발을 갈아 끼우고” 전진
- 여러 개의 서로 다른 링크를 거쳐지나가야할 경우, 다른 링크로 넘어갈 때마다 라우터에서 프레임워크를 갈아끼우면서 다른 링크에서도 이어 패킷이 전송될 수 있도록 해야한다.
- 어떤 기술들은 나름의 배달 방식이 있다.
- 공유형 링크와 점대점 링크
- 링크 계층 기술의 2타입
- 공유형 링크(shared medium) - wifi/ethernet
- 하나의 공유된 전송 회선에 여러 노드가 접속되어있는 형태의 링크를 말한다.
- 인터페이스라는 문을 열고 나오면 호텔 복도처럼 하나의 길 위에 여러 곳으로 통하는 문들이 있다.
- MAC 주소가 필요
- 하나의 공유된 전송 회선에 여러 노드가 접속되어있는 형태의 링크를 말한다.
- 점대점 링크(point-to-point link) - ADSL
- 두 노드가 1:1로 직접 연결되어있는 형태의 링크 기술이다.
- 인터페이스라는 문을 열고 나오면 다른 한 곳으로 가는 길 하나만 있을 뿐이다.
- ADSL : 전화선을 사용
- ARP가 전혀 필요 없다. 따라서 MAC 주소도 필요 없다.
- 두 노드가 1:1로 직접 연결되어있는 형태의 링크 기술이다.
- 공유형 링크(shared medium) - wifi/ethernet
- 주소 결정 프로토콜 (ARP)
- 결정(resolution): 공유형 링크는 한 회선을 여러 개의 노드가 공유하고 있기 때문에, 인터페이스를 통해 패킷이 나가더라도 원하는 라우터를 선택해서 전송되어야 한다.
- 원하는 라우터의 IP 주소를 알고 있다고 해서, 다음 홉을 갈 수 있는 것이 아니다. 공유형 링크에서는 MAC 주소를 알아야만 원하는 라우터로 패킷을 보낼 수가 있다.
- ARP: 다음 홉이 되는 라우터의 IP 주소를 안다는 가정 하에, 이 라우터의 IP 주소를 MAC 주소로 변환해주는 프로토콜
- “이 IP 주소가 무슨 MAC 주소인지 결정하는 것”
- IP -> MAC 변환 방법 : 매핑을 결정해줄 IP 주소를 ARP 메시지에 담아 브로드캐스트로 전송한다. 모든 컴퓨터가 이를 듣지만, IP 주소에 해당하는 컴퓨터만이 이를 인식하고 (나머지 컴퓨터는 메시지를 폐기) 자신의 MAC 주소를 ARP 응답 메시지(유니캐스트)를 보냄으로써 MAC 주소를 알아낼 수가 있다.
- 따라서 네트워크 기술은 원하는 라우터의 IP 주소를 갖고 직접 패킷을 배달해주는 ARP를 지원해야만 데이터링크 기술로 사용될 수 있다.
- 결정(resolution): 공유형 링크는 한 회선을 여러 개의 노드가 공유하고 있기 때문에, 인터페이스를 통해 패킷이 나가더라도 원하는 라우터를 선택해서 전송되어야 한다.
- 이더넷이나 와이파이에 연결된 모든 인터넷 사용 컴퓨터는 ARP 캐쉬를 가진다.
- ARP 캐쉬라는 번역 테이블이 IP 주소를 MAC 주소로 번역해준다.
- 이 ARP 캐쉬는 해당 IP 주소에 무언가를 전송해야하는 일이 있을 때마다 컴퓨터가 MAC주소를 찾아나섬으로써 엔트리들이 채워진다.
- 이 ARP 캐쉬를 보기 위해서는 “arp -a [-v]” / “netsh interface ip show neighbor” 명령어를 입력하면 된다.
- 유형 컬럼 : 매핑이 동적인지 정적인지를 나타낸다.
- 동적 : ARP 프로토콜에 의해서 동적으로 만들어지는 엔트리로, 다른 호스트와의 통신을 통해 알아온 정보이다. 일정시간만 유지된다.
- 정적 : 관리자에 의해 정적으로 설정되는 엔트리로, 관리자가 삭제하거나 시스템을 종료할 때까지 유지된다.
- 유형 컬럼 : 매핑이 동적인지 정적인지를 나타낸다.
- ARP는 오로지 다음홉 IP 주소에 대해서만 매핑하기 때문에, ARP 캐쉬에는 다음 홉들에 대한 정보만 있다.
- ARP 캐쉬라는 번역 테이블이 IP 주소를 MAC 주소로 번역해준다.
2.2 IP가 데이터링크 계층에 요구하는 것(3)
-
MIB
- IP 프로토콜을 통해 원격 장비/소프트웨어(서버, 라우터, 서브, 워크스테이션, 스위치 등등)를 제어/모니터할 때
- 무엇이 어떤 식으로 제어되어야 하는가에 대해 작성된 매뉴얼과 같은 문서이다.
- read/write가 가능하다.
- 데이터링크 계층 장비의 경우
- 예: ??
2.3 인터페이스
- 커널에 상주하는 IP의 관점: 각 데이터링크 = “인터페이스”
- 데이터링크 기술을 컴퓨터에 설치하여 사용한다. 커널 안의 IP 기술은 하드웨어에 전혀 관심이 없다. 그저 데이터링크는 인터넷에 연결되기 위해 거쳐야할 “문”으로 생각한다. 이러한 관점에서 데이터링크는 인터페이스라고 불릴 수 있다.
- IP에게 인터페이스는
- 데이터링크 기술을 구현하는 하드웨어(ex: 랜카드)를 지칭하는 것이 아니라, 커널에서 대표하는 자료구조를 말한다.
- 인터페이스가 가진 정보
- IP 주소와 페이로드 칸의 크기, 사용할 수 있는 상태인지 여부
- 디바이스 드라이버에 대한 포인터 정보
- 안드로이드 스마트폰 인터페이스들(ifconfig 명령 출력)
- wlan0 : wifi card
- UP : 커널이 해당 인터페이스를 인식하고 있음
- RUNNING : 실제 사용 가능함
- IP주소 : 해당 인터페이스에 붙은 IP 주소
- rmnet0 : LTE
- POINTTOPOINT : 점대점 링크
- NOARP : ARP가 필요 없음
- 리눅스에서 인터페이스를 보는 또 다른 방법
- netstat -i
- 인터페이스 상태
- 인터페이스 상태의 앞자만 딴 flag로 표현된다.
- ex) O : NoARP
-
로컬 룹백 인터페이스 - 하드웨어와의 연결 없이, 컴퓨터 내부 통신을 위한 인터페이스
- 인터페이스는 하드웨어 NIC을 커널 내에서 대표하는 자료 구조로, 물리적인 동작을 제어한다. 따라서 하드웨어가 커널 내의 인터페이스와 1:1 대응되어야한다. 그런데 로컬 룹백 인터페이스가 예외의 케이스이다.
- 로컬 룹백 인터페이스는 로컬 안의 프로세스들 간의 통신(inter-process communication; IPC)을 위한 인터페이스
- IP 프로토콜 중 TCP 프로토콜은 프로세스가 local이든 remote이든 상관없이 일관적인 방법으로 패킷을 보낼 수 있도록 해준다. 다만 이 중에서 local 프로세스로 보내지는 패킷만이 IP계층을 거친 후 로컬 룹백 인터페이스로 들어가는 것이다.
- 컴퓨터 안의 프로세스들에서 생성되는 패킷이 IP 계층을 지나 다양한 링크 계층으로 들어가게 될 텐데, 이들 중에 로컬 룹백 인터페이스만이 거울처럼 다시 로컬의 IP 계층으로 튕겨들어간다.
-
로컬 룹백 인터페이스 =/= 룹백 인터페이스
-
이 인터페이스의 IP 주소는 127.x.x.x로, 컴퓨터가 부팅만 되더라도 커널 내에 자동생성
- 라우팅 테이블에서 항상 찾아볼 수 있다.
- 안드로이드 스마트폰의 로컬 룹백 인터페이스의 페이로드 칸은 64KB로 굉장히 큰 값이다. 물리적인 제한이 없기 때문에 사실 이것보다 더 크게 잡아도 문제될 것은 없다.
-
MTU(Maximum Transmission Unit) = 주어진 데이터링크 계층 프레임의 페이로드 최대 크기
- IP의 관점: 자신이 들어갈 수 있는 최대 크기
- 이더넷 :1500바이트
- 보통 속도가 빠른 기술일수록 MTU 값이 크다.
- 어떤 패킷이 송신지점에서 수신지점까지 가는 데에 여러 개의 링크를 거친다고 할 때, 그 링크들마다 서로 다른 MTU가 있을 것이다. 이 중 가장 작은 MTU가 P(path)MTU로 뽑힌다.
- 따라서 패킷이 송신될 때 이 PMTU의 크기로 잘라 보내면 그보다 더 작은 MTU를 가진 링크를 만날 걱정 없이 송신할 수 있게 된다.
- 사용자 데이터 크기가 MTU를 넘어가면?
- 데이터그램을 쪼개어(fragmentation) 각각 프레임에 담는다.
Wireshark
- 특정 인터페이스를 선택해서 해당 인터페이스에서 오고 가는 패킷을 다 잡아 보여주는 기술
- 데이터링크 계층 프레임, IP 데이터그램 등 다양한 정보 확인 가능
Comments