Layer 3의 대부분의 라우터에서 쓰고 있는 프로토콜이 Internet Protocol.
라우터에는 Internet Protocol이 사용하는 Data plan과 라우팅 메시지를 처리하는 Control Plane이 있음.
Internet Protocol이 해주는 function이 없어 host도 에러 report를 보내고 받도록 사용하는 프로토콜이 Internet Control Message Protocl (ICMP), Ping이라는 어플리케이션이 ICMP 메시지를 주고 받는 일을 함. host와 router 모두 사용.
ICMP 메시지는 Control Plane에 있긴 하나 host도 사용이 가능.
→ host에는 Control Plane의 Routing protocol은 없으나 ICMP 메시지는 사용할 수 있다.
Control Plane의 Control 보드에는 Routing protocol을 돌려 path selection을 해 routing table(RIB)를 작성. 거기서 Best of Best만 골라 FIB에 갖다놓으면 decentralized switching으로 각 가입자의 포트가 있는 보드에서 라우팅 테이블이 있는 보드로 가지 않고도 local하게 FIB table을 보고 output port를 결정할 수 있다. Input port의 Ingress buffer에서 Output port의 Egress buffer로 옮기는 과정이 switching.
Switching의 technology는 초기 메모리 사용, bus 쓰다가 여러 개의 port를 엮어놓은 Crossbar interconnection network를 사용하게 됨. 여러 개의 패킷을 동시에 switching 할 수 있으나, 단, 그 패킷들이 서로 다른 output port로 가는 경우에만 가능하다. 즉, 둘 이상의 패킷을 하나의 output port로 (switching) 보낼 수 없다.
switching rate은 항상 line rate의 N배이므로 input port에는 loss와 delay가 없으나, output port에서는 버퍼로 들어오는 패킷들의 arrival rate이 늘어날 수 있기 때문에 loss와 overflow가 생길 수 있다.
라우터 입장에서는 2계층 link의 technology가 다를 수 있어 link capacity, 즉 MTU가 다를 수 있어 여러 개의 MTU를 가짐. input port로 들어오는 패킷 보다 output port의 link rate이 더 작으면, packet fragmentation이 일어나야 함.
라우터의 IP계층에서 패킷을 쪼개는 fragmentation을 하나, 합치는 일은 하지 않음. 그 이유는 1. 쪼개진 각 패킷은 다른 경로로 갈 수 있기 때문에 하나의 라우터에선 패킷을 assemble하는 것이 이론적으로 불가능, 2. 라우터는 빨리 deliver하는 것이 목적이기 때문에 복잡한 처리를 가능한 줄여 host가 하도록 함. 따라서 destination host의 IP계층에서 reassemble을 수행.
왜 중간의 라우터는 쪼개나요? MTU보다 작으면 보내기 위해 어쩔 수 없이 fragmentation을 수행해야 함.
host에 있는 IP계층에서 IPv4 fragmentation이 일어난다.
→ T. host에서는 TCP segmentation이 일어나거나 (IP fragmentation 수행 X), 만약 UDP Message라면 쪼개지지 않고 내려오므로 host의 IP계층에서 IPv4 fragmentation을 수행해야 함.
IPv4 fragmentation은 라우터에서만 일어난다.
→ F. 라우터에서도 일어나지만 UDP 패킷이 내려올 경우 host의 IP계층에서 fragmentation을 수행할 수 있다.
IPv4 헤더에서 Internet에 돌아다니는 ghost traffic을 없애기 위해 사용하는 필드가 있다.
→ T. Time to Live
. host에서 초기 설정한 값은 255를 넘을 수 없으며, TTL=0
인 트래픽이 들어올 경우 ghost traffic으로 간주하여 drop한다.
IPv4 헤더는 옵션을 제외하고 대체적으로 ___ byte다.
→ IP헤더와 TCP헤더는 대체적으로 20byte.
IPv4 Body에 들어가는 내용은 항상 TCP Segment 혹은 UDP Datagram이다.
→ F. IPv4 Body에 들어가는 내용은 반드시 4계층에서 작성된 메시지가 아니다. (UDP의 PDU이름은 Datagram이라고 함. ) 3계층에서 만들어낸 프로토콜 메시지인 OSPF 메시지나 ICMP 메시지가 들어갈 수도 있음.
IPv4 헤더의 demux를 위한 필드?
→ Upper layer
2400byte짜리 Datagram이 700byte짜리 Datagram으로 쪼개져서 나가야함.
2400 byte Datagram은 20 byte 헤더와 2380 byte 바디로 이루어짐.
700byte짜리 Datagram으로 쪼개져야 하는데 그 중 20 byte는 헤더 자리.
2380 byte를 680byte짜리로 나눠야 함. 같은 패킷에 속해있다는 것을 알기 위해 422라는 ID
를 부여.
네 개의 패킷으로 나눠지니 FragFlag
는 1, 1, 1, 0.
offset
은 초기 0, 680씩 채워 보내면 680/8 (octet으로 표현), 6802/8, 6803/8
Total datagram length
는 첫 세 개는 당연이 700 (20+680)
마지막은 2380-(680*3)+20(헤더)=360.
Pop Quiz
PC 한 대는 IP주소 하나만을 가진다. (X)
host도 Network Interface Card를 여러 개 가질 수 있기 때문에 IP주소를 여러 개 가질 수 있다. 즉, IP address는 device에 붙는 것이 아닌 2계층 Network Interface Card에 3계층 주소를 가져다 붙여놓는 것. 라우터에서의 IP주소는 라우터에 붙는 것이 아닌 Port마다 붙는 것. if, 포트가 세 개인 라우터라면 IP 주소도 세 개.
interface가 실제로 어떻게 연결되나? 2계층이 연결해줌.
Ethernet의 경우 switch가, Wifi의 경우 access point가 있을 수 있음. (2계층)
네트워크에서 한 hop을 지나간다 → 하나의 3계층을 지나간다 → 하나의 Subnet을 지나간다. (스위치는 IP가 없는 2계층짜리 device이므로 한 홉이라 표현하지 않음. 다음 라우터까지가 한 hop)
하나의 네트워크가 분할되어 나누어진 작은 네트워크.
인터넷은 여러 개의 ISP로 이루어져 있으며, 여러 개의 서브넷을 가진다.
IP주소를 보고 같은 subnet인지, 다른 subnet인지 판별할 수 있어야 함.
subnet part: high order 24 bits → 라우팅 할 때 사용
같은 subnet에 속하는 IP들은 subnet part가 동일
한 hop을 지나간다 = 하나의 subnet을 지나간다.
⇒ 하나의 subnet은 subnetpart/24 로 표현
: 32 bit로 표현했을 때 앞에서부터 (high order) 24 bits가 subnet.
⇒ 모든 subnet part의 길이가 같다는 전제 하에, 같은 subnet에 속하는 IP는 앞에서부터 24bits가 동일하다.
같은 subnet 안에서의 통신은 라우터가 필요 없이 스위치만 거치고도 도착할 수 있다.
⇒ 하나의 라우터를 지나간다는 것은 서로 다른 subnet을 지난다는 것.
host part: low order 8 bits (subnet mask) → 마지막 라우터가 호스트 찾을 때 사용
하나의 subnet 안에서는 라우터 없이 통신 가능하고, 다른 subnet을 지날 때는 반드시 라우터가 필요함.
라우터를 없앴을 때 분리되면 그것이 하나의 subnet (link 하나도 network임) → 24 bit가 다름
IPv4를 Classful하게 addressing하는 경우와 CIDR(Classless InterDomain Routing)하게 addressing 하는 경우가 있음. 현재 대부분은 CIDR을 사용.
IPv4를 디자인한 사람들이 32bit이면 address로 충분하다고 생각. (40억 개 정도)
A, B, C, D, E class로 분류함.
32bit 맨 첫자리가 0이면 A class, 앞이 0이면 subnet mask가 무조건 8.
0하나 뺐으니까 구분할 수 있는 네트워크는 2의 7승 개. → A class는 2의 7승-2개의 서로 다른 subnet을 정의할 수 있음.
만약 앞의 8 비트가 모두 0이라면? 즉, 0.~.~.~이라면 몇 개의 host를 정의할 수 있을까? 2의 (32-8)승-2.
(0.0.0.0/8은 Network Identifier, 0.255.255.255/8은 Broadcast address로 쓰지 않아 -2)
32bit 맨 첫 두 자리가 10이면 B class, 앞에서부터 16bit를 subnet으로 사용.
10(두 개) 뺐으니까 구분할 수 있는 subnet은 2의 14승-2개. host는 2의 16승-2개의 variation을 만들 수 있음.
32bit 맨 첫 세 자리가 110이면 C class, 앞에서부터 24bit를 subnet으로 사용.
110(세 개) 뺐으니까 구분할 수 있는 subnet은 2의 21승-2개. host는 2의 8승-2개의 variation을 만들 수 있음.
나중을 위해 남겨놓음
IP주소가 고갈되기 시작하니까, /21, /7, /4, /28 등 필요한 만큼만 subnet field를 쪼개 쓰게 해놓음
위의 IP는 모두 routing이 가능한 public (routable) address
non-routable. 집에서 쓰는 주소. 집 밖으로 나갈 수 없음.
IP주소를 setup 해야 함. IP주소가 있어야 인터넷을 시작할 수 있으니.
device에서 인터넷을 접속해서 서비스를 받아야 함. 가장 기본적으로 IP 주소가 필요.
인터넷을 쓰려면?
host의 interface card는 gateway router(첫번째 router)의 interface card와 연결 되어야 함. (스위치는 IP X)
hard-coded by system admin in a file
: 동적으로 IP, NETMASK, GATEWAY, DNS와 같은 네트워크 정보를 할당해주는 프로토콜.
DHCP 서버는 이에 대한 네트워크 정보를 가지고 있다가, 클라이언트로부터 요청이 오면 정보를 전달
앞의 세 가지를 몰라도 protocol이 setting 해줌. dynamically get temporary address from as server
Client가 DHCP 프로토콜을 설정하면, 필요할 때만 IP주소를 할당 받고, 필요 없으면 다시 반납한다.
오고 가는 유저가 많은 경우에는 고정된 IP가 아닌 Dynamic하게 일시적으로 할당되는 IP를 많이 사용한다.
Layer 5 protocol (Layer 4 protocol로는 UDP를 사용)
server port: 67, client도 well-known port 68을 열고 있어야 함.
Client가 쓰는 socket의 port는 OS가 random하게 할당, but DHCP는 client도 68번 port를 열어야 함.
왜 Client port도 고정? UDP 쓰는 DHCP Client는 IP주소가 없으니 응답을 보낼 때 broadcast 시켜버림. broadcast 시키면 내 subnet안의 모든 Network Interface card들의 IP계층에서 receive. 윗 계층에 보낼 때 DHCP가 local하게 관리되는 well known이 아닌 port를 열고 있다면 같은 port를 열고 있는 다른 Client에게도 응답이 갈 수 있으므로, 68번 well known port를 연 Client에게만 응답을 주도록 한다.
DHCP 외에도 Broadcast로 동작하는 프로토콜(Ex. MQTT)이 있다.
subnet에 join할 때 일시적이고 동적으로 IP를 할당 받고, subnet을 떠날 때 다시 IP를 돌려준다.
하나의 subnet에 DHCP server가 달려있다. 어떤 Client가 68번 port를 열고 이 DHCP server가 있는 subnet에 와서 IP주소를 물었음. (subnet 내부에서만 broadcast가 가능함) DHCP 서버는 67번 port를 열고 있음.
broadcast하면 subnet 내부의 모든 host의 IP계층으로 메시지가 전송되고, 그 윗계층으로 올라가는 과정에서 67번 port를 열고 있는 DHCP server만 메시지를 수신, IP주소를 응답으로 할당.
응답할 때도 마찬가지로 subnet 내부의 모든 host의 IP계층으로 메시지가 전송되고, 68번 port를 열고있는 DHCP Client에게만 메시지가 전송 됨.
만약 DHCP server가 없는 subnet의 Client가 IP를 할당 받고 싶다면? 라우터에 DHCP relay agent 기능을 넣어 DHCP msg인 것을 알고 모든 subnet으로 broadcast, DHCP server가 있는 쪽에서 메시지를 수신.
yiaddr
IP address를 lifetime
동안 쓸 수 있음 (아직 미결정)⇒ message를 주고 받을 때 끝까지 broadcast를 사용, Client는 # 68 port를 listen, msg pair로 ID 사용
renew 사용 중인 address를 더 사용할 수 있도록 renew할 수 있음 (renew its lease)
reuse 할당된 address의 사용이 끝나면 해당 주소를 다른 client가 사용할 수 있음
mobile users network에 join, renew하는 dynamic한 주로 mobile user가 많이 사용
⇒ DHCP는 10개의 IP를 100명의 user가 사용할 수 있는 기술
→ Since a DHCP server broadcast its reply and
→ if the client use a random port assigned by OS, then an unintended client in the same network which uses broadcast communication (e.g., chat app. MQTT) may receive the DHCP reply.
→ 1024
→ 1022
"Multiple hosts may communicate (exchange L5 app. messages) with each other without a router"
→ Yes, they can be connected via a L2-switch when they are in the same network.