IPv4 프로토콜
IPv4가 하는 일
- 네트워크 상에서 데이터를 교환하기 위한 프로토콜
- 데이터가 정확하게 전달될 것을 보장하지 않는다
- 중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있다 (악의적으로 이용하면 DoS 공격)
- 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장
다른 네트워크의 특정 대상을 찾는 IPv4 프로토콜
- 보통 IP Option은 거의 사용하지 않고 20 Bytes 사용
- Header는 20 ~ 60bits인데 주어진 건 4칸? (4bit - 최대로 표현할 수 있는 수 15) => Header / 4 수를 씀
일반적으로 5 사용 - TOS는 현재 사용하지 않음 => 0
- Total Length: Header + Payload의 길이
- Identification와 IP Flags, Fragment Offset은 하나의 셋트라고 생각
- Identification: 잘게 잘라서 온 데이터를 알아볼 수 있도록 하는 ID
- Flag Flags: 3bit로 이루어져 있음
- x: 사용하지 않음
- D: 데이터를 조각내지 않고 통으로 보낼 때 설정 (최대 전송단위보다 클 경우 데이터 전송 안됨)
- M: 조각화가 되어있을 경우, 최대 전송단위보다 더 커서 뒤에 데이터가 있을 경우 1로 설정됨
- Fragment Offset: 데이터 시작 부분부터 떨어진 순서 (조각난 데이터의 순서) / 8 되어 있음
- TTL: 패킷이 살아있는 시간 (3계층 Router를 지날 때마다 1씩 차감됨)
- 운영체제마다 다르게 설정됨, 이걸로 상대방 컴퓨터 운영체제를 유추할 수 있음
- windows 128
- linus 64
- 운영체제마다 다르게 설정됨, 이걸로 상대방 컴퓨터 운영체제를 유추할 수 있음
- Protocol: 상위 프로토콜이 뭔지 알려줌
- ICMP (3계층): 01
- TCP (4계층): 06
- UDP (4계층) 11 (십진수로 17)
- Header Checksum: 앞 부분을 검증하는 용도
ICMP 프로토콜
ICMP가 하는 일
- Internet Control Message Protocol 인터넷 제어 메세지 프로토콜
- 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메세지를 전송 받는데 주로 사용
- 프로토콜 구조의 Type과 Code를 통해 오류 메세지를 전송 받음
특정 대상과 내가 통신이 잘되는지 확인하는 ICMP 프로토콜
- Type: 카테고리
- 기본
- 0: Echo Reply (응답)
- 8: Echo (요청)
- 뭔가 잘못됐을 때
- 3: Destination Unreachable (목적지까지 가지를 못함 ex 상대방 방화벽)
- 11: Time Exceded (목적지까지는 갔는데, 응답 x)
- 보안
- 5: Redirect
- 기본
- Code: Type에서 분류한 것의 소분류
실습
wireshark
ICMP 확인
IPv4 확인
라우팅 테이블
어디로 보내야 하는지 설정되어 있는 라우팅 테이블
다른 네트워크 대역을 찾아가기 위한 지도
다른 네트워크와 통신 과정
내 컴퓨터에서 보낸 패킷이 다른 네트워크의 컴퓨터까지 이동 과정
요청을 받은 B는 역과정으로 A에게 응답을 보냄
실습
cmd에서 아래 커맨드 입력
netstat -r
IPv4의 조각화
조각화란?
- 큰 IP 패킷들이 적은 Maximum Transmission Unit(MTU)(보통 1500 byte)를 갖는 링크를 통하여 전송되려면 여러개의 작은 패킷으로 쪼개어(조각화)되어 전송돼야 함
- 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환 필요
- 일단 조각화 되면, 최종 목적지에 도달할 때까지 재조립되지 않는 것이 일반적
- IPv4에서는 발신지 뿐만 아니라 중간 라우터에서도 IP 조각화가 가능
- IPv6에서는 IP단편화가 발신지에서만 가능
- 재조립은 항상 최종 수신지에서만 가능
여러 개의 패킷으로 조각화된 패킷
실습
예시 문제
- 보내려는 데이터 크기: 2379
- MTU: 980
- 몇개의 패킷으로 쪼개지는가?
- 첫번째 패킷의 데이터 크기는 몇인가?
- 마지막 패킷의 데이터의 크기는 몇인가?
예시 풀이
- 헤더를 제외한 페이로드의 최대 크기: 980 – 20 = 960
- 필요한 패킷의 수 = 2379 / 960 = 2/48 => 3개의 패킷 필요
- 첫 번째 패킷의 데이터 크기: 헤더를 제외한 960 + 헤더 20 = 980
- 마지막 패킷의 데이터 크기 = 남은 데이터 2379 - 960 - 960 = 459 + 헤더 20 => 479
참고자료
https://www.youtube.com/watch?v=_i8O_o2ozlE&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=9
위 강의를 보고 정리한 글입니다.
'Computer Science > 네트워크' 카테고리의 다른 글
08. 비연결지향형 UDP 프로토콜 (0) | 2023.08.11 |
---|---|
07. 컴퓨터 프로그램끼리 데이터 주고 받는 방법 (4계층) (0) | 2023.08.10 |
05. 통신하기 전 반드시 필요한 ARP 프로토콜 (0) | 2023.08.01 |
04. IP 주소 (3계층) (0) | 2023.07.28 |
03. 가까이 있는 컴퓨터 간의 통신 (2계층) (0) | 2023.07.26 |