Nework layer
이제 어떻게 보낼 것인지에 대해 다룰 것이다. 인터넷 프로토콜인 IP에서 볼 것이다
라우터는 이 배송에 참여하기 때문에 전에 얘기했듯이 stack(networt layer, link layer, phy- layer)를 가지고 있다
transport segment를 송신측에서 수신측으로 보낸다
송신측은 segments를 datagrams로 캡슐화한다
수신측은 segments를 transport 계층에 전달한다
라우터는 그것을 통과하는 IP 데이터그램의 헤더 필드를 검사한다
각 패킷은 라우터의 네트워크 계층까지 올라갔다가 다시 전송된다 (형광펜 표시)
Two key network-layer function
- forwarding : move packets from router's input to appropriate router output
- Router identifies longest-matching prefix
- analogy : process of getting through single interchange
포워딩 : 라우터의 입력 포트에서 출력 포트로 패킷을 이동시키는 것
라우터는 패킷 헤더를 보고 outgoing을 결정한다. 라우터 안에 포워딩 표가 있어서, 어디로 나가야할지 알려준다
포워딩 표는 주소범위로 관리되어 있으며, 라우팅 알고리즘으로 만든다
forwarding table : 특정 목표에 도달하기 위해선 어느 인터페이스로 가야하는지 알려주는 것
- routing : determine route taken by packets from source to dest
- analogy : process of planning trip from src to dst
IP datagram format
현재 IP protocol version : 4
length : 패킷의 전체 길이
time to live : 라우터를 지날때마다 -1을 한다. 이게 0이 된 순간 패킷이 버려지게 된다
Q. 왜 이 기능이 있을까? A. 트래픽을 줄이기 위해서이다. 라우터 포워딩 테이블이 잘못된 경우 도착하지 못하고 계속 루프를 돌 수 있다. 따라서 네트워크 안에서 일정시간 후에 나갈 수 있도록 time to live를 사용한다
32 bit src IP address : message를 생성한 host
32 bit dst IP address : message 목적지 host
헤더는 보통 20byte
message에 transport + network header가 추가돼서 메세지 + 40byte정도 오버헤드가 붙어서 전송된다
=IPv4 헤더는 20바이트이고, TCP 헤더는 추가로 20바이트이다. 따라서 트랜스포트 및 네트워크 헤더를 고려하면 메시지에 40바이트의 오버헤드가 발생한다
인터넷에서 많이 돌아다니는 패킷의 byte가 40인걸 알수 있다. 일반적으로 이건 TCP ACK이다
IP Address (IPv4)
: host를 지칭하는 주소
: host에 들어있는 네트워크 인터페이스를 지칭하는 주소
: A unique 32-bit number (흔히 8bit씩 끊어서 IP주소를 읽는다)
+ NIC : 네트워크 인터페이스 카드
동시에 IP주소를 여러개를 가질 수 있다 : 이런 특수 컴퓨터 : 라우터
IP주소를 배정하는 방법은?
가장 단순히 IP주소를 배정하는 방법 : 마음대로 배정하는 것
ㄴ 그러나, 이렇게 하면 라우터 안에 있는 포워딩 테이블(엔트리 개수가 많아진다)이 엄청 커지고, 검색이 힘들어진다
그래서 Hierarchical Addressing : IP Prefixes
[계층화] Network(Prefix) and host 2부분으로 개념상 나눈다
ㄴ같은 네트워크에 있는 host들은 같은 네트워크에 있도로 개념적으로 정리한다
ㄴ 확장성이 있다
12.34.158.0/24면 network가 24bit이고 host가 8bit(즉, 2^8의 address들을 갖는다)
Network id = prefix = IP address = subnet
Subnet Mask : 어디까지 네트워크인지 표시하는 역할을 한다. 네트워크의 크기를 알 수 있다
(항상 address와 같이 다닌다)
Classful Addressing
Q. 과거에는 IP주소가 어떤식으로 네트워크에 붙어있는 기관들에 배분이 됐을까?
A. Class형식 !
Class A | Class B | Class C |
0* (무조건 앞은 0으로 시작한다는 의미) | 10* | 110* |
/8 | /16 | /24 |
2^24 address | 2^16 address | 2^8 address |
A를 가질 수 있는 기관은 128기관이다 (0이 앞에 고정되어 있으므로)
기관은 적은데, host개수는 많기 때문에 선점 + 낭비 문제가 발생한다
C는 기관이 많지만 host를 할 수 있는 개수가 적다
유연하지 않기 때문에 class개념을 도입하지 않는다
Classless Inter-Domain Routing(CIDR)
(8,16,32뿐 아니라) 네트워크 크기에 맞춰서 조절이 가능하다
ㄴ 라우터들의 포워딩 테이블이 줄어든다
전에는 1024개의 host 주소가 필요했다면, /24가 4개 필요했는데
classless에선 /22로 가능하다
Subnets
: 라우터들을 거치지 않고 접근이 가능한 host들의 집합 (같은 prefix를 갖는 집합)
: 라우터는 IP주소를 갖는다
: device interfaces with same subnet part of IP address
e.g. /24일때 라우터는 3개이다, subnet은? 3
Network Address Translation (NAT)
IPv4 | IPv6 | IPv4 |
32bit 이론상 host를 최대 2^32지원 가능 약 40억개 1995년 미국 인터넷이 상업화되면서 주소공간이 부족하다고 판단해 IPv6을 만들었다 |
128 bit 이론상 host를 최대 2^128지원 가능 |
2015년 다시 IPv4 NAT이라는 트릭을 사용해 주소를 재활용 또는 공유해 유지시킨다 |
Q. 지금은 왜 IPv4와 IPv6을 혼용해서 쓰는거야?
A. IPv6는 주로 새로운 네트워크 및 서비스에서 도입되고 있지만, 모든 시스템 및 네트워크 장비가 완전히 IPv6를 지원하도록 전환되는 것은 여전히 진행 중이다. IPv4와 IPv6 간의 혼용은 네트워크 전반에 걸쳐 계속되고 있다.
NAT 방법
내부에선 유일하되, 다른 네트워크에선 해당 주소를 사용할 수 있다
만약에 외부로 나갈 시, 라우터 IP주소로 바꿔주고, 포트번호도 바꿔준다
내부에서 같이 나올 수 있기 때문에 포트로 구별한다
나갈 때 WAN/LAN 주소를 NAT translation table에 기록하고, 들어올 때 table을 보고 다시 매칭한다
발생하는 문제
1. 라우터가 소스 IP, port number를 수정하기 위해 패킷 header(ip)와 data(port)를 접근한다
계층 biolation 문제가 발생한다
2. 포트넘버를 host찾는데 썼기 때문에 그 안에서 포트를 찾을 방법이 없다
따라서 NAT 내부 네트워크는 서버를 연결할 수 없다
Q. 서버를 이 안에서 굳이 사용하기 위해선 어떻게 해야하는가?
A.
'Computer Network' 카테고리의 다른 글
[Lecture] IP & routing algorithm (0) | 2024.03.02 |
---|---|
[Lecture] DHCP (0) | 2024.02.26 |
[Lecture] TCP : Congestion control (0) | 2024.02.23 |
[Lecture] TCP : Flow Control (0) | 2024.02.23 |
[Lecture] Connection-oriented transport: TCP (0) | 2024.02.22 |