IP
- ip는 양 끝 호스트와 네트워크 경계가 되는 지점에 존재해야 한다.
- 그 계층 바로 아래 직접연결된 각각의 네트워크 계층으로 구성되어있다.
IP Packet Delivery Model
- 그럼 이제 인터넷이 데이터를 전달하는 방식을 살펴보자.
- 데이터그램 기반 패킷 전달 모델을 사용한다.
- 인터넷은 모든 서로다른 네트워크간 통신을 지원하기 위해 최소 서비스 기준을 제시한다.
- 모두를 연결하기 위해 최소 기준을 충족시킨다는 목적 때문에 사실상 ip는 신뢰성이 없는 서비스이다.
- 패킷 상실 가능성, 패킷 순서 뒤바뀌어 올 가능성, 중복 패킷 수신, 패킷송신 지연등이 일어나기 쉽다.
- 이 약점을 TCP가 극복하도록 도와준다.
IP(인터넷 프로토콜: RFC 791)
• 디자인 컨셉
– 모든 종류의 네트워크에 적용 가능
– 애플리케이션 요구 사항 최소화
• 비연결형 DG(DataGram) 모델 기반
• Best-Effort 모델(신뢰도가 낮은 서비스)
– 패킷이 손실될 수 있음
– 패킷이 순서 없이 전달될 수 있습니다.
– 패킷의 중복 사본이 전달될 수 있음
– 패킷이 오랫동안 지연될 수 있음
IP Packet Format
- 데이터그램 기반 패킷 전달 모델에서 사용하는 ip 패킷 헤더를 살펴보자.
- 데이터그램 방식이기 때문에 가장 중요한건 source ip, destination ip 주소이다.
- ip 패킷은 word단위로 align된다.
- option은 있어도 되고 없어도 되는건데 word단위를 맞추기 위해 padding이 붙는다.
- 패킷은 가변길이 이기 때문에 Hlen로 길이을 알려줘야 한다.
- total length는 패킷의 길이를 나타내며 최대 16 비트를 사용할 수 있다.
- version은 ip의 버전을 말하고 IPv4, IPv6가 이 버전을 나타낸다.
- TOS는 아직 보편적으로 사용되지는 않지만 패킷 간 우선순위를 부여할 필용성을 미리 생각해서 만들어 놓았다.
- TTL : 패킷이 최대로 방문할 수 있는 노드의 수를 제한한다. 이게 왜 필요하냐면 현실적으로 전달이 불필요하거나 불가능한데도 끊임없이 길을 찾는 등의 상황을 방지하기 위해 사용된다.
- protocol은 ip 위의 상위 계층이 누구인지를 상수로 저장한다. 보내는 이가 tcp라면 6을 써서 보낸다. 수신자가 이를 확인하여 바로 tcp상위 계층으로 패킷을 올려보낼 수 있다.
- checksum은 오류검출 코드이다. 함께 보내는 데이터의 오류검출이 아니라 헤더 자신의 오류검출에만 관여한다. IPv6에서는 이게 불필요하다 판단하여 빼버렸다.
5. 단편화와 재조립
- ip가 인터네트워킹을 위해 해야하는 일이다.
- 네트워크를 공평하게 사용하기 위해서 각 네트워크는 나름대로 MTU(Maximum Transmission Unit, 즉 제약)를 가진다.
- 여기서 한가지 문제가 생길 수 있는데 x네트워크에서 데이터를 보냈는데 y에서는 그 크기를 수용할 수 없을 수 있다. (트럭으로 배송을 했는데 자전거밖에 이동이 불가능한 상황)
- 위의 경우 잘라서 보내야 하는데 이를 fragmentation이라고 한다. 그리고 나중에 잘라진 걸 하나로 붙이는데 이를 reassemble이라고 한다.
- 인터넷은 mtu문제를 극복하기 위해 이 방법을 사용한다.
- 라우터 입장에서는 패킷 하나가 들어오고 나갈때마다 인터럽트 때문에 드는 비용이 있다.
- 따라서 IP도 갈수 있을때까지는 쭉 가다가 MTU < Datagram일 경우만 쪼갠다. (필요시에만 분할)
- 재조립은 다시 MTU가 커지면 하는게 아니라 목적지에서 수행한다. (재조립은 마지막으로 미룸) 물론 세번보낼거를 하나로 합쳐서 보내면 이득이지만 분할된 단편을 독립적으로 유지하기 위해 이 방식을 채택했다.
- 당연히 중간에 소실된 부분이 생기면 재조립은 불가능하다.
- IPv6에서는 노드에서 병목을 줄이기 위해 아예 발신자가 미리 쪼개서 보내는 방법을 채택한다. 물론 혹시 모를 상황을 위해 pathMTU도 사용을 한다.(지양해서 사용)
- 패킷을 자를때는 각각 자기가 몇번째인지 식별을 위해 번호를 매긴다. 똑같이 x라는 식별자를 지닌다.
- 조각난 부분들을 단순히 1,2,3으로 매기면 2가 쪼개져야할때 2-1, 2-2등으로 매겨야하는 번거로운일이 생긴다.
- 따라서 offset으로 0으로부터 어느 위치에 있어야 하는가로 순서를 나타낸다.
- 이 방식에 또다른 장점은 패킷이 수신자 입장에서 순서가 뒤죽박죽으로 와도 바로바로 위치를 찾아 grouping할 수 있다.
- reassemble은 loop를 돌며 수행되기 때문에 termination 조건이 필요하다. 1, 0으로 이를 알려주며 more bit라고 한다.
Global Address
- ip는 32비트 주소로 되어있다.
- 전화번호의 지역번호만 보고 02 서울 031 경기도로 빠른 파악이 가능하다.
- 이처럼 ip주소 전체를 보지 않고 빠른 처리를 위해 ip를 구분해서 사용한다.
- 이를 계층적 주소라고 한다.
- 예를들면 165.194.xx.xx는 중앙대 대역이고 뒷부분을 알아서 사용자들이 쪼개 사용한다.
- 즉 앞부분은 네트워크를 지칭하고 뒷부분이 특정 호스트를 지칭한다.
- 네트워크 규모에 따라 A, B, C클래스를 나눈다. 호스트가 많은 네트워크는 A클래스로 24비트를 할당한다. B는 16, C는 8비트(256개)를 호스트에게 할당한다.
- 대신 A클래스처럼 큰 네트워크는 네트워크에 7비트 밖에 없기 때문에 많이 존재하기 어렵다.
- 클래스간 network, host가 어디까지인지 구분하기 위해 약속이 필요하다. A는 0으로 시작하고 B는 10, C는 110으로 시작하도록 한다.
- 10을 보면 시작으로부터 14비트까지가 네트워크 주소라고 알수 있게 된다.
- 참고로 D클래스도 있는데 이는 multicast용 주소이다.
- IPv4에서는 네트워크의 크기의 다양성을 반영하기 어렵다. network와 host의 수가 고정되어 있기 때문이다. IPv6에서는 이를 대폭 수정하였다.
- 정리하면 이 방식 덕분에 네트워크 주소만보고 더 빠른 처리가 가능해졌다. 따라서 네트워크에 있는 노드들의 네트워크 주소는 동일해야 한다.
IP Addresses
IP 주소는 계층적입니다.
– IP 주소는 네트워크 부분과 호스트 부분의 두 부분으로 구성됩니다.
IP 주소 표기
– 164.125.9.2(점으로 구분된 10진수 표기법) • 네트워크 주소: 32비트
– 16진수 주소 "C0290614"는 192.41.6.20으로 작성됩니다.
– 가장 낮은 IP 주소는 0.0.0.0이고 가장 높은 IP 주소는 255.255.255.255입니다.
넷마스크
– 255.255.255.0
약 40억 개의 가능한 IP 주소 중 절반이 클래스 A입니다.
• 1/4은 클래스 B입니다.
• 1/8은 클래스 C입니다.
클래스 A
– 네트워크 부분: 7비트
•. 126 Class A 네트워크( 값 0과 127이 할당되어 있습니다.)
– 호스트 부분: 24비트
• (224 – 2) 호스트 주소: 값 0과 127이 할당되어 있기에 224-2 이다.
클래스 B
– 네트워크 부분: 14비트
• (214 – 2) 네트워크
– 호스트 부분: 16비트
• 216 – 호스트 부품 2개
• 각 클래스 B 네트워크에는 여유 공간이 있습니다.
65,534 호스트
클래스 C
– 네트워크 부분: 21비트 • 221개의 네트워크
– 호스트 부분: 8비트
• 28 – 2 = 254개의 연결된 호스트(하나의 호스트 식별자인 255는 브로드캐스트용으로 예약되어 있으며 0은 유효한 호스트 번호가 아님)
Special IP Addresses
값 0은 이 네트워크 또는 호스트를 의미합니다.
값 -1(즉 FFFFF... => 111111)은 브로드캐스트로 사용됩니다.
표시된 네트워크의 모든 호스트를 의미하는 주소
IP 주소 0.0.0.0은 호스트가 부팅될 때 사용되지만 이후에는 사용되지 않습니다.
– 네트워크 번호 0은 현재 네트워크(또는 이 네트워크)를 의미합니다.
– 모두 1로 구성된 주소는 로컬 네트워크에서 브로드캐스팅이 가능합니다.
– 127.xx.yy.zz 형식의 모든 주소는 루프백 테스트용으로 예약되어 있습니다.
• 로컬에서 처리되고 들어오는 패킷으로 처리됩니다.
Packet Forwarding in IP (IP에서의 패킷 포워딩)
IP 패킷의 포워딩 전략
– 모든 IP 패킷에는 목적지의 IP 주소가 포함됩니다.
– 목적지 네트워크에 직접 연결된 경우,
그런 다음 호스트로 전달
– 대상에 직접 연결되지 않은 경우 일부 라우터로 전달
• 전달 테이블은 네트워크 번호를 다음 홉으로 매핑합니다.
– 각 호스트에는 기본 라우터가 있습니다.
– 각 라우터는 포워딩 테이블을 유지합니다.
ip가 패킷을 보내면 이더넷을 통해 전달이 된다.
- ip가 그때그때 어떻게 전달 명령을 수행하는지 알아보자. 이는 호스트, 라우터 상관없이 동일하게 동작한다.

