이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다.
지난 포스팅에는 OS의 protocol stack과 LAN adapter의 역할인, packet을 전기 신호로 변환하고 송출하는 부분을 살펴봤고 ethernet에서 packet이 어떻게 움직이는지 아주 간단하게 살펴봤다. 이 글에서는 packet이 hub와 router를 거쳐 어떻게 인터넷으로 움직이는지 살펴본다.
LAN adapter가 발송한 전기 신호는 hub와 router가 중계해서 목적지로 이동한다. 이 때 hub와 router는 packet header와 내부에 있는 table을 참고해 움직인다. 이 때 hub와 router는 data 부분은 보지 않는기 때문에 TCP header나 HTTP header 등의 내용은 모두 신경쓰지 않는다.
이 글에서는 위 그림과 같이 repeater hub, switching hub, router를 거쳐 인터넷으로 나가는 것을 가정해 설명한다.
keyword : twitsed pair cable, crosstalk, repeater hub, switching hub, 전이중, 반이중, collision, routing table, 주소 변환, global address, private address
LAN twisted pair cable
LAN adatper의 PHY(MAU) 회로에서 packet을 전기 신호로 바꾸고, 이는 RJ-45 connector를 통해 twisted pair cable로 들어간다.
잡음으로 인해 약해지는 신호
이 때 송출한 신호가 그대로 도착하는 것이 아니라 잡음이나 에너지 손실 등의 문제로 인해 신호가 약해진다. 극단적인 경우에는 위 그림과 같이 알아볼 수 없는 형체가 되기도 한다. 이러한 변형을 최대한 줄이기 위해 twisted pair cable을 사용한다.
Twisted Pair Cable
twisted pair cable은 위 그림처럼 cable을 꼰 형태로, +와 -를 꼬아 만든다. 그러면 아래쪽의 제일 왼쪽처럼 한쪽은 오른쪽으로, 한쪽은 왼쪽으로 전류가 흐르고 이는 원을 만든다.
잡음의 원인은 크게 2종류가 있는데, 외부로부터 발생하는 전자파과 인접한 cable로부터 누설되는 전자파가 그것이다. cable은 도체이기 때문에 전자파가 발생하면 cable에는 전류가 흐르게 된다. (고등물리 물리를 배웠다면 알겠지만, 오른나사 법칙에 따라 전류가 흐른다.)
첫 번째 문제인 외부로부터 발생하는 전자파는 선을 꼬는 것으로 막을 수 있다. 위 그림의 왼쪽처럼 외부 noise로 인해 발생하는 전자파에 의한 것이다. 이 경우 오른나사 법칙에 의해 noise가 약해진다.
두 번째 문제인 인접한 cable로부터 누설되는 전자파는 crosstalk라고도 한다. 이것은 위 그림의 위/아래처럼 꼬는 간격을 다르게 해서 설정한다. 그렇게 하면 +와 -에 의한 noise 영향이 반대가 되어 서로 상쇄되고, noise가 줄어들게 된다.
Repeater Hub
이전 포스팅에도 설명했지만 repeater hub는 ethernet의 기본 원리인, [전체에 packet을 뿌리고 수신처 MAC 주소가 맞는 기기만 packet을 수신한다.]를 따른다. repeater hub는 이를 따라 받은 신호를 뿌리는 역할을 한다.
repeater hub는 크게 RJ-45 connector, PHY(MAU) 회로, repeater 회로 3가지로 이루어진다.
- LAN adapter가 RJ-45 connector로 신호를 송/수신하듯, repeater hub는 RJ-45 connector로 신호를 송/수신한다. 이 때 MDI/MID-X 2종류로 결선하는데, MID는 RJ-45 connector와 PHY(MAU)를 직접 결선한 것을, MID-X는 x자로 교차해서 결선한 것을 의미한다.
- RJ-45 connector를 거쳐 PHY(MAU)에 들어간 신호는 repeater 회로에 들어간다. repeater 회로는 들어간 신호 그대로 connector에 송출하는 역할을 한다.
- 그러면 해당 repeater hub에 접속한 모든 기기에 신호가 전달되며, 신호를 수신한 기기는 MAC header에 있는 MAC address를 확인한다. 만약 자신이 수신처면 받고, 아니면 버린다.
repeater hub는 신호를 그대로 뿌리기만 하는 것이기 때문에, data 변화된 것 같아도 그대로 뿌린다. 이 신호는 어차피 TCP가 FCS를 사용해 확인하기 때문에 괜찮다.
Switching Hub
Switching Hub의 중계 동작
PHY(MAU)까지는 repeate hub와 동일하다. RJ-45 connector와 PHY(MAU) 회로는 MID나 MID-X로 연결되어 있고, twisted pair cable에서 신호가 들어오면 PHY(MAU)로 흘러간다.
PC의 LAN adapter의 경우 MAC address가 할당되어 있어 신호를 받았을 때 자신에게 온 것이 아니면 폐기한다. 그렇지만 switching hub의 RJ-45 connector에 있는 회로 부분, port는 MAC address를 검사하지 않고 buffer memory에 저장한다. 따라서 switching hub port에는 MAC address가 없다.
- PHY(MAU)에서 cable 신호를 공통 신호로 변환하고 이는 MAC 회로로 들어간다.
- MAC 회로에선 FCS를 확인한다. 문제가 없으면 buffer memory에 저장한다.
- MAC address table을 보고 수신처 MAC address에 해당되는 것이 있는지 확인한다. 있으면 switch 회로로 간다.
- switch 회로를 거쳐 출력 port에 packet을 운반하면 MAC 회로와 PHY(MAU)를 거쳐 cable에 신호가 흘러간다. 이 때 그 cable에 누군가가 이미 송신 중이면 잠시 기다리고, 끝나면 송신한다. 송신 중에 수신이 오면 jamming 신호를 보낸다. (이전 포스팅의 LAN adatper와 동일하다.)
switch 회로
switch 회로는 위 그림과 같이 matrix로 생겼다. 왼쪽이 입력, 아래쪽이 출력으로 구성되어 있다.
만약 입력이 2에서 왔다고 하고, 그 입력에 대한 MAC address table을 조사한 결과 port 8번이었다고 하자. 그러면 8번에 대한 출력 switch가 연결과어 8번 port로 입력이 흘러간다.
MAC address table 등록/갱신
switching hub는 packet을 수신했을 때 송신처 MAC address와 port를 MAC address table에 등록한다. 단 1번이라도 수신한 경우 그 정보를 등록한다. 이 정보는 일정 시간이 지나면 삭제하며, 보통 몇 분을 기준으로 잡는다. 만약 문제가 발생한 경우 자체적으로 MAC address table을 초기화하고 새롭게 정보를 등록하기 때문에 문제가 발생하지 않는다.
예외 동작
위 그림과 같이 switching hub에 repeater hub가 접속되어 있는 경우를 생각해 보자.
- A가 보낸 packet은 repeater hub에 도착하고, 연결된 모든 port인 B와 switching hub에 도착한다.
- switching hub는 B가 repeater hub에 연결되어 있는 것을 알기 때문에 다시 repeater hub에 보낸다.
- 그러면 repeater hub는 B로 같은 packet을 보낸다.
이 경우 같은 packet이 2번 보내질 수 있으므로, switching hub는 수신 port와 송신 port가 같은 경우에는 packet을 버린다.
해당 기기로부터 packet이 switching hub로 한 번도 오지 않았거나 시간이 지나 MAC address table에서 삭제된 경우, MAC address table에 수신처 MAC address table이 없을 수도 있다. 이 경우 어딘가에는 수신처 MAC address에 해당하는 기기가 있을 것이므로 broadcast를 뿌린다.
broadcats는 수신처 MAC address가 broadcast일 때도 모든 port로 packet을 뿌린다.
전이중 모드
switching hub는 송/수신을 위해 다른 cable을 사용하기 때문에 충돌이 없다. 사용하는 cable이 twisted pair cable이며, 이는 +와 -로 나뉘어 송/수신용 2가지 용도로 쓸 수 있기 때문이다.
기존에 사용하던 repeater hub의 경우 충돌을 매우 신경써야 했는데, switching hub를 사용하는 경우 신호가 흐르고 있어도 송신해도 되며, 이것이 전이중이다. 전이중을 사용할 때는 PHY(MAU)에 있는 충돌 검사를 무효화한다.
전이중 모드는 송/수신을 동시에 할 수 있기 때문에 동시에 중계할 수 있는 packet의 수가 높아 성능이 좋다.
자동조정
전이중의 등장으로 인해 전이중과 반이중을 바꾸어야 했다. 그러나 기존에 사용하던 모든 기기를 다 바꿀 수 없기 때문에, 새로 나온 기기들은 기존 기기가 전이중을 지원하는지 여부를 검사한 후 동작을 알아서 설정해 보낸다. 이를 자동 조정이라고 한다.
ethernet은 전기 신호가 없을 때는 link pulse를 보낸다. link pulse는 ethernet에서 주기적으로 흘리는 신호로, 서로 연결된 것을 검사한다. 처음에는 아무 의미 없이 연결 여부만을 검사했지만 시간이 지나면서 구분하기 시작했다.
- 홀수 번째 pulse : 타이밍을 잡기 위한 것으로 아무 의미 없다. 일정 간격마다 송신한다.
- 짝수 번째 pulse : 이 패턴을 사용해 지원 가능 모드, 전송 속도를 알린다.
Router
router의 동작은 switching hub가 table을 보고 어디로 packet을 보낼지 결정하는 것과 유사하다. 그렇지만 switching hub는 ethernet을 기본 개념으로 삼는 반면 router는 IP를 기본 개념을 삼기 때문에 세부 동작이 다르다.
router는 크게 port 부분과 중계 부분으로 나뉜다. 중계 부분은 packet의 중계 대상을 판단하고, port는 packet의 송/수신을 담당한다.
- port가 packet을 수신할 때, port 부분의 규칙을 따른다. ethernet이라면 ethernet의 것을, LAN이라면 LAN의 것을 따른다. 이렇게 받은 packet의 IP header에 있는 값과 routing table의 값을 비교해 옮길 곳을 결정한다.
Routing Table
hub는 MAC address를 사용하는 반면 router는 IP address를 사용한다.
값 | 설명 |
수신처 | 수신처 IP address (실제 값과 다를 수 있음) |
netmask | network number 조사 |
gateway | packet 중계 대상 |
interface | port |
metric | 옮기는 cost |
- 정보 등록은 수동으로 등록/갱신하거나 routing packet을 통해 직접 한다.
- 수신처의 경우 실제 IP address가 아니라 network 부분에만 bit가 채워져 있다. 이것을 보고 어디로 보낼지 판별한다.
Routing의 동작
- packet을 수신한다.
- PHY(MAU)회로와 MAC 회로에서 전기 신호를 디지털로 변환한다.
- FCS를 대조해 오류를 확인한다. 수신처 MAC address가 자신이면 buffer에 저장하고 아니면 버린다.
- packet의 MAC header를 버린다. (자신에게 온 것이기 때문이다.)
- IP header의 값을 routing table에 대조하고 어디로 보낼지 판단한다.
- 수신처 항목의 netmask를 이용해 network 번호만 비교한다.
- 여러개가 찾아지면 network 번호 수가 가장 긴 것을 찾는다. network 번호가 크다는 것은 host 번호가 작다는 것이고, 즉슨 subnet이 좀 더 작은 것이기 때문에 좀 더 적은 경우의 수로 접근할 수 있기 때문이다.
- network 번호가 같다면 metric이 작은것으로 고른다.
- 해당 행이 없으면 ICMP를 보내고 폐기한다.
switching hub는 규모가 작기 때문에 다 뿌려도 되지만, router는 너무 많이 연결되어 있으므로 모두 발송하면 network에 무리가 간다. 따라서 내부적으로 검사 로직을 거친다.
만약 해당하는 경로가 없는 경우에는 어떻게 할까? 이럴 때는 netmask를 0.0.0.0로 등록하면 모든 address와 일치하게 된다. 따라서 제일 낮은 우선순위로 선택된다.
이 때 gateway를 선택해 두면, 0.0.0.0이 골라졌을 때 packet을 gateway로 보낸다. 이것을 기본 경로라고 하며, 여기에 등록한 router를 기본 gateway라고 한다.
주소 집약
하나의 subnet에 여러 개의 IP address가 있다고 하자. 이들 IP address에게 packet을 전달할 때는 결국 해당 subnet에 있는 hub로 packet을 건네야 한다. 따라서 이들 IP address를 하나로 묶는 것을 주소 집약이라고 한다.
Packet TTL : Time To Live
IP header에는 TTL이라는 field가 잇는데, router를 거칠 때마다 1칸씩 줄인다. 보통 64나 128을 값으로 사용하며, 이 수만큼 router를 거치면 packet의 수명이 다한 것으로 간주한다. 이것의 존재 이유는 packet이 같은 곳을 계속 도는 cycle을 막기 위함이다.
조각 나누기 Fragmentation
ethernet이나 LAN 종류에 따라 packet 최대 크기가 달라진다. 이 때 [입력 packet size > 출력 packet size]면 송신되지 않으므로, packet을 쪼개는 fragmentation을 사용한다. 이 과정은 다음과 같다.
- 출력의 MTU와 가불 여부를 조사한다.
- 보낼 수 있다면 보내고, 그렇지 않다면 IP header의 flag field(분할 가능 여부)를 조사한다.
- 가능한 경우 IP packet의 data 부분을 앞부터 잘라낸다. 잘라낸 이후에는 기존 IP header의 일부분을 수정/복사해 덧붙인다.
- 불가능한 경우 폐기하고 ICMP를 통지한다.
TCP의 fragmentation과는 다르다! TCP의 fragmentation은 data를 나누는 과정이지만 여기서는 1개의 packet을 나누는 과정이다.
Router의 송신
송신은 ADSL, LAN 등의 통신회선 규칙을 따른다. 이 내용은 다음 포스팅에서 더 자세히 설명한다.
ethernet의 경우에는 gateway IP가 있으면 그쪽으로, 없으면 수신처 IP로 결정한다. 이렇게 상대의 IP address를 얻었으면 ARP로 MAC address를 얻어온 후 수신처 MAC address로 설정하고, 그쪽으로 보낸다. (이 때 ARP cache를 참고한다.)
송신처 MAC address는 router의 출력 port의 MAC address, 이후 송신한다.
router vs hub
MAC header를 붙여 packet을 송신한다는 것은, 기존 데이터인 [IP header + IP data]를 하나의 data로 보고 여기에 MAC header를 추가한다는 것으로 보는 것이 맞다.
router는 IP의 개념에 기초를 잡고, hub는 ethernet의 개념에 기초를 잡아 두었다. 즉, router는 packet 운반을 switching hub에 맡긴다. 즉... IP는 운반이 불가하며, IP는 packet 운반을 ethernet에 맡긴다는 것이다. 이 때, 운반을 맡긴다는 것은 최종 목적지까지가 아니라 MAC header를 만들 때 붙이는 IP routing table에서 다음 router의 IP를 찾고, ARP를 통해 MAC address를 얻고 이것을 수신처 MAC address에 기록하고, 이 내용을 바탕으로 ethernet에 운반을 맡긴다.
ethernet 이외의 다른 network, 예를 들어 무선 LAN 등,의 경우 ethernet의 대체제로 사용한다고 생각하면 된다. IP는 해당 network 구성 요소에게 packet 운반을 맡긴다.
Router의 부가 기능
주소 변환 : NAT, Network Address Translation
IP address는 고유한 값이어야 하지만 사용자가 너무 많이 늘어나면서 IP address의 수가 부족해졌다. 이를 해결하기 위해 주소 변환이라는 개념이 나왔다.
회사 네트워크 등의 경우 완전히 독립적으로 구성되어 있으므로 같은 IP가 있어도 상관 없다는 가정에서 시작한 개념이다. 크게 private address와 global address로 나누어 특정 private address만 독립망에서 쓸 수 있게 두었다. 이 때, 독립망이더라도 인터넷을 사용해야 하는데 이를 위해 주소 변환을 하며, router는 이 기능을 수행한다.
주소 변환은 IP header의 IP address와 port 번호를 치환하는 방식으로 구현한다.
주소변환 내부 - 외부 (독립망 - 인터넷)
- TCP packet에 있는 송신처 IP address를 private에서 global address로 변경한다. 이 때 global address는 미리 지정한 값으로 할당하며, 이 값은 unique하다. port도 사용하지 않는 값으로 적당히 변경한다.
- 이 때 원래 바꿔쓰기 전 private address, port와, 바꿔쓴 후 global address 및 port는 저장해 둔다.
- 이후 인터넷으로 송출한다. 그러면 회신 packet이 돌아온다.
- 회신 packet의 수신처와 port는 router가 바꾼 값으로 설정되어 있다. 보낼 때 썼던 값은 저장해 두었는데, 이 값을 참고해 원래 값으로 바꾼다.
- router는 독립망에 packet을 보낸다.
- IP address와 port가 독립망의 unique한 값이므로 client로 돌아온다.
이 때 port 번호도 바꾸는 이유는, port를 바꾸지 않으면 global address와 private address가 1:1 대응이 되기 때문이다. port는 2$^{16}$인 65535를 사용하기 때문에 하나의 global address로 이만큼의 private address를 만들 수 있다.
주소변환 외부 - 내부 (인터넷 - 독립망)
독립망에서 인터넷으로 나가는 경우는 router가 값을 기록해 두기 때문에, 돌아온 packet을 어디로 보낼지 판단할 수 있다. 그러나 외부에서 내부로 보내는 경우에는 routing table에 값이 등록되지 않았기 때문에 어디로 줄지 결정할 수가 없다. 즉, 독립망에서 인터넷에 접속중인 기기라고 해도 인터넷과 통신에 사용하는 port를 제외하고 다른 port로는 packet을 보낼 수 없다.
요약하면, 내부에서 외부로 접속하지 않는 한 외부에서 내부로 packet을 보낼 수 없으므로 부정 침입을 막을 수 있다. 만약 routing table에 미리 값을 등록해 두면 그쪽으로 보내게 만들 수는 있다.
packet filtering
packet filtering은 MAC header, IP header, TCP header 값을 보고 미리 설정해 둔 조건에 맞으면 중계하고, 그렇지 않으면 폐기하는 방법이다. 대부분의 방화벽이나 프로그램은 이를 사용해 외부 침입을 막는다.
잘못된 내용이나 오탈자에 대한 지적, 질문 등은 언제나 환영합니다.
'CS > Network' 카테고리의 다른 글
[Network] 1%의 네트워크 - 5. Firewall, Proxy, Load Balance (0) | 2023.07.24 |
---|---|
[Network] 1%의 네트워크 - 4. 인터넷 내부 (0) | 2023.07.24 |
[Network] 1%의 네트워크 - 2. OS Protocol Stack과 LAN Adapter (0) | 2023.07.20 |
[Network] 1%의 네트워크 - 1. 웹 브라우저가 하는 일 (0) | 2023.07.19 |
[Network] 1%의 네트워크 - 0. 서론 (0) | 2023.07.19 |