- 6. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다.2023년 02월 02일 17시 41분 11초에 업로드 된 글입니다.작성자: 각수짱728x90반응형SMALL
IPv4 프로토콜
IPv4가 하는 일
네트워크 상에서 데이터를 교환하기 위한 프로토콜
데이터가 정확하게 전달될 것을 보장하지 않는다.
중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있다. (악의적으로 이용되면 DoS 공격이 됨)
데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장한다.
20바이트
IPv4 프로토콜의 구조
Version : IP프로토콜의 버전, 일반적으로 4만 온다. IPv6 프로토콜은 따로 있다.
IHL : IP Header Length, 일반적으로 옵션을 제외한 20바이트, 이를 4로 나눠서 표기
Total Length : 페이로드까지 합친 크기
Identification : 조각화가 발생했을 때 각각의 조각들이 원래 하나의 데이터였다는 것을 구분하기 위한 ID 값(OS에서 랜덤 생성)
IP Flags : 조각화가 발생했는지 아닌지, 조각화를 할 것인지 하지 않을 것인지 결정하는 값
x:예약 필드, D: Don't 조각화 하지 않겠다 선언, m: more 조각화 발생함을 나타냄
Fragment Offset : 조각화가 발생했을 때 각각의 조각들의 시작 위치를 나타내는 값
TTL : 네트워크 상에서 패킷의 무란 루프를 방지하기 위한 값, 라우터를 하나 넘어갈 때마다 1씩 감소
windows : 128 Linux : 64
Protocol : 상위 프로토콜이 뭔지 미리 알려준다. (ICMP:1, TCP:6, UDP:17)
헤더 체크썸 : 헤더의 오류를 확인하기 위한 값
출발지 IP주소
목적지 IP주소
ICMP 프로토콜
ICMP가 하는 일
ICMP (Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)
네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지를 전송받는 데 주로 쓰인다.
프로토콜 구조의 Type과 Code를 통해 오류 메시지를 전송받는다.
8바이트
ICMP 프로토콜의 구조
타입 : 대분류
0(정상적인 응답) // 3(목적지로 도착 불가능) // 8(요청) // 11(시간 초과) // 5(리다이렉트, 라우팅 테이블 수정)
전송이 안된 것 도착은 했지만 응답 x
코드 : 소분류
체크썸 : 해당 패킷의 오류를 확인하기 위한 값
나머지 : ICMP 프로토콜을 이용하는 프로그램에서 추가하고 싶은 기능을 추가하는 부분
라우팅 테이블
내가 보낸 패킷은 어디로 가는가
cmd 창에서 netstat -r 입력 시 확인가능
다른 네트워크와 통신 과정
다른 네트워크까지 내 패킷의 이동 과정
A가 B와 통신할 때
1. A의 라우팅 테이블 확인 (192.168.20.0/24 → 192.168.10.1) [B의 네트워크 대역은 →로 가라라는 뜻)
2. Eth | IPv4 | ICMP 요청 패킷 전송 (이더넷의 맥주소는 가장 가까운 주소 (cc:cc:cc:cc:cc:cc:))
3. 1 공유기 패킷 2 계층 3 계층 4 계층 디캡슐화해보고 확인 후 다시 인캡슐화
4. 1 공유기 라우팅 테이블 확인 (192.168.20.0/24 → 192.168.30.2)
5. 3 계층장비에게 패킷 전송
6. 3 계층장비에서 패킷 디캡슐화 확인 인캡슐화
7. 3 계층장비 라우팅 테이블 확인
8. 2 공유기에게 패킷 전송
9. 2 공유기에서 패킷 디캡슐화 확인 인캡슐화
10. 2 공유기 라우팅 테이블 확인
11. B로 전송
... B에서 A까지 다시 반복
IPv4의 조각화
조각화란?
큰 IP 패킷들이 적은 MTU(Maximum Transmission Unit)를 갖는 링크를 통하여 전송되려면 여러 개의 작은 패킷으로 쪼개어/조각화 되어 전송돼야 한다.
즉, 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환이 필요하다.
일단 조각화되면, 최종 목적지에 도달할 때까지 재조립되지 않는 것이 일반적이다.
IPv4에서는 발신자뿐만 아니라 중간 라우터에서도 IP조각화가 가능하다.
IPv6에서는 IP 단편화가 발신지에서 만 가능하다.
재조립은 항상 최종 수신지에서 만 가능하다.
MTU : 최대 전송 단위, Maximum Transfer Unit, 일반적으로 1500바이트
MTU 3300바이트
데이터를 3300 - 20 = 3280 씩 조각화
MTU IPv4
(크기/8)
플래그 오프셋 데이터크기
첫 번째 패킷 1 0 3280
두 번째 패킷 1 410 3280
세 번째 패킷 1 820 3280
네 번째 패킷 0 1230 2140
전송하려는 데이터 크기 [6474] 바이트
MTU [1328] 바이트
데이터를 [1328] - 20 = [1308] 씩 조각화
MTU IPv4
(크기/8)
플래그 오프셋 데이터크기
첫 번째 패킷 1 0 1308
두 번째 패킷 1 163.5 1308
세 번째 패킷 1 327 1308
네 번째 패킷 1 490.5 1308
다섯 번째 패킷 0 654 1242
전송하려는 데이터 크기 [8937] 바이트
MTU [2300] 바이트
데이터를 [2300] - 20 = [2280] 씩 조각화
MTU IPv4
(크기/8)
플래그 오프셋 데이터크기
첫 번째 패킷 1 0 2280
두 번째 패킷 1 285 2280
세 번째 패킷 1 570 2280
네 번째 패킷 0 855 2097큰 데이터를 전송하는 패킷이 조각화하는 과정
순수데이터가 2000이라 하였을 때 ICMP요청 인캡슐화 후 IPv4인캡슐화 (IPv4 20byte ICMP요청 8byte)
MTU 1500 < 전송하려는 패킷
전송 불가
MTU를 거치고난뒤 이더넷을 붙임
728x90반응형LIST'네트워크 기초' 카테고리의 다른 글
8. 비연결지향형 UDP 프로토콜 (0) 2023.02.03 7. 컴퓨터의 프로그램끼리는 이렇게 데이터를 주고 받는다 (0) 2023.02.03 5. 통신하기 전 반드시 필요한 ARP 프로토콜 (0) 2023.02.02 4. 실제로 컴퓨터끼리는 IP주소를 사용해 데이터를 주고 받는다. (0) 2023.02.01 3. 가까이있는 컴퓨터끼리는 이렇게 데이터를 주고받는다. - 실습 (0) 2023.02.01 이전글이 없습니다.댓글