- ip의 포워딩 테이블을 살펴보자. (라우터 R2의 테이블)
- ip주소가 계층적으로 구성되어있기 때문에 목적지 주소의 뒷부분은 볼 필요가 없다. 따라서 포워딩 테이블에 network number를 적는다.
- next hop예를 살펴보자. 2번 네트워크로 가려면 R1을 지나라는 뜻이다. 3으로 보내려면 직접 보내라는 뜻이고, 1번 네트워크로 보내고 싶다면 R3를 거치라는 뜻이다.
- 목적지 네트워크가 직접 연결되어 있다면 호스트로 직접 포워드를 하고 직접 연결되어 있지 않다면 다른 라우터에게 포워드해야하기 때문에 이전에 배운 포트번호로는 충분하지 않다.
- h8에서 h7로 보내야 한다면 직접 연결되어있기 때문에 호스트로 바로 보낸다. 만약 H4에게 보내야 한다면 전송을 다른 라우터에게 위임한다.
- 그렇다면 데이터그램의 목적지 주소를 보고 직접 연결되어 있는지 아닌지를 어떻게 판단할 수 있을까? 라우터나 아이피가 자기의 network주소와 목적지 주소의 network부분이 동일한지 보면 된다.
- 네트워크 주소가 같다면 바로 MAC주소(네트워크/링크주소)로 보낸다. 만약 다르다면 라우터로 보내야 하니까 해당 라우터의 MAC주소로 encapsulation해서 보낸다.
2. (연습) H7 -> H8


