Network layer에 있는 protocol 종류
1) Routing protocols
2) IP protocol : data와 관련
3) ICMP protocol : router가 자신의 상태를 보고하기 위해 사용(host에게 error reporting 하는 용도)
IPv4 datagram format
protocol이 하는 일 -> protocol의 data unit의 header 보면 알 수 있다
- type of service = type of data
- length = header + data
- 색칠한 3가지 : fragmententation & reassemble에 사용됨
- time to live = datagram이 유령처럼 frop 안되고 계속 네트워크 돌아다니는 걸 방지하기 위해 (한 hop지날때마다 1씩 줄임, source가 내보낼 때 setting 한다)
- upper-layer protocol : TCP/UDP 중 어디에 배달되는지 알아야 해서
- header checksum : IP header만 checksum된다
-> 하나의 message 전송하는데 드는 overhead
: 40 bytes(20 bytes of TCP, 20 bytes of IP) + app layer overhead for TCP+IP
IPv4 fragmentation
: 필요한 이유 -> MTU 사이즈의 차이 때문에!! (MTU란 link level frame이 최대로 carry할 수 있는 data 양)
(MTU가 큰 링크에서 작은 link로 전송하려면 중간 router에서 fragmentation 해줘야 함)
: 같은 사이즈의 data에 비해 header 양이 많아져서 overhead가 커진다
IPv4 Reassemble
: final destination host에서만 reassemble 된다 (final destination 도착 전까지는 안됨)
: 아까 위의 IPv4 datagram header에서 본 3 가지가 identify하고 order 정하는데 사용됨
( 하나의 datagram이 여러 fragment로 나뉘어 도착하므로 같은 datagram에 속하는지, 해당 datagram 내에서 순서 어떻게 되는지 다 표시해주어야 함)
: 최종 목적지에 하나의 fragment라도 도착하지 않으면 해당 datagram 자체를 버려 버린다 ( TCP가 이 loss를 recover한다)
IPv4 fragmentation 문풀 -> 20 bytes header 유의!!
4000 bytes datagram = (3980+20) data, header
1500 bytes MTU = (1480+20) data, header
- length = data+header(20)
- ID : fragment가 같은 datagram에 해당되는지 판단할 때 이용 (fragment들끼리 같은 ID면 같은 datagram에 속함)
- fragflag : 내가 해당 datagram의 마지막 fragment인지 아닌지 나타냄 (0이면 마지막 flag / 1이면 마지막 아님)
- offset : original datagram에서 내가 어느 부분인지 나타냄 (번째 data/8)
-> Network layer ppt p.37 다시 풀어보기
IPv4 addressing -> "주소가 모자르다"는 가정하에 이해하면 수월~~~
IP adress: host/router의 interface마다 붙여지는 identifier (32 bit짜리 id). 내가 보는 건 8bit씩 잘라서10진수로 표현한 형태
즉, interface마다 IP주소가 할당되게 된다
-> interface란? : host/router와 link를 연결해주는 connection 부분
: interface들은 link layer에서 연결되어 있다
cf) 주소 절약 효과가 있는 프로토콜
1) CIDR
2) DHCP
3) NAT
subnet
-> 중간 router 없이 연결되어 있는 interface들의 모임
-> 같은 subnet에 위치한 device interface들은 IP address에서 subnet part 값이 같고 router 개입없이 서로에게 도달할 수 있다
IP address = subnet part + host part
-> subnet mask = subnet part bit을 부르는 호칭
-> host part : host를 identify 하기 위해 사용
IPv4 addressing 방법
1) classful addressing
-> first few bit을 보고 어디까지가 subnet portion인지 쉽게 찾을 수 있다
but, IP 주소 공간을 매우 낭비해서 쓰게 됨!
2) classless addressing
-> CIDR
-> 주소 절약 하기 위해 고정된 길이가 아닌 가변길이의 subnet portion을 사용한다.( /x에서 x가 어디까지가 subnet portion인지 나타냄)
-> x = subnet mask / network prefix / prefix
ppt 연습 문제 풀어보기!
그렇다면 이런 IP address를 어떻게 얻을까?!
-> 이건 사실 두 개의 질문이다 (host가 & network가)
1) host가 어떻게 IP address를 얻을까?
1. hard-coded (config 파일에 내가 직접 타이핑 해줌)
2. DHCP (Dynamic Host~)
-> 자신이 속한 기관으로부터 IP 주소 얻는다
2) network가어떻게 IP address얻을까?
1. 주소의 subnet part를 통해
-> 각 기관은 ISP로부터 IP 주소 얻는다
먼저, 1) host가 IP address를 어떻게 얻는지부터 살펴보자!!
DHCP
: server로 부터 일시적인 주소를 dynamically하게 얻는다
- Client-Server protocol
- Plug-and-play
- UDP위에서 동작한다 (암기용 : dynamic하게 주려면 빠른 UDP가 나아서 라고 외우기,,ㅎ)
- server & client 둘 다 well-known port를 사용!! (client IP address가 없고 broadcast 하기 때문)
- 목표 -> network에 "join"하게 되면 dynamically network로부터 IP address를 얻는다
- 주소 재사용 가능! (세 명이 동시에 네트워크에 접속하고 있지않으면 하나의 주소로 세 명의 user를 support 가능)
- join / leave 하는 moblie user들 support해줌 (방을 옮겨서 새로운 network에 접속하면, 바로 DHCP가 background로 돌아서 새 IP 주소를 자동으로 configure 해준다)
DHCP 과정
1) host가 DHCP discover mesg를 broadcast 한다 -> optional (기억하고 있거나 이전에 할당된 걸 재사용할 경우 안 거침)
2) server가 DHCP offer mesg로 reply한다 -> optional (기억하고 있거나 이전에 할당된 걸 재사용할 경우 안 거침)
3) host가 DHCP request mesg로 IP address 요구
4) server가 DHCP ack mesg로 주소 보내준다
-> 네 가지 모두 broadcast 된다!!
DHCP client-server scenario
: DHCP는 subent별로 subnet에 존재한다
: 노트북을 키면 DHCP client 프로그램이 저절로 동작(plug-and-play)해서 주소를 DHCP 서버로 부터 받아오게 된다
1) src : 0.0.0.0 -> 나는 아직 주소가 없어서
: 68 -> well-known 포트 번호
dest : 255.255.255.255 -> broadcast니까 전부 1이다
: 67 -> well-known 포트 번호
yiaddr : assign 받은 address
transaction ID : client쪽 mesg와 server쪽 mesg를 mapping 시키기 위해 (둘다 broadcast 하기에
어느 메시지에 대한 답인지 알아내기 위해 붙는다)
2) 내가 DHCP 서버야. 너 이 IP 쓸래?
yiaddr : 이 주소 사용할지 suggest 한다
lifetime : 일시적이다
3) yiaddrr : 이거 쓸게 / 이거 써도 돼?
transaction ID 바뀜!
lifetime : 너가 제시한대로 쓸게
-> 모든 DHCP message는 목적지가 broadcast 된다
+ host에서부터 보내지는 것들은 src가 0.0.0.0이고 server에서부터 보내지는 것들은 src가 서버의 주소다
Host가 DHCP로부터 얻게 되는 정보
1) network mask (subnet mask)
-> DHCP가 주는 IP address에서 어디까지가 subent portion인지 알려줌
2) first-hop router의 address
3) DNS서버의 이름&IP주소
4) host의 IP address
DHCP 예시
laptop을 connect 하기 위해서는 laptop의 IP주소, first-hop router의 주소, DNS의 주소를 알아야 함
-> DHCP 사용하기
1) DHCP request가 ethernet에서 encapsulate됨
2) 이게 broadcast 되어 DHCP 서버가 동작하는 router에게 도착
3) DHCP 서버에서 receive한 걸 demux하고 DHCP ACK을 만든다 (client의 IP주소, first-hop router의 IP주소, DNS 서버의 이름&IP주소가 들어있음)
4) 이걸 DHCP 서버에서 encapsulate하고 client에게 frame forward한다
5) client가 이를 demux하여 client의 IP주소, first-hop router의 IP주소, DNS 서버의 이름&IP주소를알게 된다
이제 아까 위에서 언급했던 2) network가어떻게 IP address얻을까? 에 대해 살펴보자!
먼저, 다시 기억을 복귀해보자
host는 자신이 속한 기관으로부터 IP 주소를 얻어 왔다!
그렇다면 각 기관은 어떻게 IP 주소 block을 얻을까?! (network가 IP주소의 subnet part를 어떻게 얻을까?)
-> 그 기관을 인터넷에 연결해주는 서비스를 제공하는 ISP로부터 얻는다!!!
-> 8개의 기관을 식별하기위해 3bits가 더 필요
-> Route aggregation : first 20bits기 이렇게 시작하는 애들은 다 나한테 보내죠~
-> 목적지에서 멀수록 aggregate해서 advertise 하게 된다
Route aggregation
first 20 bit가 200.23.16으로 시작하는애들은 나한테 보내줘~
Longest prefix matching
: forwarding table entry와 목적지 주소를 match 할 때 가장 길게 match 되는 것을 갖고 forwarding을 어디로 할지 결정함
ppt p.63 문제 풀어보기
그렇다면 ISP들은 IP 주소 block들을어디서 받아오는걸까?!
-> ICANN (ISP들에게 주소 block 할당해주는 일을 총괄하는 기관)
-> 근데 얘네들이 모든 ISP에게 할당해주기 힘드니까 전세계적으로 5개의 regional registries를 두고 이들을 통해
local registers에게 주소 block 할당해준다
그럼 주소 block 할당 과정을 총 정리 해보자!!
ICANN -> Regional Registries -> Local Registries -> ISP -> 기관 -> host
근데 ICANN에서 IPv4 주소의 마지막 chunk를 2011년에 할당해버렸다,,,
이제 남은 주소 block이 없는데?!
-> NAT를 이용한다
NAT란?
: 한 local site가 block of IP address가 아니라 IP address 한개만 받아오고 이 local site에 있는 컴퓨터들이 세상에 대해 그 주소 하나에 대해 공통으로 사용하는 방식
다음 글에서 NAT에 대해 자세히 살펴보자~~~
'CS > 컴퓨터네트워크' 카테고리의 다른 글
Network layer - IPv6 (0) | 2023.12.13 |
---|---|
Network layer - NAT (0) | 2023.12.13 |
Network layer - Router (0) | 2023.12.12 |
Network layer - overview of Network Layer (0) | 2023.12.12 |
transport layer 용어정리 (0) | 2023.10.27 |