본문 바로가기

TCP/IP Protocol

TCP / IP 프로토콜 - 2 ( IP 분석 )

★ IP에 대해서...

IP는 신뢰성이 없고 비연결형인 데이터그램 프로토콜이며 오류검사나 추적을 하지 않는다.

IP는 하위 계층이 신뢰성이 없다고 가정하고 목적지까지 패킷을 전달하기 위해 최선을 다하지만 보장을 하지는 않는다.

그러므로 발신지가 여러 개의 데이터그램을 보내면 순서가 뒤바뀌어 도달할 수 있다. 이 중의 일부는 손실될 수 있고, 일부는 전달 도중 훼손될 수도 있다.

다시 말해 IP는 이 모든 문제를 해결하기 위하여 상위 계층의 프로토콜에 의존한다.


아래의 그림이 IP( Internet Protocol )Header 부분이다.



★ Version ( 4bit )
- IP Protocol Version 정보를 나타내느 필드. 현재 인터넷에서 사용되는 Version은 v4 이다.




★ Header Length ( 4bit ) // H.L
- IP Header의 길이를 4Byte 워드 개수로 나타낸다.
- Option 필드 때문에 가변적이다.
- 최소 20 Byte ~ 최대 60 Byte
- ( Default 값은 5 ) // 5 * 32 = 160 bit = 20 byte
- ( 최대값은 15 )    // 15 * 32 = 480 bit = 60 byte




★ 이전 Type-of-Service Flags ( 8bit ) // T.O.S
- Internet의 Application, Host, 그리고 Router에 우선순위 서비스를 제공한다.
- 이 필드를 설정하여 Datagram의 처리순서를 빠르게 할 수 있다.
- Ethernet에서는 사용하지 않음 -> 0으로 set
- QOS에서 사용
- 이제는 T.O.S 에서 D.S 로 바뀌었으므로 T.O.S 에 대한 설명은 파일로 첨부할것이다. 필요하신분은 다운받아 보시길..

파일 다운로드
 



★ 최근 Differential Service ( 8bit ) // D.S
- 이전의 T.O.S 서비스에서 지금의 D.S 로 변경되었다.
- 처음 6bit 는 codepoint 부필드이고 마지막 2bit는 사용되지 않는다.
- codepoint 부필드는 아래와 같은 방법으로 사용될 수 있다.
        * 오른쪽 3bit가 0 이면 왼쪽 3bit는 서비스 유형에서의 우선순위와 같은 의미로 해석된다. 즉, 과거의 해석과 같다.
        * 오른쪽 3bit가 모두 0 이 아니면 6bit는 인터넷이나 지역당국에 의하여 부여된 우선 순위에 따라 64개의 서비스를 정의한다.
        * 처음 범주는 32개의 서비스를 포함하고 2, 3 번째 범주들은 각각 16개의 서비스를 포함한다.

Category        Codepoint        Assigning Authority
------------        --------------        ---------------------------
1                   XXXXX0           Internet    (IETF에 의하여 지정)
2                   XXXX11           Local         (지역 기관에 의하여 지정)
3                   XXXX01           Temporary or experimental     (임시로서 실험적 목적으로 사용될 수 있다.)
         



★ Total Packet Length ( 16bit )
- 헤더와 몸체를 포함한 전체 IP Packet의 길이를 바이트 단위로 나타낸다.
- 데이터길이 = 전체 길이 - 헤더 길이




★ Fragment Identifier ( 16bit )
- 발신지 호스트로부터 나온 데이터그램을 유일하게 식별하며 유일성을 보장하기 위해 카운터를 사용한다.
- Flasgs와 Fragment Offset과 결합되어 사용된다.
- Packet의 ID를 정의 하며 이 ID 값은 분열된 패킷을 재조합할 때 사용된다.




