성공과 실패를 결정하는 1%의 네트워크 원리_6
다음은 성공과 실패를 결정하는 1%의 네트워크 원리 를 읽고 정리한 내용입니다. 본 글은 CH3. 케이블의 앞은 LAN 기기였다_허브와 스위치, 라우터의 탐험입니다 🙌
🛺 [Story3] 라우터의 패킷 중계 동작
1. 라우터의 기본
- 라우터의 동작은 스위치 허브와 비슷하지만 IP와 이더넷의 차이로 인한 세부 동작의 차이점이 있다.
- 라우터는 크게 1) 중계 부분과 2) 포트 부분으로 나뉘어져 있다.
- 중계 부분은 다음 중계 대상을 판단하고
- 포트 부분은 송수신 동작을 담당한다.
- 라우터의 포트 부분은 이더넷이나 무선 LAN 외에도 ADSL, FTTH 등의 통신 기술을 지원한다.
- 라우터의 내부 구조
- 포트 부분에서 패킷을 수신하며 포트 부분의 통신 기술 규칙에 따라서 수신한다. (포트 부분의 하드웨어 부분이 패킷을 수신하는 것)
- 중계 부분에서 받은 패킷의 수신처 IP주소와 중계 대상을 동록한 표를 대조하여 중계 대상을 판단한다.
- 해당 포트로 옮기고 포트의 하드웨어에 따라서 패킷 송신 동작을 실행한다.
- 라우터의 포트는 IP 주소가 할당되어 있으며 자신이 송신처나 수신처가 된다 (스위칭 허브와의 차이점)
- 또한 통신기술이 이더넷인 경우 라우터의 포트에는 MAC 주소가 할당되어 있다.
2. 경로표에 등록된 정보
-
스위칭 허브는 MAC 주소로 중계 대상을 판단하지만 라우터는 IP 주소로 중계 대상을 판단한다.
-
중계 대상을 판단하는 표를 라우팅 테이블 혹은 경로표라고 부른다.
출처: 상위 1% 네트워크 -
수신처의 정보에는 서브넷의 주소인 네트워크 번호만 있고 호스트는 모두 0이다.
- 따라서 들어온 패킷의 수신처 IP 주소에서 네트워크 번호 부분(호스트 번호 제외)이 같은지 조사하고 중계한다.
- 네트워크 번호를 판단하기 위해 넷마스크 정보도 있다.
-
심화 내용: 수신처에 서브넷에 할당되 넷마스크 값과 경로표에 등록된 넷마스크의 값이 다를수도 있다.
- 주소 집약: 몇 개의 서브넷을 모아서 한개의 서브넷으로 간주하여 묶은 서브넷을 경로표에 등록할 수 있다.
- 예를 들어서 다음 3개의 서브넷이 라우터 B에서 패킷을 보낼 때 무조건 라우터 A에서 패킷을 중계하게 된다면 3개의 서브넷을 통합한 서브넷이 있다고 간주하고 경로표에 등록한다.
- 10.10.1.0/24, 10.10.2.0/24, 10.10.3.0/24 3개를 모두 라우터 A에서 중계할 때
10.10.0.0/16
으로 넷 마스크를 변경하여 경로표에 하나로 등록할 수 있다. (위 넷마스크로 변경하며 앞 16비트를 네트워크 번호로 보게 되기 때문)
- 한 개의 서브넷을 세분화 할 수도 있다. 또는 수신처 네트워크 번호가 실제 네트워크 번호와 다를수도 있다.
- 넷마스크 값을 모두 1로 만들어서 호스트 번호인 개별 컴퓨터를 라우팅 테이블에 등록할 수도 있다.
- 주소 집약: 몇 개의 서브넷을 모아서 한개의 서브넷으로 간주하여 묶은 서브넷을 경로표에 등록할 수 있다.
-
수신처와 넷마스크로 경로표에서 적절한 행을 찾으면
인터페이스 항목
에 들어있는 포트에서게이트웨이 IP 주소
로 패킷을 중계한다. -
메트릭
은 수신처 IP 주소의 목적지가 가까운지 먼지 나타낸다.- 숫자가 작으면 목적지가 가까운 것이다.
-
라우터는 스위치 허브와 달리 중계하는 동작과 경로표에 정보를 등록하는 동작이 분리되어 있어 중계할 때 경로표를 수정 갱신하지 않는다.
-
경로표 등록 방법
- 사람이 수동으로 등록/갱신
- 라우팅 프로토콜 구조를 사용하여 라우터들기리 경로 정보를 교환하고 라우터가 스스로 경로표에 등록
- RIP, OSPF, BGP 등등의 라우팅 프로토콜 사용
3. 라우터의 패킷 수신 동작
- PHY(MAU)와 MAC 회로에서 신호 → 디지털로 변환
- FCS로 오류 유무 점검 후 정상이면 MAC 헤더의 수신처 MAC주소로 자신에게 해당하는지 확인 (아닐경우 폐기)
4. 경로표를 검색하여 출력 포트를 발견한다
- MAC 주소 확인후 MAC 헤더 폐기
- IP 헤더를 통해서 중계 동작을 실행
- 경로표에서 중계 대상을 조사 → 수신처 네트워크 번호와 넷마스크를 활용하여 조사한다.
- 경로표에서 복수의 행이 할당될 경우
- 네트워크 번호의 비트수가 가장 긴 것을 찾는다.
- 네트워크 번호 비트수가 길면 호스트 번호가 짧으므로 호스트 번호로 할당될 번호가 작아 서브넷이 작다는 뜻이기 때문이다. (더 축소된 범위를 항상 찾는다)
- 네트워크 번호의 길이가 같다면
- 메트릭 값이 작아 가까운 곳을 중계 대상으로 선택한다.
- 네트워크 번호의 비트수가 가장 긴 것을 찾는다.
- 하나의 행도 해당되지 않는 경우
- 패킷을 폐기하고 ICMP 메세지로 송신처에 오류를 통지한다.
- 스위칭 허브의 경우 해당되지 않으면 모든 포트에 패킷을 뿌린다. (크지 않은 네트워크를 가정하여 만든 것이기 때문이다.) 하지만 라우터의 네트워크 규모(인터넷)는 매우 크기 때문에 모든 포트에 뿌리는 것은 큰 규모로 네트워크가 혼잡해지기 때문에 패킷을 폐기한다.
5. 해당하는 경로가 없는 경우에 선택하는 기본 경로
- 그렇다고 중계 대상을 모두 등록하는 것은 어려운 일이다. 따라서 기본 경로를 말하는 넷마스크가
0.0.0.0
인 경로를 등록한다. (네트워크 번호가 0이므로 비교하지 않아도 되는 경우이다) - 해당 경로의 게이트웨이 항목에 인터넷으로 나가는 라우터를 등록한다 → 기본 경로, 기본 게이트웨이라고 말한다.
- 이렇게 넷마스크를 여러 방면으로 활용하여 서브넷의 네트워크 주소와 서버의 IP 주소를 모두 경로표에 섞어서 등록할 수 있다.
6. 패킷은 유효 기한이 있다
- 라우터는 중계 대상을 찾아내고 포트에서 송신하기 전에 IP헤더 필드의 TTL(Time To Live) 필드를 갱신해야한다.
- 라우터를 경유할 때마다 위 필드 값을 1씩 감소시키고 0이 되면 유효 기한이 만료된 것으로 패킷을 폐기한다.
- 패킷이 무한루프 도는 것을 방지하기 위함이다.
- 위 값은 64 혹은 128로 설정하고 0이 되면 폐기한다 → 지구 전체를 경유해도 라우터의 갯수는 많아야 수십개이기 때문이다.
7. 큰 패킷은 조각 나누기 기능으로 분할한다
- 라우터의 포트 부분은 이더넷 뿐 아니라 다른 LAN이나 통신 회선일 수 있는데 그러면 패킷의 최대 길이가 작거나 여분의 헤더를 추가하면서 가능한 패킷의 길이가 짧아질 수 있다.
- 즉, 입력 패킷의 최대길이와 출력 포트의 최대 길이가 다른 경우가 있다.
- 이 경우 IP 프로토콜에서 fragmentation으로 패킷을 분할해 짧은 길이로 만들어서 중계한다. (패킷이 모두 만들어진 이후에 분할을 하는 것이다)
라우터의 Fragmentation
- 출력측 MTU를 조사해서 그대로 중계할 수 있다면 바로 송신한다.
- 아닌 경우 IP 헤더의 필드를 조사해서 분할해도 되는지 확인한다.
- 만일 분할 불가라면 패킷을 폐기하고 ICMP를 처리한다.
- 분할 한다면 TCP헤더부터 분할을 한다 (출력 MTU에 맞춘다) → IP 입장에서는 TCP 헤더도 데이터의 일부이다.
- 분할한 패킷에 IP 헤더를 추가하고 분할 핵심 정보를 IP 헤더에 추가한다.
8. 라우터의 송신 동작은 컴퓨터와 같다
- 출력 포트에 따라서 송신 동작을 수행한다.
- 이더넷인 경우 패킷 앞에 MAC 헤더를 추가하고, 값을 설정하여 패킷을 완성시켜 전기 신호로 변환한다.
- 수신처 MAC 주소 입력
- 게이트웨이 항목이 있다면 해당 IP 주소가 다음 목적 주소이다. 없다면 최종 수신처인 IP 헤더의 IP 주소가 다음 목적 주소이다.
- IP 주소가 정해지면 ARP로 MAC주소를 조사하고 결과를 수신처 MAC주소로 설정한다.
- 라우터도 ARP 캐시가 있으므로 캐시를 먼저 확인하고 없다면 ARP로 조회한다.
- 송신처 MAC 주소 입력
- 출력 포트의 MAC 주소를 입력하고 타입 필드에 0800을 설정한다.
- 수신처 MAC 주소 입력
- 전기 신호로 변환할 때 전이중 반이중 모드에 따라서 신호를 송신한다.
- 출력 포트가 이더넷이라면 송신 패킷은 스위칭 허브를 경유하여 다음 라우터에 도착한다. 이렇게 반복하여 최종 목적지에 도착한다.
9. 라우터와 스위칭 허브의 관계
- IP 구조는 스스로 패킷은 운반하는 수단이 없으므로 패킷을 이더넷에 의뢰하여 운반한다.
- 따라서 라우터는 스위칭 허브에 패킷을 운반하는 일을 의뢰하는 것이다.
- 패킷은 바로 다음 라우터 목적지까지만 스위칭 허브에 의뢰하여 운반되고 이것이 반복되어 최종 수신처에 전달되는 것이다.
- 이더넷 외의 무선 LAN, 통신 회선도 같은 역할이다.
- IP 는 이렇게 다양한 통신 기술에 의뢰하여 패킷 운반을 의뢰할 수 있고 따라서 인터넷이라는 거대한 네트워크 구성이 가능한 것이다.
🛺 [Story4] 라우터의 부가 기능
1. 주소 변환으로 IP 주소를 효율적으로 이용한다
주소 변환
- 등장 배경
- 주소는 고유해야하는데 각각에 고유한 주소를 부여하면 고갈되게 되었다.
- 해결 방법
- 독립된 네트워크끼리는 중복된 주소를 사용해도 문제가 안된다는 원리를 이용하여 사내 기기에는 다른 회사와 중복된 주소를 사용할 수 있도록 했다.
- 사내용 주소를 private 주소, 외부에서 사용되는 고유한 주소를 global 주소로 부른다.
- private 주소는 아래 범위에 한정된다.
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
- 사내 네트워크가 인터넷과 왕래할 때는 공개용 서버에 글로벌 주소를 할당하고 인터넷과 통신하도록 한다. 사내 네트워크는 인터넷과 직접 통신하지 않도록 한다 ⇒ 주소 변환
- 주소 변환 기본 동작
-
패킷을 중계할 때 IP 헤더에 기재된 IP 주소와 포트 번호를 바꿔쓴다.
-
TCP 접속 동작에서 최초로 흐르는 패킷을 인터넷에 중계할 때 송신처 IP주소를 private 주소에서 global 주소로 변환 + 포트 번호 바꾸고 해당 private 주소, 포트와 global 주소 및 포트를 주소 변환 장치의 대응표에 기록한다.
- 여기서 global 주소는 주소 변환 장치(라우터나 방화벽)의 인터넷 측에 있는 포트에 할당된 주소이다.
- 포트번호는 미사용 번호를 적절하게 사용한다.
-
회신 패킷이 돌아올 때 기재되어 있는 global 주소와 포트 번호를 주소 변환 장치에서 private 주소와 기존 포트로 바꾸어 사내 네트워크에 패킷을 보낸다.
- global 주소는 주소 변환 장치에 할당된 주소이므로 해당 장치에 패킷이 도착하게 되어있다.
-
이후 패킷도 대응표에 적힌대로 변환하여 중게된다. 접속 동작이 끝나면 대응표에 정보는 삭제된다.
-
인터넷에서 보면 주소변환장치가 통신 상대로 되어 있는 것이다.
출처: 상위 1% 네트워크
-
3. 포트 번호를 바꿔쓰는 이유
- 포트 번호를 바꿔쓰지 않으면 Private 주소와 global 주소가 1 대 1로 대응해서 필요하다.
- 접속 후 삭제하므로 동시접속 대수만큼 필요하지만 여전히 효율적이지 못하다.
4. 인터넷에서 회사로 액세스한다
- 인터넷에서 사내로 액세스 할 때는 대응표가 없다면 해당 global 주소에 대응되는 private 주소를 알 수 없다.
- 사내에서 먼저 인터넷으로 액세스 하지 않으면 연결할 수 없기 때문에 부정친입을 방지하는 효과가 있다.
- 인터넷에서 회사로 액세스 하고 싶다면 사전에 대응표에 수동으로 기록해두면 된다.
-
이 경우 사내의 private 주소를 할당한 서버를 공개할 수도 있다. → 이 때는 이 global 주소를 dns 서버에 등록한다.
출처: 상위 1% 네트워크
-
5. 라우터의 패킷 필터링 기능
- 패킷을 중계할 때 MAC 헤더, IP 헤더, TCP 헤더에 기록된 내용을 조사해서 사전에 설정한 조건에 합하면 중계하거나 폐기한다.
- 방화벽이나 소프트웨어는 이 원리로 부정친입을 방지한다.
- 원리는 간단하나 조건 설정은 어렵다.
- 만일 인터넷으로 들어오는 패킷을 모두 차단하면 양방향으로 주고받아야 TCP 접속 동작 등이 가능하기 때문에 사내에서 인터넷으로 흐르는 동작도 할 수 없게 된다.
[용어]
ICMP - ****Internet Control Message Protocol 패킷을 운반할 때 발생하는 오류를 통지하거나 제어용 메세지를 보내는 프로토콜
PPPoE - PPP over Ethernet, ADSL, FTTH 광대역 회선을 제어하는 방식 중 하나