익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
Internet Protocol 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
Internet Protocol
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[Network Layer]] ==개요== IP(Internet Protocol)은 인터넷에서 패킷을 송신하기 위한 network layer의 프로토콜이다. ==IPv4 Datagram Format== [[파일:IPv4 Datagram format.png|대체글=Figure 1. IPv4 Datagram format|가운데|섬네일|382x382픽셀|Figure 1. IPv4 Datagram format]] 인터넷의 network layer의 데이터 단위는 '''데이터그램(datagram)'''이다. 데이터그램의 데이터 그램은 figure 1과 같이 구성되어있다. 이때 이 문서를 이해하기 위해서는, fragmentation/reassembly의 구현을 위한 16-bit identifier, flgs, '''fragment offset'''과 '''32비트 IP 주소'''를 나타내기 위한 헤더 필드가 존재가 존재한다는 것만 기억하면 된다.<br> 이때 datagram의 IP 헤더필드는 20bytes이고, TCP 헤더필드는 20bytes이다. 따라서 datagram의 [[overhead]]는 <code>40bytes + app layer overhead</code>이다. ==Fragmentation== 모든 링크(link)들은 각각의 해당 link-level이 운반할 수 있는 '''최대 frame<ref>Link layer에서의 데이터 단위이다.</ref>의 크기'''인 '''MTU(Max Transfer Size)'''를 가지고 있다. 각각의 IP 데이터그램은 한 라우터(router)에서 다음 라우터로 이동할 때 link layer의 frame에 캡슐화되기 때문에, MTU는 IP 데이터그램의 크기에 대해 제약을 가한다. 이로 인해 발생하는 진짜 문제는 송신 호스트(host)에서 수신 호스트로 패킷이 이동할 때 거쳐가는 링크의 MTU들이 서로 다른 수 있다는 것이다. 예를 들어, 다양한 링크를 연결하는 라우터에서 한 링크에서 IP 데이터그램을 수신했을 때, '''출력 링크의 MTU가 입력 링크의 MTU보다 작으면 문제'''가 된다. 이 경우 문제는 커다란 IP 데이터그램을 그보다 작은 크기의 MTU를 가지는 링크에 어떻게 전달할지이다.<br> 이때 해결책은 '''IP 데이터그램의 페이로드를 두 개이상의 더 작은 IP 데이터그램에 나누어 담고(fragment), 각각의 쪼개진 데이터그램을 frame으로 캡슐화해서 전송'''하는 것이다. 이때 쪼개진 데이터그램을 '''fragment'''라고 한다. 이때 fragment들을 라우터에서 합쳐서 다시 이를 보내는 것은 네트워크 성능을 저하시킬 수 있기 때문에, '''수신측 호스트에서 fragment들을 받아서 원래대로 재조립(reassemble)'''한다. 이때 reassemble을 수신측 호스트가 수행할 수 있도록, IP 데이터그램 헤더에는 identifier, flag, fragmentation offset 필드가 존재한다.<br> Figure 2는 fragmentation과 reassembly가 일어나는 간단한 상황을 보여준다. 그리고 figure 3은 해당 상황에서 어떻게 데이터그램이 쪼개지는지 보여준다. 해당 상황은 4000bytes의 크기를 가지는 데이터그램은 MTU가 1500bytes인 링크에 전송하고자 할 때이다. Figure 3의 각 데이터그램에 있는 필드들의 역할은 다음과 같다. * length: datagram의 전체길이 * ID: 원래 데이터그램의 고유 식별자 * fragflag: 마지막 fragment이면 0, 아니면 1 * offset: 데이터그램의 데이터 부분을 기준으로, 8bytes 단위로 몇 번째인지를 의미한다. 이를 바탕으로 각각의 fragment들의 헤더필드가 어떻게 설정되는지를 살펴보면 다음과 같다. {| class="wikitable" |+fragment 1 !헤더 필드 !값 !이유 |- |length |1500 |MTU 한도인 1500 바이트까지 전송 (1480 데이터 + 20 헤더) |- |ID |x |동일한 원래 데이터그램이므로 ID는 같음 |- |fragflag |1 |뒤에 조각이 '''더 있음'''을 나타냄 (More Fragments = 1) |- |offset |0 |데이터의 시작 위치는 0바이트 → 0 / 8 = 0 |} {| class="wikitable" |+fragment 2 !헤더 필드 !값 !이유 |- |length |1500 |MTU 한도인 1500 바이트까지 전송 (1480 데이터 + 20 헤더) |- |ID |x |동일한 원래 데이터그램이므로 ID는 같음 |- |fragflag |1 |뒤에 조각이 '''더 있음'''을 나타냄 (More Fragments = 1) |- |offset |185 |데이터의 시작 위치는 1480바이트 → 1480 / 8 = 185 |} {| class="wikitable" |+fragment 3 !헤더 필드 !값 !이유 |- |length |1000 |남은 데이터는 4000 - 2960 = 1040 (1020 데이터 + 20 헤더) |- |ID |x |동일한 원래 데이터그램이므로 ID는 같음 |- |fragflag |0 |'''마지막 조각'''이므로 더 이상 남은 조각 없음 (MF = 0) |- |offset |370 |데이터의 시작 위치는 2960바이트 → 2960 / 8 = 370 |} ==각주== [[분류:컴퓨터 네트워크]]
Internet Protocol
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록