★ Fragmentation Flags ( 3bit )
- 현재의 분열상태의 단서 제공 3Bit중 마지막2Bit만 사용.  
        * 첫번째 Bit는 예비용
        * 두번째 Bit는 분열허용여부 (0 : 허용 1 : 허용 안됨) 
        * 세번째 Bit는 현재의 조각이 마지막인지 여부 표시 (마지막 인 경우 0 // 더 있으면 1로 표기)




★ Fragmentation Offset( 13bit )
- 분열된 패킷의 삽입될 위치를 가르킨다.
- 정의된 값에 8을 곱한 위치가 삽입 위치이다.
- 분실된 단편이 없을경우 데이터그램 재조립 순서.
    1. 첫 번째 단편의 옵셋 값은 0이다.
    2. 두 번째 단편의 길이를 8로 나눈다. 두 번째 단편의 옵셋 값은 이 결과와 같아야 한다.
    3. 첫 번째와 두 번째 단편의 길이의 합을 8로 나눈다. 세 번째 단편의 옵셋 값은 이 결과와 같아야 한다.
    4. 이러한 과정을 반복한다. 마지막 옵셋은 more fragment 값이 0이다.




★ Time-to-Live ( 8bit )
- 네트워크 상에서 잘못된 패킷들이 무한정 라우터를 돌아다녀 네트워크 전체에 부하를 주는것을 방지.
- TTL이 0이 되면 패킷은 버려지고 송신측에 에러메세지를 전송.
- 라우터에서 라우터로 이동시마다 1씩 감소.
- 송신측에서 TTL 값은 조절 가능. ( OS별 디폴트 TTL 값이 존재 ) // XP = 128, Linux = 64




★ Protocol Identifier ( 8bit )
- 상위 프로토콜의 종류를 정의 
- 나머지는 http://www.iana.org/assignments/protocol-numbers를 참조하자.
        * ICMP : I 1
        * IP      : I 4
        * TCPII : I 6
        * UDP I : 17




★ Header Checksum ( 16bit )
- IP Header의 에러 검출
- encapsulation 데이터에 의한 checksum은 아님 : UDP, TCP, ICMP는 각자 고유의 checksum을 수행
- 패킷이 라우터를 지나갈 때마다 TTL 값이 변경되므로 checksum은 항상 재계산 된다.




★ Source IP Address ( 32bit )
- Datagram을 전송한 원래 컴퓨터의 32bit IP address
- 발진지에서 목적지 까지 전달되는 동안 변해서는 안된다.




★ Destination IP Address ( 32bit )
- Datagram을 수신할 최종목적지 컴퓨터의 32bit IP address
- 발진지에서 목적지 까지 전달되는 동안 변해서는 안된다.




★ Option ( 최대 40 Byte )
- IP가 TOS를 통해 우선순위 service를 제공하는 것처럼 Option field를 사용하여 특별한 처리 옵션을 추가로 정의
- 만일 32bit로 안채워지면 Padding이 붙는다. 
        * Copy ( 1bit ) // 단편화에 옵션을 포함시킬 것인지를 제어           
            - 0 : 첫 번째 단편에만 복사
            - 1 : 모든 단편에 복사

       * Class ( 2bit ) // 옵션의 일반적인 목적을 정의 
            - 00 : 데이터그램의 제어에 사용
            - 10 : 디버그나 관리 목적으로 사용
            - 01, 11 :  미정의

       * Number ( 5bit ) // 옵션의 유형을 정의
            - 5bit는 32개의 유형을 정의할 수 있지만 현재 6개의 유형만 정의되어 있다.
            - Single   Byte 옵션 종류 : No opreation, End of option
            - Multiple Byte 옵션 종류 : Record route, Strict source route, Loose source route, Timestamp
                - 00000 (End of option) : 옵션의 필드 끝의 패딩 목적으로 사용된다.
                - 00001 (No opreation) : 옵션들 사이의 여백을 채워준다.
                - 00011 (Loose source route) : 리스트 속 각 라우터는 반드시 방문되어야 하나 리스트에 없는 라우터도 방문할 수 있다.
                - 00100 (Timestamp) : 라우터가 데이터그램을 처리하는 시간을 기록하기 위해 사용된다.
                - 00111 (Record route) : 데이터그램을 처리한 인터넷 라우터들을 기록하기 위해서 사용된다.
                - 01001 (Strict source route) : 데이터그램이 인터넷에서 거쳐야 할 경로를 미리 지정하기 위해 사용된다.

        * Length ( 8bit )
            - Code Field + Length Field 를 포함한 옵션의 전체 길이를 정의
            - 이 필드는 모든 옵션의 유형에 있는것은 아니다.

        * Data Variable length ( 가변 )            
            - 특별한 옵션을 필요로 하는 데이터를 포함하고 있다.
            - 모든 옵션의 유형에 있는것은 아니다.




★ Padding ( 가변 )
- Header에 옵션이 추가되면 Header는 32Bit로 나눠 떨어지도록 부족한 부분이 채워져야 한다.
- Header가 32bit 정수배가 되지 않을 때 0을 붙여서 조정한다.