3.1. 네트워크 계층
링크 계층 다음으로 network core로 불리는 “네트워크 계층”에 대해 배워봅시다.
앞으로 나올 Network edge들의 기반이 되는 계층으로 주로 라우팅 관련한 내용을 다룰 것 입니다.
네트워크 장치는 “호스트” 와 라우터를 사용하기에 “라우터”로 표현되고 물리적 링크와 연결되는 장치입니다.
호스트는 하나의 링크를 가지고 통신하는 반면에 라우터는 2개 이상의 링크를 가지고 통신을 하는 차이가 있습니다.
전 세계 모든 라우터와 호스트는 각자 고유한 공용 IP를 가지고 통신을 하게 됩니다.
다음은 IP주소로 자주쓰이는 IPv4에 대한 설명을 나열 한 것입니다.
1). IPv4는 (10진법 0 ~ 255) 세 자리(8비트) * 4 으로 구성되어 총 32비트 길이입니다.
2). 각 세자리 사이에는 점으로 이들을 구별합니다. (ex: 192.168.000.001)
3). IP는 서브넷의 주소와 서브넷이 지정한 호스트(또는 라우터)의 고유 주소의 합으로 구성됩니다.
IP 네트워크 한 집단을 “서브넷”(Subnet)이라고 표현하고, IP주소에 서브넷 주소가 포함되어 사용됩니다.
IP주소는 서브넷 주소와 고유 주소의 합으로 표현되기 때문에, 두 주소를 구별하는 상황이 생길 때가 있습니다.
이 때, “서브넷 마스크”(Subnet Mask)를 사용하여 해당 IP의 서브넷 주소 범위와 값을 알아 낼 수 있습니다.
서브넷 마스크로 IP주소 속에 서브넷 주소를 알아내는 방법은 서브넷 마스크와 IP주소를 AND연산을 하면,
서브넷 주소만 남게 되고, 우측부터 고유 주소가 모두 0으로 되어 서브넷 주소만을 가져올 수 있습니다.
임의의 두 개의 라우터 사이는 모두 서브넷이 될 수 있고, 한 라우터에 연결된 IP그룹 또한 서브넷이 될 수 있습니다.
“DHCP” (Dynamic Host Configuration Protocol)는 네트워크에 연결된 호스트들에게 동적으로 IP주소와 관련된
네트워크 설정및 정보들을 할당해주는 프로토콜입니다.
DHCP를 사용하면, 네트워크 관리자가 수동으로 각 장비에 IP를 할당할 필요 없이,
하나의 서버가 연결된 장치의 IP주소를 관리 및 자동화 할 수 있습니다.
DHCP를 통한 서브넷 장치들은 다음 네 가지를 DHCP서버에게 자동으로 할당 받습니다.
1). IP주소
2). 서브넷 마스크
3). “기본 게이트웨이”(Default Gateway)주소 ( 즉, DHCP호스트의 라우터(홉) 접속 주소 )
4). 로컬 DNS 서버 주소
DHCP관련 내용으로는 다음과 같습니다.
1). DHCP는 전송계층에서 UDP를 사용하여 동작합니다.
2). DHCP서버의 서브넷에 클라이언트들이 존재하지 않고 외부에 존재하는 경우라면,
DHCP서버와 외부 클라이언트들이 모두 연결된 상위 라우터가 “DHCP 릴레이 에이전트”(DHCP relay agent)역할을
수행하게 됩니다.
클라이언트는 릴레이 에이전트인 라우터에게 요청을 보내고, 릴레이 에이전트와 DHCP서버 간에는 Unicast방식으로
송수신을 하여 데이터들을 처리합니다.
3). DHCP의 기본 동작 과정은 다음과 같습니다.
i). DHCP Discover: 클라이언트가 네트워크에 접속하여 IP 주소를 획득하기 위해 브로드캐스트방식으로
주변에 DHCP 서버에게 존재를 알립니다.
ii). DHCP Offer: DHCP 서버는 클라이언트에 할당할 수 있는 IP 주소 및 추가 구성 정보를 구성하고
클라이언트에게 사용 제안 메시지를 보냅니다.
iii). DHCP Request: 클라이언트는 DHCP 서버의 제안을 받고,
받은 설정 값을 그대로 사용하길 원하는지 의사와 교환 요청을 전송합니다.
iv). DHCP ACK: 서버는 클라이언트의 요청을 확인하고 IP 주소 및 구성 정보를 최종적으로 결정 짓고
해당 내용을 클라이언트에게 전달합니다.
“NAT”(Network Address Translation)은 사설 IP 주소를 공인 IP 주소로 변환하거나 반대로 변환하는 장치입니다.
사설 IP주소는 정의에 맞게 고유한 IP가 아니기 때문에 외부로 통신하기 위해서는 반드시
사설 IP를 할당한 주체를 거쳐서 통신을 하게 됩니다.
이 때, NAT가 이 사설 IP를 공인 IP주소로 변경하여 외부로 보내고,
외부에서 온 공인 IP주소를 사설IP주소로 변환하여, 마치 공인 IP를 사용하듯이 도와주는 장치입니다.
다음은 NAT의 종류는 세 가지를 나열 한 것 입니다.
1). “정적 NAT”(Static NAT) : 사설 IP 주소와 공인 IP 주소 간 1:1로 고정된 관계를 설정하는 NAT 방식입니다.
이 방식에서는 주소 변경 과정 중에 포트 번호는 수정되지 않고 그대로 넘어갑니다.
2). “동적 NAT”(Dynamic NAT) : 사설 IP 주소와 공인 IP 주소를 동적으로 변환하는 방식으로,
주로 특정 IP 주소 풀에 대해 동적 NAT 규칙이 설정됩니다. 이 방식에서도 포트 번호는 그대로 넘어갑니다.
3). “포트 주소 변환”(PAT, Port Address Translation) :
사설 IP 주소와 포트 번호를 두 개를 가지고 공인 IP 주소와 포트 번호로 변환하는 방식입니다.
이 방식은 “NAT 오버로딩”(NAT Overloading)으로 표현되기도 하고,
주로 단일 공인 IP 주소를 사용하면서 여러 사설 IP 주소와 통신하는 경우에 사용됩니다.
( 일반적으로 가정이나 소규모 네트워크에서 널리 사용됩니다. )
ICMP
3.2. IP 주소 체계
IPv4주소는 초기에 사용되었을 때는 첫 4개의 비트에 따라 5개의 클래스 (A, B, C, D, E)로 구별 할 수 있었습니다.
이를, “Classful 네트워크 주소”라고 표현했으며, 각 클래스는 다음과 같이 정의 됩니다.
1). Class A : 첫 비트가 0인 경우 입니다. 즉, 주소범위가 0.0.0.0 ~ 127.255.255.255 입니다.
가능한 서브넷 주소 범위가 8비트로 서브넷이 \(2^{(8-1)}\)개가 가능합니다.
2). Class B : 두 번째 비트가 0이고, 왼쪽은 모두 1인 경우 입니다. 즉, 주소범위가 128.0.0.0 ~ 191.255.255.255 입니다.
가능한 서브넷 주소 범위가 16비트로 서브넷이 \(2^{(16-2)}\)개가 가능합니다.
3). Class C : 세 번째 비트가 0이고, 왼쪽은 모두 1인 경우 입니다. 즉, 주소범위가 192.0.0.0 ~ 223.255.255.255 입니다.
가능한 서브넷 주소 범위가 24비트로 서브넷이 \(2^{(24-3)}\)개가 가능합니다.
4). Class D : 첫 비트가 0인 경우 입니다. 즉, 주소범위가 0.0.0.0 ~ 127.255.255.255 입니다.
해당 클래스는 멀티캐스트 주소 전용으로 사용되는 클래스 입니다.
5). Class E : 첫 비트가 0인 경우 입니다. 즉, 주소범위가 0.0.0.0 ~ 127.255.255.255 입니다.
해당 클래스는 예약 주소 전용으로 사용되는 클래스 입니다.
오늘날 IPv4주소는 주소 공간의 고갈 문제로 “CIDR”(Classless Inter-Domain Routing)방식으로 대체되어
Classful 네트워크 주소 방식은 사용되지 않습니다.
“CIDR”(Classless Inter-Domain Routing)은 Classful 네트워크 주소 방식을 대체하는 새로운 주소 표현 방식입니다.
기존 클래스 방식은 서브넷의 범위가 8, 16, 24비트로 정해져서 사용 되었습니다.
하지만, 실제로는 A와 B클래스는 많은 미사용 IP가 생길 수 있기 때문에 효율적인 방법이 아니라고 판단하였고,
공간의 고갈에 대비하기 위해서 조금 더 다양한 범위의 서브넷을 사용하는 개념인 CIDR이 나오게 되었습니다.
CIDR의 핵심은 서브넷의 범위를 비트 단위로 정할 수 있어 보다 효율적으로 IPv4 할당하여 사용할 수 있습니다.
IP주소 12자리에서 서브넷 주소의 범위를 IP주소 우측에 / 비트 개수 로 기입하는 “CIDR 표기법”으로
IP주소를 표현할 수도 있습니다.
추가로, 서브넷 마스크와 서브넷 주소는 해당 서브넷 범위에 맞게 적용하면 되고,
서브넷의 브로드캐스트 주소는 해당 서브넷 주소에 고유 주소를 모두 1로 두어서 만들어 낼 수 있습니다.
32비트 IPv4주소 중에서 특수하게 약속하여 사용되는 주소들이 존재합니다.
다음은 특수하게 정의 된 IP주소에 대해 나열 한 것입니다.
1). 0.0.0.0/8 : 다음 세 가지 용도로 사용됩니다.
i). DHCP프로토콜을 통해 IP를 할당 받기 전에 임시적인 주소로,
이 주소를 사용하여 DHCP 서버에 접속하여 IP를 할당 받는 용도로 쓰입니다.
ii). 라우터가 가진 라우팅 테이블에서 “기본 라우트”(Default Route)로 취급하며,
목적지를 찾을 수 없는 패킷(목적지가 라우팅 테이블에 없는 주소)일 때, 이 주소로 전달됩니다.
iii). 서버(응용계층)에서 모든 IP주소와 모든 인터페이스 장치들로부터 들어오는 소켓 연결 요청에 “Bind”하기 위해
어떠한 주소도로 변환 가능한 “와일드카드”(Wild Card)주소로 사용하여 Bind를 가능토록 해줍니다.
2). 127.0.0.0/8 : “루프백”(Loopback) 주소로 데이터 그램이 송신 된 후, 장치 외부로 나가지 않고 돌아와,
자신이 다시 수신 받는 주소입니다.
프로그램 개발이나 테스트의 목적으로 자주 사용하는 주소입니다.
3). 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 : “사설 IP주소”로 LAN영역 내에서 서브넷이나 DHCP서버 등으로
관리되는 장치들에게 부여되는 IP주소입니다.
고유 IP가 아니기 때문에 서브넷이나 DHCP를 벗어난 통신을 할 때, 해당 네트워크의 추가적인 처리를 받아야 합니다.
4). 255.255.255.255/32 : “제한된 브로트캐스트”(Limited Broadcast)로
LAN내에서 Broadcast를 해야 하는 상황에서 사용되는 IP주소입니다.
3.3. IP데이터그램
“IPv4″(Internet Protocol version 4)는 대표적으로 쓰이는 인터넷 프로토콜 중 하나로
네트워크 계층의 PDU에 속하는 데이터 그램의 일종입니다. 데이터그램 구조는 다음과 같습니다.
4비트 | 4비트 | 8비트 | 3비트 | 13비트 | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
버전 | 헤더길이 | 서비스타입 | 데이터그램 길이 | ||||||||||||||||||||||||||||
식별자 | 플래그 | 단편화 오프셋 | |||||||||||||||||||||||||||||
TTL | 프로토콜 | 헤더 체크섬 | |||||||||||||||||||||||||||||
출발지 IP주소 | |||||||||||||||||||||||||||||||
목적지 IP주소 | |||||||||||||||||||||||||||||||
옵션 | |||||||||||||||||||||||||||||||
데이터 |
1). 버전(Version)(4비트) 는 IP프로토콜의 버전을 명시합니다. IPv4는 버전 4일 것 입니다.
2). 헤더길이(Header Length)(4비트) 는 IP헤더 길이를 값 1당 4바이트 길이로 20~60바이트까지
표현하는 역할로 사용됩니다.
3). 서비스 타입(TOS, Type Of Service)(8비트)는 데이터 그램의 우선순위와 라우터에 처리 방식을
요구하는 역할로 사용됩니다.
의도는 일반 데이터 그램과 네트워크 제어용 데이터 그램을 개별 처리하기 위함 이었지만,
오늘날은 기술이 발전되고, 응용 계층에서 주로 처리하기에 중복 처리를 줄이고자 사용되지 않습니다.
4). 데이터 그램 길이(Total Length)(16비트)는 헤더와 데이터를 포함한 전체 데이터 그램의 크기를 의미합니다.
값 1당 1바이트로 0 ~ 65535바이트까지 표현 가능 하지만, 보통은 1000 ~ 1500 바이트 내외로 사용합니다.
5). 식별자(Identification)(16비트)는 단편화에서 각 데이터 그램의 고유한 식별 코드를 사용하여
개별적으로 처리 하는데 사용됩니다.
6). 플래그(Flag)(3비트)는 단편화에서 세 비트 중 두 개를 사용하여 관련 정보를 표시할 때 사용됩니다.
첫 번째 비트는 사용되지 않고( 예약비트 ),
두 번째 비트는 단편화 금지(Don’t Fragment)를 활성화 하고,
세 번째 비트는 MF(More Fragment)로 활성화 되면 단편화 된 게 더 있다는 의미이고,
비활성화 되면, 마지막 단편화 또는 분할없이 전송 되었음을 의미합니다.
7). 단편 오프셋(Flag Offset)(13비트)는 전체 보내야 될 데이터 그램에서 현재 데이터 그램의
상대적 위치를 표시 할 때 사용됩니다.
구체적으로 현재 데이터 그램의 첫 바이트 위치를 전체 데이터 그램 기준으로 8비트 단위로 위치를 표시합니다.
8). TTL(Time-To-Live)(8비트)는 라우터가 데이터 그램을 처리 할 때 네트워크 내부에 존재하도록 타이머를 켜고
처리 한 양만큼 값을 1씩 줄여서 0이 되면, 폐기하기 위해 사용됩니다.
9). 프로토콜(Protocol)(8비트)는 최종 목적지에서 보내야 될 상위 프로토콜을 명시 할 때 사용됩니다.
출발지에서 사용한 상위 프로토콜을 명시하여 도착지에서 해당 프로토콜로 값을 넘기기 위해 사용됩니다.
(예를들어 TCP는 6, UDP는 17, ICMP는 1 )
10). 헤더 체크섬(16비트)는 헤더에 대한 체크섬으로 IP데이터 그램을 주고 받을 때,
비트 수준 오류 검출을 하기 위해 사용됩니다.
11). 출발지 IP주소(32비트)는 해당 IP데이터 그램을 생성한 곳의 IP주소를 표시 할 때 사용됩니다.
12). 목적지 IP주소(32비트)는 해당 IP데이터 그램이 최종 도착할 곳의 IP주소를 표시 할 때 사용됩니다.
IPv6 데이터 그램
3.4. 단편화
IP 데이터 그램이 여러 곳으로 전달 될 때, 링크 계층을 타고 해당 계층의 프레임 길이에 맞춰서 전송이 됩니다.
이 때, 전송 처마다, 순간 순간 처리량에 따라 프레임 최대 길이가 달라질 수 있습니다.
그래서 IP데이터 그램은 한 라우터 다른 라우터로 이동 할 때,
순간 허용 최대 프레임으로 잘려서 여러 개를 전송해야 합니다.
위의 프레임 최대 길이를 “MTU”(Maximum Transmission Unit)이라고 표현하고,
위의 잘려서 전송되는 과정을 “단편화”라고 표현합니다.
IP 데이터 그램이 하위 계층인 링크 계층의 제한 크기를 넘는 경우에는 필연적으로 단편화가 발생하게 됩니다.
이 때, 단편화 된 데이터 그램을 다시 붙이기 위해서는 식별자 비트를 사용해서 순서에 맞게 결합을 시도합니다.
추가로 플래그 비트를 가지고 DF 인지, MF인지 아닌지 구별하여
단편화 여부와 현재 상황을 보다 정확하게 알 수 있습니다.
단편화 과정 이나 전송 도중에 모종의 일로
단편화를 재조립 하는 것이 안되는 경우(실패하는 경우)에는 실패한 단편들을 모두 버립니다.
일부러 기괴한 단편을 보내어 재조립 부하를 거는 종류의 DoS공격도 존재하며,
사전에 이런 공격들을 막기 위해 설계에 신경을 쓰는 것이 좋습니다.
3.5. 라우팅
상태 알고리즘
거리 벡터 알고리즘
라우팅과 자치시스템
OSPF
RIP
BGP
IP anycast
3.6. 패킷교환
“패킷”(Packet) 은 데이터그램의 일종으로 데이터의 형식화 된 블록을 의미합니다.
패킷은 넓은 범위로 “회선”과 대비되는 용어로도 쓰이기 때문에, 데이터그램에 국한되지 않고 형식화 된 블록이면,
대부분 패킷으로 칭하고 사용됩니다.
발신호스트와 수신호스트 간 패킷이 오가는 것을 “패킷교환”(Packet Switching)이라고 표현합니다.
패킷교환은 회선교환과 다르게 “저장 후 전달 전송”(Store-and-forward transmission)으로
대부분의 패킷스위치는 패킷을 모두 수신한 후 출력링크로 전달합니다.
각 패킷은 링크 계층의 라우터 및 스위치와 물리 계층의 선을 거쳐서 전달되는데,
이 때의 “패킷전송시간”은 다음과 같습니다.
발신지에서 목적지까지 \(1\)개의 패킷( \(L\) 비트 )를 목적지로 전달 할 때, 링크 속도는 \(R\) bps 이고,
\(N\)개의 링크를 거져야 한다면(라우터는 \(N – 1\) 개), “패킷전송시간은 \(\frac{L}{R}\) 초”가 걸립니다.
( 만약, \(P\)개의 패킷( \(L\) 비트 ), 링크 속도는 \(R\) bps, \(N\)개의 링크 이면, “총 패킷전송시간은 \((P + N – 1)\frac{L}{R}\) 초” )
“저장 후 전달 전송 방식”에 의해 모든 패킷 스위치는 각 링크에 대해 출력 버퍼(큐)를 가지게 됩니다.
출력버퍼에는 출력 할 패킷이 들어온 순서대로 저장됩니다.
3.7. 패킷 지연과 손실
(라우터에서) 패킷교환 방식의 “지연(Delay) 유형”은 다음과 같습니다.
1). “노드처리지연”(Processing Delay) :
패킷의 헤더를 검사하고 출력위치를 결정하는 과정과 패킷의 비트수준의 오류를 검사 하는 과정의 소요시간입니다.
2). “큐잉지연”(Queuing Delay) :
패킷이 링크로 출력되기 전에 출력 버퍼(큐)에 대기하는 시간입니다.
앞의 패킷들의 총 크기에 따라 지연시간이 비례하고,
앞에 패킷이 없다면(자신이 가장 앞이면) 지연은 없고 즉시 출력됩니다.
3). “전송지연”(Transmission Delay) :
패킷들을 물리계층(비트수준)으로 변환하여 내보내는 과정에서 소요되는 시간입니다.
위의 패킷전송시간이 여기에 해당됩니다.
4). “전파지연”(Propagation Delay) :
한 비트가 링크에서 출력되어 다른 링크로 도착하는 과정에서 소요되는 시간입니다.
전파 속도는 물리매체에 따라 달라집니다. ( 링크길이에 비례하고, 전파속도에 반비례 합니다. )
“총 노드지연 시간”은 노드처리지연 + 큐잉지연 + 전송지연 + 전파지연 입니다.
이 때, “종단 간 지연”은 큐잉지연을 0으로 가정한 노드처리지연 + 전송지연 + 전파지연 입니다.
패킷교환 방식에서 출력버퍼는 유한 하기 때문에 “패킷 손실”(Packet Loss)이 일어날 수 있습니다.
패킷들의 평균 길이를 \(L\) , 단위 시간 당 패킷이 큐에 도착하는 평균 패킷 수 \(a\) , 데이터 전송률(출력 속도) \(R\) 일 때,
\(\frac{La} {R}\) 을 “트래픽강도”(Traffic Intensity)라고 표현합니다.
만약, 트래픽강도 \(\frac{La} {R}\) 이 \(\frac{La} {R} > 1\) 이면, 출력 속도보다 큐에 쌓이는 비율이 더 크기 때문에,
이론적으로 큐는 끝없이 증가 상태가 되고, 큐잉지연은 무한대로 증가합니다.
현실적으로는 큐는 유한 하므로 큐를 벗어난 패킷은 “Overflow”가 나고 패킷손실이 발생됩니다.
패킷손실은 발신측에서는 전송 했지만, 수신측에서는 받지 않은 상태가 됩니다.
따라서, 트래픽강도가 항상 1이하로 될 수 있도록 설계하는 것이 좋습니다.
만약, 트래픽강도 \(\frac{La} {R}\) 이 \(\frac{La} {R} ≤ 1\) 이면, 출력 속도가 큐에 쌓이는 비율과 같거나 더 크기 때문에,
큐는 금방 비어 있게 되고 큐잉지연 없이 전송됩니다.
물론, 패킷이 동시에 몰려서 도착하면 순간 큐잉지연은 생길 수 있습니다.
( \(N\)개의 패킷이 \(\frac{L}{R}N\)초마다 몰려오면, \(k\)번째 패킷은 \((k-1)\frac{L}{R}\)의 큐잉지연이 발생합니다. )
3.8. 회선교환
패킷교환과 대비되는 개념으로 두 호스트 간의 경로 상의 필요한 모든 자원들을 통신 세션을
진행하는 동안 예약하여 독점(Dedicate) 사용 하는 방식입니다.
패킷의 경우 둘 이상의 호스트가 몰리거나 순수하게 처리속도보다 더 많은 요구를 보내기 때문에
지연과 손실이 발생하지만, 회선 교환의 경우는 먼저 사용하는 호스트가 해당 자원을 독점 하기 때문에,
지연 및 손실없이 실시간 전달이 이루어지고 그 동안 다른 호스트는 해당 호스트가 끝날 때까지 대기하는 구조입니다.
( 대표적으로 전화망 계열이 회선교환을 사용합니다. )