03. 케이블의 앞은 LAN 기기였다. - chwyym/Network GitHub Wiki
- 허브나 라우터는 중계 장치에 의해 중계되어 목적지를 향해 진행된다.
- 중계 장치는 데이터 부분을 보지 않고 패킷을 중계한다.
- 따라서 TCP의 제어 정보의 내용이 패킷을 운반하는 동작에 영향을 주지 않는다.
- LAN 어댑터의 PHY(MAU) 회로에서 전기 신호로 형태를 바꾼 패킷은 커넥터를 통해 트위스트 페어 케이블에 들어간다.
- 송출한 신호는 그대로의 모습으로 허브에 도착하는 것이 아니라 도착할 때는 신호가 약해져 있다.
- 케이블의 길이가 길어질수록 신호가 약해진다.
- 잡음에 의해 신호가 왜곡된다.
- LAN 케이블로 사용하는 **트위스트 페어 케이블(꼰 선쌍)**에는 이러한 잡음의 영향을 억제하는 대책이 마련되어있다.
- 두 가닥의 신호선을 한 조로 하여 마주꼬아서 잡음을 막는다.
- 잡음의 원인은 케이블의 주위에서 발생하는 전자파이다.
- 전자파는 방향에 따라서 전류를 발생시킨다. 따라서 신호와 잡음의 전류가 섞이면 신호의 파형이 변형되게 된다.
- 신호선에서 나오는 약간의 전자파가 주위의 신호선에 닿아 여기에서 전류를 발생시킨다.
- 이런 잡음에 의한 영향을 **크로스토크(crosstalk)**라고 한다.
- 꼰 선쌍은 서로의 신호선을 마주꼬아서 잡음을 상쇄시켜 그 영향을 최소화한다.
- 성능 향상의 대책은 이것만이 아니다.
- 신호선 사이에 구분판을 넣거나
- 전자파를 차단하기 위해 금속성의 실드라는 피복을 입힌다.
리피터 허브는 연결된 케이블 전부에 신호를 송신한다.
-
신호가 리피터 허브에 도달하면 LAN 전체에 신호가 흩어진다.
-
커넥터의 안쪽에는 LAN 어댑터의 내부에 있는 PHY(MAU) 회로와 역할이 같은 회로가 있다.
-
이것을 제대로 수신하려면 '송신 단자'에서 보낸 것을 '수신 단자'로 받도록 해야 한다.
-
리피터 허브에서 끝의 커넥터에는 MDI/MDI-X와 같이 쓰여있는 전환 스위치가 붙어있다.
-
MDI는 커넥터와 신호 송수신 회로를 직접 결선한 것을 말하고
-
MDI-X는 교차하여 결선한 것을 말한다.
-
허브의 커넥터 부분은 보통 MDI-X이브로 허브끼리 접속할 때는 한쪽을 MDI로 설정해야 한다.
-
만약 MDI로 전환하는 스위치가 없고 모든 커넥터가 MDI-X라면 크로스 케이블로 허브들을 접속한다.
-
들어온 신호는 모든 커넥터에서 나가면서 리피터 허브에 접속한 전체 기기에 도달한다.
-
그리고 신호를 수신한 기기는 맨 앞에 있는 MAC 헤더를 조사하여 자신의 것이면 수신하고 자신의 것이 아니면 폐기한다.
스위칭 허브의 포트에서 MAC 회로에는 MAC 주소가 할당되어 있지 않다.
- 커넥터와 PHY(MAU) 회로는 MDI-X로 접속되어있고, 트위스트 페어 케이블에서 신호가 들어오면 이것이 PHY(MAU) 회로의 수신 부분에 들어간다.
- PHY(MAU) 회로에서 케이블을 흐르는 신호의 형식을 공통의 신호로 변환하고 MAC 회로로 들어간다.
- MAC 회로에서 디지털신호로 변환하고
- 패킷의 맨 끝에있는 FCS를 대조하여 오류 유무를 검사한다.
- 그후 문제가 없으면 버퍼 메모리에 저장한다.
- 스위칭 허브의 포트는 LAN 어댑터와는 다르게 MAC 주소가 할당되어있지 않다.
- 모든 패킷을 수신하여 버퍼 메모리에 저장하기 때문이다.
스위칭 허브는 MAC 주소표에서 MAC 주소를 조사하고 해당하는 포트에서 신호를 송신한다.
- 패킷을 버퍼 메모리에 저장하면 다음 수신처 MAC 주소와 일치하는 것이 있는지 MAC 주소표를 조사한다.
-
스위치 회로를 경유하여 송신측의 해당되는 MAC 주소의 포트에 보낸다.
-
스위치 회로
- 포트 사이(수신 포트와 송신 포트 사이)에 패킷을 운반할 때는 이 회로에 패킷의 신호를 흘린다.
- 신호가 중복되지 않으면 복수의 신호를 동시에 흘릴 수도 있다.
-
스위치 회로
- 송신 동작중에 다른 기기의 신호가 수신측에 들어오면 패킷 충돌을 방지하기 위해 재밍 신호를 보낸다.
- 스위칭 허브는 패킷을 중재할 때, MAC 주소표의 내용을 갱신하는 동작도 실행한다.
- 갱신 동작에는 두 종류가 있다.
- 패킷을 수신했을 때, 송신처 MAC 주소를 조사하여 수신한 입력 포트 번호와 세트로 하여 MAC 주소표에 등록하는 것
- MAC 주소표에 등록되어있는 내용을 지우는 것
- 기기를 옮길 때의 불편함을 방지하기 위한 것이다.
- 위 두 종류의 갱신 동작으로 인해 수동으로 주소표를 등록 및 삭제할 필요가 없다.
첫 번째
- PC A에서 목적지 PC B를 향해 보낸 패킷이 리피터 허브에 도착하면 리피터 허브는 모든 포트에 패킷을 뿌린다.
- 이때 패킷을 받은 스위칭 허브가 목적지인 PC B를 향해 패킷을 다시 한 번 보낸다.
- 결과적으로 PC B는 같은 패킷을 두 번 받게 된다.
- 이런 경우에 통신 동작이 제대로 이루어지지 않으므로 스위칭 허브는 패킷을 수신한 포트와 송신하는 포트가 같으면 패킷을 중계하지 않고 폐기한다.
두 번째
- MAC 주소표에 수신청 MAC 주소와 일치하는 주소가 등록되어있지 않은 경우도 있다.
- 이럴 때에는 수신한 포트 이외의 전체 포트에 패킷을 송신한다.
- 이더넷은 해당자만이 패킷을 수신하도록 되어있으므로 문제가 발생하지 않는다.
- 필요 없는 패킷을 보내므로 LAN이 혼잡해지는 것을 걱정할 수 있지만, 처음에 패킷을 전체로 보내더라도 두 번째 부터는 주소표에 등록이 되었기 때문에 전체 네트워크에 패킷을 보내지 않는다.
스위칭 호브의 전이중 모드는 송신과 수신을 동시에 실행한다.
-
전이중 모드
- 송신과 수신을 동시에 실행할 수 있는 모드를 말한다.
- 반이중 모드인 리피터 허브에는 없는 스위칭 허브의 특징이다.
- 트위스트 페어 케이블의 신호선은 송신용과 수신용으로 나뉘어져 있으므로 송수신 도중에 신호가 충돌하지 않는다.
- 이들이 연결된 대상, 즉 스위칭 허브의 포트 부분이나 LAN 어댑터에 있는 PHY(MAU) 회로나 MAC 회로 내부도 송신과 수신이 나위어져 있어서 신호가 따로 흐르기 때문에 충돌하지 않는다.
- 리피터 허브는 하나의 신호선으로 송수신을 수행한다.
- 따라서 충돌이 일어나지 않으므로 반이중 모드의 충돌 방지 대책을 마련할 필요가 없다.
- 이더넷의 규칙을 개정하여 신호가 흐르고 있어도 상관하지 않고 송신해도 좋다는 동작 모드를 새로 추가했다.
- 전이중 모드는 신호가 흐르고 있어도 이것이 끝나기를 기다릴 필요가 없어서 동작 속도가 빠르다.
- 전이중 모드가 등장한 후, 한동안 수동으로 동작 모드를 전환했지만 나중에 자동으로 전환하는 기능이 나왔다.
- 접속한 상대가 전이중 모드를 지원하는지 검출하고
- 동작모드를 자동으로 전환하는 기능이다.
- 위 기능을 **자동 조정(auto negotiation)**이라고 한다.
- 이더넷은 데이터가 흐르고 있지 않을 때 링크 펄스라는 펄스형 신호를 흘린다.
- 이 링크 펄스를 통해서 다음과 같은 정보를 상대측에게 알리게 된다.
- 올바르게 동작하고 있는지 여부
- 지원 가능한 모드
- 전송 속도
- 이 정보를 통지받은 상대측은 최적의 조합을 찾아 자동으로 모드를 전환하여 동작을 수행한다.
- 스위칭 허브는 수신처 MAC 주소의 기기가 존재하는 포트 이외에는 송신 동작을 실행하지 않으므로 다른 포트는 빈 상태가 된다.
- 따라서 이 빈 포트들에는 별도의 패킷을 흘릴 수 있으며 동시에 여러 개의 패킷을 중계할 수도 있다.
- 리피터 허브는 신호를 모든 포트에 뿌리므로 동시에 두 개 이상의 신호가 들어오면 패킷이 충돌한다.
- 따라서 동시에 복수의 중계 동작을 수행할 수 없다.
라우터의 내부 구조는 중계 부분과 포트 부분이라는 두 부분으로 구성되어있으며, 중계 부분과 포트 부분의 역할 분담은 프로토콜 스택의 IP 담당 부분과 LAN 어댑터의 역할 분담과 같다.
먼저, 라우터는 포트 부분에서 패킷을 수신하는데, 이 동작은 포트 부분의 통신 기술의 규칙을 따라 포트 부분이 패킷의 송신처 또는 수신처가 되어 패킷을 송/수신한다. 그리고 패킷을 중계할 때는 먼저 라우터의 포트 부분이 수신처가 되어 이더넷의 패킷 수신 동작을 실행한다. 중계 대상을 조사한 후 이번에는 포트 부분이 송신처가 되어 이더넷의 패킷 송신 동작을 실행하는데, 이곳이 스위칭 허브와 다른 부분이다. 즉, 스위칭 허브는 들어온 패킷을 전송하기만 하고 자신이 송신처나 수신처가 되지 않는다. 참고로, 라우터의 각 포트에는 MAC 주소와 IP 주소가 할당되어있다.
스위칭 허브가 MAC 헤더에 기록되어 있는 수신처 MAC 주소로 중계 대상을 판단하지만, 라우터는 IP 헤더에 기재되어 있는 수신처 IP 주소로 중계 대상을 판단한다.
위의 그림에서 수신처 항목에는 수신처의 정보가 들어있다. 수신처의 정보라고 하면 이해하기 어려우므로 일단은 서브넷 자체를 나타내는 주소, 즉 네트워크 부분의 비트에만 값이 있고, 호스트 번호 부분의 비트 값은 모두 0으로 되어 있는 IP 주소가 들어있다고 생각하자. 주소 비교 동작을 실행할 때 네트워크 번호의 비트 수를 판단해야 하므로 경로표에는 넷마스크 항목도 마련되어있다.
주소 집약이라는 개념을 이용하면 몇 개의 서브넷을 모아서 한 개의 서브넷으로 간주한 후 묶은 서브넷을 경로표에 등록할 수 있다. 이것과는 반대로 한 개의 서브넷을 세분화 하여 경로표에 등록하고, 복수의 서브넷이 있는 것처럼 보이는 경우도 있다. 이 방법을 사용한다면 호스트 번호 부분에 값이 들어있는 개별 컴퓨터를 나타내는 주소를 '수신처' 항목에 등록할 수 있다. 넷마스크 값을 255.255.255.255 즉, 32비트를 전부 1로 만들면 된다.
'수신처' 항목과 '넷마스크' 항목에서 해당 행을 찾아내면 '인터페이스'항목에 등록되어 있는 인터페이스(포트)에서 '게이트웨이' 항목에 등록되어 있는 IP 주소를 가진 라우터에 대해 패킷을 중계한다. 마지막의 메트릭은 수신처 IP 주소에 기록되어 있는 목적지가 가까운지, 먼지를 나타낸다.
라우터의 경로표에 경로 정보를 등록하는 방법은
(a) 사람이 수동으로 경로 정보를 등록/갱신
(b) 라우팅 프로토콜이라는 구조를 사용하여 라우터들끼리 경로 정보를 교환하고 라우터가 자체에서 경로표에 등록
(b)는 한 가지의 프로토콜이 아니라 RIP, OSPF, BGP라는 라우팅 프로토콜처럼 복수의 프로토콜이 존재한다.
라우터의 포트에는 MAC 주소가 할당되어 있으며, 라우터는 자신의 주소에 해당하는 패킷만 수신하고, 해당하지 않는 패킷을 폐기한다.
MAC 헤더의 뒤에 있는 IP 헤더의 내용을 보고 패킷 중계 동작에 들어간다. 중계 동작에는 몇 단계가 있는데, 우선 경로표에서 중계 대상을 조사한다. 중계 대상을 조사할 때 가장 먼저 수신한 패킷의 수신처 IP 주소와 경로표의 '수신처'항목을 조사하여 해당하는 행을 찾는다.
네트워크 번호의 길이가 같은 것이 여러 행 존재하는 경우도 있는데, 라우터의 고장이나 케이블의 단선 등을 고려하여 우회로를 두는 경우가 해당된다. 이러한 경우에는 메트릭 값으로 판단한다. 메트릭 값이 작은 쪽이 가까이 있는 것을 의미하므로 값이 작은 쪽을 중계 대상으로 선택한다. 이 예와 달리 해당하는 행이 한 개도 발견되지 않는 경우도 있는데, 이 경우 라우터는 패킷을 폐기하고, ICMP 메시지로 송신처에 이 사실을 통지한다.
넷마스크를 0.0.0.0 으로 하면 모든 주소에 일치하기 때문에, 중계 대상이 분명하지 않은 경우에 넷마스크 0.0.0.0 (default)로 가면 된다. 즉, 이것은 '기본 경로'를 나타낸다.
IP헤더의 필드를 보면 TTL이란 필드가 있는데, 이 필드는 패킷의 생존기간을 나타낸다. 이것은 라우터를 경유할 때마다 이 값을 1씩 줄이다가 이 숫자가 0이 되면 패킷의 생존 기간이 만료되는 것으로 간주하여 패킷을 폐기한다.
어느 경우든지 중계하는 패킷의 크기가 출력측의 패킷 최대 길이를 초과하면 패킷을 송신할 수 없는데, 이 경우에는 IP 프로토콜에 규정된 조각 나누기(fragmentation)라는 방법을 사용하여 패킷을 분할하고, 패킷의 길이를 짧게 만든 후 중계한다. 또한 조각 나누기는 TCP가 데이터를 조각으로 분할하는 것과는 다르다. TCP 데이터 분할은 패킷에 데이터를 저장하지 전에 이루어지지만, 조각 나누기는 패킷이 만들어진 후에 패킷을 분할하는 것을 의미한다.
패킷을 중계하다가 출력측의 MTU가 작은 경우에는 여기에 저장할 수 있는 크기로 패킷을 분할하는데, 그 전에 IP 헤더의 플래그 필드를 조사하여 분할해도 좋을지 확인한다. 플래그 필드가 분할 불가로 되어 있으면 분할할 수 없으므로 패킷을 폐기하고 ICMP 메시지로 송신처에 통지한다. 그렇지 않으면 출력측의 MTU에 맞춰 데이터 부분을 맨 앞부분부터 차례대로 잘라낸다. 이때 TCP 헤더 이후의 부분을 분할 대상 데이터로 간주한다. (즉, 패킷의 데이터 부분을 이야기하는듯)
송신 동작은 출력측의 포트에 따라 다르다. 이더넷이라면 이더넷의 규칙에 따라 패킷을 신호로 변환하여 송신하고, ADSL이라면 ADSL의 규칙에 따라 신호를 변환하여 송신한다.
이더넷의 경우, 먼저 MAC 헤더의 맨 앞에 있는 수신처 MAC 주소 필드에 값을 설ㅈ어하기 위해 경로표와 '게이트웨이' 항목에서 패킷을 건네줄 상대를 판단한다. '게이트웨이' 항목에 IP 주소가 쓰여있으면 이 IP 주소가 건네줄 상대이고, 이곳이 비어있으면 IP헤더의 수신처 IP 주소가 건네줄 상대가 된다. 이를 통해 상대의 IP 주소가 결정되면 ARP로 IP 주소에서 MAC 주소를 조사하고, 결과를 수신처 MAC 주소로 설정한다. 라우터에도 ARP 캐시가 있으므로 먼저 ARP 캐시를 찾아보고, 해당하는 것이 없으면 ARP로 조회를 보내 MAC 주소를 조회한다.
둘의 관계를 알고 있는 상태에서 컴퓨터가 패킷을 송신할 때 또는 라우터가 패킷을 중계할 때 맨 앞에 MAC 헤더를 부가하는 부분이 중요하다. MAC 헤더를 부가하여 패킷을 송신한다는 것은 이더넷의 패킷의 데이터 부분에 IP의 패킷을 넣고 이더넷의 원리로 다음 라우터까지 운반한다는 것이다. IP라는 구조는 스스로 패킷을 운반하는 수단이 없으므로 패킷을 운반할 때는 이더넷에 의뢰하여 운반한다.
라우터는 IP의 개념에 기초하여 만들어졌고, 스위칭 허브는 이더넷에 기초하여 만들어졌기 때문에 이 IP와 이더넷의 관계가 라우터와 스위칭 허브의 관계를 나타낸다.
위의 내용을 요약하면, 통신 상대까지 패킷을 전달하는 전체의 동작은 IP(라우터)가 담당하고, 이 동작을 할 때 다음 라우터까지 패킷을 운반하는 부분은 이더넷(스위칭 허브)이 담당한다.
라우터는 주소 변환과 패킷 필터링이라는 두 가지 중요한 부가기능이 존재하며, 여기에서 기초가 되는 것은 프라이비트 주소(private address)와 글로벌 주소(global address)이다.
프라이비트 주소의 규칙은 어렵지 않다. 프라이비트 주소로 사내에서 사용하는 것은 아래의 범위로 한정한다는 것 뿐이다.
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 주소를 프라이비트 주소에서 글로벌 주소로 바꿔쓴다. 여기에서 사용하는 글로벌 주소는 주소 변환 장치의 인터넷측에 있는 포트에 할당된 주소로, 이것과 동시에 포트 번호도 바꾸어 쓴다. 포트 번호쪽은 미사용 번호를 주소 변환 장치가 적당히 선택하여 사용한다. 그리고 바꿔쓰기 전의 프라이비트 주소와 포트 번호, 바꿔쓴 후의 글로벌 주소와 포트 번호를 한 세트로 하여 주소 변환 장치 내부에 있는 대응표에 기록해 둔다.
송신처의 IP 주소와 포트 번호를 바꿔쓴 후 패킷을 인터넷에 송출한다. 그러면 패킷은 서버에 도착하며 여기에서 회신 패킷이 돌아온다. 서버는 송신처에 회신을 돌려보내므로 회신 패킷의 수신처는 바꿔쓴 글로벌 주소와 포트 번호가 되어 있을 것이다. 이 글로벌 주소는 주소 변환 장치에 할당되어 있으므로 회신 패킷은 주소 변환 장치에 되돌아온다.
그리고 데이터 송/수신을 끝내고 연결 끊기 동작의 패킷이 흐르다가 인터넷에 대한 접속 동작이 끝나면 대응표에 등록한 것을 삭제한다.
인터넷에서 사내로 패킷을 중계할 때는 대응표에 등록되어 있지 않으면 중계할 수 없다. 대응표에 기록이 없으면 주소 변환 장치가 글로벌과 프라이비트의 대응관계를 판단할 수 없기 때문이다.
서버의 프라이비트 주소를 주소 변환 장치에 수동으로 등록해두면 사내에 있는 프라이비트 주소를 할당한 서버를 공개할 수도 있다.
패킷을 중계할 때 MAC 헤더, IP 헤더, TCP 헤더에 기록되어 있는 내용을 조사하여 그것이 사전에 설정한 조건에 합치되면 패킷을 중계하거나 폐기하는 동작을 실행한다. 대부분의 방화벽이라는 기기나 소프트웨어는 이 원리를 이용하여 부정 침입을 방지한다.