- ip가 데이터에 헤더를 붙인다. (SA, DA)
- 이 전체를 ethernet에게 내려보낸다. 데이터와 더불어 ethernet이 알아들을 수 있는 수준으로 destination 주소를 함께 알려준다.
- 이더넷은 주소를 확인한다.
- 목적지와 나의 네트워크 주소가 1로 동일하다. -> 직접전달 -> H8의 MAC주소를 붙여서 하위 계층으로 전달

3. (연습) H7 -> H1

- ip가 데이터에 헤더를 붙인다. (SA, DA)
- 이 전체를 ethernet에게 내려보낸다. 데이터와 더불어 ethernet이 알아들을 수 있는 수준으로 destination 주소를 함께 알려준다.
- 이더넷은 주소를 확인한다.
- 목적지와 나의 네트워크 주소가 서로 동일하다. -> 라우터에게 전달 -> 라우터의 MAC주소를 붙여서 하위 계층으로 전달

- 이 패킷을 R3가 수신한다.

- 헤더를 떼고 아까 H7이 했던 동작을 똑같이 수행한다.
- 자기 자신 R3의 주소와 H1 목적지 네트워크 주소 다름 -> 라우터에게 전달 -> 라우터의 MAC주소를 붙여서 하위 계층으로 전달

- 목적지에 닿을때까지 동일하게 반복

통신과정 정리
- a에서 b로(서로 다른 네트워크) 패킷을 전달하는 과정을 다시 정리해보자.

- a는 b의 ip주소를 알고 있다고 가정한다. 이게 어떻게 가능하냐면 www.google.com으로부터 ip를 꺼내주는 DNS(domain name service) 덕분이다.
- 또한 a는 자기가 외부로 나가기 위해 거쳐야 하는 라우터 주소도 알고있다고 가정한다. (DHCP 프로토콜로 호스트가 이 정보를 알 수 있다.)
- a는 r의 ip를 가지고 mac주소를 알수 있다. (ARP프로토콜이 알려줌)
- 라우터는 자기가 연결하고 있는 두 네트워크를 위해 두개의 주소를 갖는다. 마찬가지로 각 ip에 해당하는 physical network주소인 mac주소를 가진다.

- ip 패킷을 만들어서 아래 계층으로 전달(send down)
- ethernet에서는 자신의 network주소와 목적지의 network주소가 다르기 때문에 router의 맥주소를 패킷에 붙여서(encapsulation) 하위 계층으로 전달한다.

- 라우터가 이를 받아 작업을 수행하고 ip로 패킷을 올려보낸다.


- 이전과 동일한 작업을 forwarding table을 보고 수행한다.

- 자신의 네트워크 주소와 목적지의 주소가 동일하다 -> 222.222.222.222의 MAC주소를 찾아서 직접 전달

- decapsulation해서 패킷 수신

'Computer Science > 네트워크' 카테고리의 다른 글
CIDR(사이더, Classless InterDomain Routing) (0) | 2022.12.13 |
---|---|
IPv6 basic (0) | 2022.12.13 |
Internetworking (0) | 2022.12.13 |
RARP, BOOTP, DHCP (학교) (0) | 2022.12.13 |
RARP, BOOTP, DHCP (0) | 2022.12.13 |