[Network] Network Layer : IP & DHCP & ICMP
Network Layer
네트워크 계층은 OSI 모델이나 TCP/IP 모델에서 호스트 간 통신을 관리하고 데이터의 경로 설정과 전송을 담당하는 계층이다.
한 호스트에서 다른 호스트로의 라우팅(경로 설정 + 경로 결정)을 담당하면서 최적의 데이터 경로를 설정한다.
Packetizing
모든 Layer에서 수행되는 기능. Segment를 받아서 Network layer에서 사용할수 있는 데이터 단위로 바꿔준다.(Encapsulation, Decapsulation)
Network Layer는 철저하게 Payload(데이터)를 열어보지 않는다는 철칙이 있다.(편지를 보낼 때 우체국에서 열어보지 않는다) 그러나 특정 경우에는 까봐야 하는 경우도 생길 수 있음.
Routing and forwarding
Routing (빠른길 찾기) : 패킷이 전달 될 때에 라우터는 주변의 네트워크 상황을 고려하여 패킷을 전송한다. 가장 패킷의 이동이 원활한 네트워크로 패킷의 이동경로를 정한다.
Forwarding (보내기) : 패킷이 라우터에 들어 오게 되면 적절한 출력 링크로 패킷을 전송하는 작업을 의미한다. 라우팅 과정을 통해서 경로가 결정되면 포워딩하면서 적절히 전달하는 작업을 수행한다.
Transport Layer와의 차이점
네트워크 계층은 패킷을 목적지로 라우팅하고, 다양한 네트워크 간의 통신을 관리한다. IP 주소를 사용하여 호스트를 식별한다.
전송 계층은 프로세스 End-to-end 통신을 관리하며, 데이터의 신뢰성과 흐름 제어를 보장한다. 포트 번호를 사용하여 호스트 내의 프로세스를 식별한다.
IP 프로토콜
데이터 패킷의 라우팅 및 전달을 담당하는 프로토콜. 인터넷에서 사용된다. 실제로 데이터를 실어 나르는 트럭이나 버스 역할.
Addressing convention : 주소를 쓸 때의 약속.
Datagram format : 형식 규정
Routing protocol : 경로의 경우의 수를 알려주는 프로토콜(라우팅 관련 정보) -> 서로 정보를 교환해서 라우터가 경로를 결정
ICMP protocol : 라우터들을 감시하는 체계
인터넷이 성공한 이유 : IP로 통일되었다. 복잡도 감소
Hourglass : 모래시계 형태. 인터넷 성공의 핵심.
Packet switching : 버퍼를 충분히 확보하고, Congestion의 발생을 최대한 피해야 함
특징
1. 단순함 : 간단하고 직관적인 설계. 이러한 단순함은 인터넷의 성장과 확장의 이유이다.
2. Connection-less(비연결성): Connection을 맺지 않고 단지 데이터를 보내기만 하면 되기 때문에 데이터 전송에 빠르고 효율적이다.
3. Unreliable(신뢰성 없음) : Connection-less의 특성과 함께 패킷이 정확하게 도착할지 여부를 보장하지 않는다. 이는 데이터 패킷이 손실되거나 중복되거나 순서가 바뀔 수 있다는 것을 의미한다.
4. Best-effort(최선의 노력) : 데이터를 전송할 때 최선의 노력을 다하며, 네트워크에서 최선의 경로를 찾아 전달하려고 한다. 하지만 네트워크 상황에 따라 데이터 패킷이 손실될 수 있.
5. Out-of-sequence(순서가 바뀜) : 전송 순서가 바뀔 수 있다. 패킷이 네트워크에서 다른 경로를 통해 전송되거나 다른 패킷보다 늦게 도착할 수 있기 때문이다. (상위 프로토콜에서 처리되어야 한다. TCP에서의 Out of Order 발생 이유)
IP Field
IP Fragment : Fragment(Segment와 비슷하지만 좀 막짜르는 경향) : 하위 Physical layer가 실어 나를 수 있는 데이터 길이의 최대 길이에 맞춰 데이터를 자른 IP의 데이터 단위 -> 나중에 조각들을 다시 Reassemble하여 사용한다.
자른 단위(fragment)마다 헤더를 붙여준다.-> 데이터는 분할되지만 전체 길이가 증가한다.
1. Version : IP 프로토콜의 버전 IPv4 & IPv6
2. Header length : 일반적으로 20byte. 4비트 단위로 표현된다.
3. TOS(Type of service) : 옛날에 서비스 유형으로서 1byte로 사용함. 더이상 널리 사용되지 않으며, DSCP와 같은 기능이 도입되었다.
4. Total Length : 패킷 전체의 길이
5. TTL(Time to live) : 라우터 하나(한 홉)을 통과할 때 마다 TTL 값이 감소한다. 몇 홉을 지날 수 있는지에 대한 지표. TTL 값이 0이 되면 패킷은 폐기된다.
6. Protocol(Upper layer) : Carry하고 잇는 상위 계층 프로토콜의 유형(TCP/UDP)
7. Header checksum : 헤더의 오류를 검출하기 위한 체크섬 값, 다음 라우터가 감지할 수 있도록 오류 방지 코드
8. Option : Header length에 따라 Option이 추가로 붙으며 몇 개가 붙어잇는지 파악할 수 있다. Option을 제외하고 헤더는 20byte
- Timestamp : 특정 라우터를 지나온 시간,
- Record route : 지나왔던 경로를 쓸 수 있도록.
- Specify : 어디를 꼭 거쳐라 명시를 할 수 있다.
10. Identification(16-bit) : 라우터에서 그리고 최종 목적지에서 fragment들을 reassemble(재조합)한다. 이 때 fragment들이 하나였다는 것을 명시하기 위해 ID가 필요하다.
11. Fragment Offset : 첫 fragment에서 몇 바이트 뒤에서 시작되는 fragment인지 알려준다. 앞의 fragment의 길이를 명시해 두었다.
12. Flag
- MF : fragment의 마지막 패킷이 아니다. 맨 마지막 fragment만 0
- DF : 더 이상 잘라질 수 없을 때의 boolean
IP 주소 체계
https://sjh9708.tistory.com/185
DHCP
네트워크에서 호스트에게 IP 주소 및 기타 네트워크 구성 정보를 동적으로 할당하는 프로토콜
호스트가 네트워크에 연결될 때 자동으로 IP 주소를 받을 수 있도록 한다.
특징
1. 제한시간이 있다. 같은 Address의 재사용을 허용한다.
2. 해당 Address를 지금 이 순간에는 나만 사용해야 한다 -> 동시에 Unique해야 한다.
3. 임대 : 필요한 노드들에게 임대 기간(IP Lease Time) 동안 IP Address를 할당해 주는 것, 노드가 임대기간 이후에도 계속 IP 주소를 사용하고 싶거나, 더이상 필요하지 않게 된다면 DHCP 서버에 요청하게 된다.
4. Server-client 구조면서, Well-known port로 67(서버), 68(호스트) 포트 주로 사용
DHCP 4-way Handshake
DHCP는 클라이언트와 서버 간의 4-way-handshake를 통해 동작한다. 클라이언트에게 IP 주소 및 기타 네트워크 구성 정보를 제공하고, 클라이언트가 이를 수락하고 채택하는 과정이다.
1. DHCP Discover
클라이언트가 네트워크에 연결될 때, DCHP 서버를 찾기 위해서 Broadcast 방식으로 메시지를 보낸다. 클라이언트의 MAC 주소를 포함한 DHCP 옵션 정보가 포함되며 UDP를 사용하여 전송된다. 클라이언트는 일반적으로 68번 포트를 사용한다.
2. DHCP Offer
DHCP 서버는 메시지를 수신하면, 사용 가능한 IP 주소를 가지고 있는 DHCP Offer 메시지를 클라이언트에게 보낸다. 이 메시지에는 클라이언트에게 할당할 IP 주소와 함께 네트워크 구성 정보(임대시간(Lease Time), Router IP 등)가 포함된다.
메시지는 Broadcast 혹은 Unicast로 전송되며, 서버는 일반적으로 67번 포트를 사용한다.
3. DHCP Request
클라이언트는 DHCP Offer 메시지를 수신하면, 제안된 IP 주소를 수락하고 해당 IP 주소를 요청하기 위해 DHCP Request 메시지를 DHCP 서버에게 보낸다. 브로드캐스트로 전송되며, 클라이언트는 임의의 UDP 포트(일반적으로 68번 포트)를 사용한다.
클라이언트는 다른 DHCP 서버로부터의 제안을 거절하고 하나의 서버와만 통신한다.
DHCP Server Identifier : 여러 DHCP 서버가 Offer를 보낸 경우, 단말은 이 중에 적합한 DHCP 서버 하나를 고르게 되고, 그 서버의 IP 주소를 포함시켜 Request를 보낸다.
4. DHCP Acknowledge
DHCP 서버는 DHCP Request 메시지를 수신하면, 클라이언트에게 IP 주소와 구성 정보를 할당하는 메시지를 보내고 클라이언트에게 할당된 IP 주소와 함께 네트워크 구성 정보를 포함한다. Broadcast 혹은 Unicast로 보내진다.
DHCP 패킷 분석
아래 사진과 같이 Ipconfig/release를 통해 현재 내 단말기에 할당된 IP주소를 초기화 시키고 renew를 통해서 IP 주소를 재할당 받았다.
해당 과정에서 Wireshark에서 4-way-handshake 과정을 캡처하여 확인할 수 있었다.
Transport Layer 프로토콜 확인
해당 패킷을 조사했을 때 Transport layer로 UDP를 사용하는 것을 확인할 수 있었다.
4-way handshake 과정
Discover 과정에서는 client가 server로 broadcast 형식으로 메시지를 보낸다. Source port는 68이고 Destination Port는 67이다.
여기서 67은 Well-known port로 UDP나 DHCP를 관할하는 Well-known port number이다. Client에 해당되는 68도 well-known-port이다
DHCP에서 IP주소를 할당 받기 위해서 Physical Address를 함께 보내는 것을 알 수 있다. MAC 주소가 현재 로컬 단말과 일치하는 것을 확인할 수 있었다.
Wireshark에서 해당 패킷의 Message Handshake 유형을 구분하는 방법 : Packet이 Discover에 해당되는 1과 Request에 해당되는 3으로 구분되는 것을 Option에서 확인할 수 있다.
Transaction ID : 0x17316f54
4-way handshake과정에서 Transaction ID가 동일한 것을 알 수 있다.
Transaction ID는 Discover부터 ACK까지의 4-way handshake과정이 연속적이라는 것을 증명하는 ID이므로 같게 나온다.
Source Address는 0.0.0.0이었고 Destination Address 255.255.255.255이었다.
이는 IP Address가 배정받기 전이므로 0.0.0.0인 상태이고 255.255.255.255에 해당되는 주소는 모든 서버들의 broadcast이다.
DHCP 서버를 찾는 과정이 필요하므로 Broadcast 로 보내게 되고 Offer에서 오는 패킷을 통하여 DHCP 서버에 해당하는 IP를 주소를 알아내는 Relay Agent 의 221.167.219.254라는 IP주소를 확인하였으며 실제 DHCP 서버의 주소는 121.138.7.42이다.
또한 이 과정 이후 Handshake 과정을 통해서 내 CPU는 121.167.203.110에 해당되는 IP주소를 할당 받은 것을 확인할 수 있다.
ICMP
호스트 및 라우터 간의 통신 문제를 식별하고 해결하는 데 사용된다.
IP 패킷에 의존한다. (IP라는 트럭을 타고 다닌다.) 그러나 IP보다 상위 레이어는 아니다.
IP Protocol의 Unreliable한 성격을 보완할 수 있다.
역할 : Error을 발견했을 때 서로 간에 공유하고 패킷전송에 실패했을 때 원인 메시지 등을 주는 역할. 패킷이 잘 가는지 확인하는 역할.
ex) 라우터가 패킷을 버렸을 때, TTL로 드랍되엇을 때, 필요에 따라서 Fregment로 쪼개고 Reassemble하는데 일부가 누락되었을 때 등
Error 메시지가 왔을 때 어떠한 패킷인지 알려주는 방법 : 에러난 패킷의 앞부분을 잘라서 보내 준다. (Error 난부분의 IP heade r부분과 추가적인 8byte(Transport layer의 헤더 정보))
주요 Message Type
- Echo Request (타입 8): Ping 명령이 이러한 유형의 ICMP 메시지를 사용하여 대상 호스트로부터 응답을 확인하여 네트워크의 살아있는 지의 여부를 확인할 때 사용한다.
- Echo Reply (타입 0): Echo Request 메시지에 대한 응답으로 사용. Ping 명령에 응답
- Destination Unreachable (타입 3): 목적지에 도달할 수 없는 상황을 알리기 위해 사용
ICMP 구조
Identifier, Sequence number: 패킷의 송신자가 라우터에 대한 정보를 식별하는 데 사용
Ping: 네트워크의 통신 상태를 확인하기 위해 사용되는 작업입니다. 해당 사이트가 작동하는지 여부를 확인하기 위해 사용
TTL: 목적지까지의 경로를 추적하는 목적으로 사용(Traceroute). 중간에 있는 라우터들이 응답할 수 있도록 TTL(Time-to-Live) 값을 활용한다. TTL 값은 패킷이 각 라우터를 통과할 때마다 1씩 감소하며, 0이 되면 라우터가 패킷을 폐기하고 응답을 보낸다.
Echo request/reply: Ping을 위한 진단 작업에 사용된다. Echo Request 메시지는 대상 호스트에게 보내고, Echo Reply 메시지는 그에 대한 응답이다. Identifier는 프로세스 ID를 나타내며, Sequence number는 요청 시간과 함께 보내져서 RTT(라운드 트립 타임)를 계산하고 ICMP에 기록된다.
- RTT : 데이터 패킷이 송신자에서 수신자까지 이동하고, 수신자에서 다시 송신자로 되돌아오는 데 걸리는 시간
ICMP 패킷 분석
PING 명령을 내린 후 관찰한 패킷이다. ICMP 패킷의 타입은 8(Echo(ping))이고, 코드 번호는 0이다.
- Type 8 Code 0은 Echo reply or request, Network unreachable이다.
헤더의 필드의 종류에는 Type, Code, Checksum, Identifier(BE, LE), Sequence number(BE, LE)가 있고 데이터 필드가 있다.
Ping을 사용하면 Echo request를 여러 개 보내게 되며 Identifier은 프로세스를 식별하기 위해 프로세스 ID를 사용한다.
Sequence number은 순서를 나타내고 하나씩 증가시키며 사용하며 Request time을 같이 적어서 보내면 RTT를 계산하게 된다.
Response frame이 존재하므로 라우터가 정상적으로 응답하는 것을 확인할 수 있었다.
"traceroute" 또는 "tracert" 명령어를 사용하면 데이터 패킷이 목적지로 이동하는 과정에서 통과하는 중간 라우터의 IP 주소와 응답 시간을 볼 수 있다.
TraceRT 명령을 내린 후 캡쳐한 패킷 중 하나이다. "No response seen"을 보면 알 수 있듯 Echo request에 대해서 응답을 하지 않는 라우터가 존재하는 것도 확인할 수 있었다. 또한 데이터의 byte가 64byte로 앞의 패킷과 차이가 나는 것을 알 수 있다.
라우터를 통과할 때 마다 TTL이 변화하는 모습도 확인해보았다.
오류 패킷 확인
ICMP 에러 패킷을 검사하였다. 여기에는 더 많은 필드가 포함되어 있었다.
우선 오류의 타입은 11(Time-to-live exceeded)로 TTL동안 전달되지 못하였다. 이는 라우터를 거칠 때 마다 TTL을 1씩 감소시키는데 0이 되어서 Error에 대한 reply가 전달된 것이다.
이 에러 난 패킷에 대해 정보를 전달해 주는 방법은 에러 난 패킷의 앞부분을 잘라서 보내주는 것이다. (Error 난 부분의 IP header부분과 추가적인 8byte(transport layer의 헤더 정보)) 여기에는 IPv4 프로토콜의 정보와 원래 보내려고 했던 ICMP의 정보가 담겨있다.
정상 패킷 확인
마지막 3개의 ICMP 패킷이다. 에러가 나지 않은 정상적인 ICMP 패킷이기 때문에 IP header부분에 대한 정보가 존재하지 않는다. 또한 Type이 reply에 해당하는 0이나 request에 해당하는 8이 되어 에러가 나지 않았음을 알 수 있다.
References
Data Communications and Networks, 4th Edition, Forouzan, McGraw-Hill
'CS > 운영체제 & 네트워크' 카테고리의 다른 글
[Network] Transport Layer : UDP (0) | 2024.03.03 |
---|---|
[Network] NAT : 공인 IP와 사설 IP (+ 포트 포워딩 설정) (0) | 2024.02.24 |
[Network] 네트워크 주소 체계(Port, MAC, IP Address)와 DNS (0) | 2024.02.23 |
[Network] 데이터 전송 : 프로토콜과 OSI 7계층 및 Wireshark 패킷 분석 (0) | 2024.02.23 |
[Network] 네트워크 개념과 구성 (0) | 2024.02.23 |