프로그래밍 농장

TCP / IP 프로토콜 [ IP Protocol / Fragmentation ] 본문

TCP-IP 프로토콜

TCP / IP 프로토콜 [ IP Protocol / Fragmentation ]

Tennessee201 2021. 6. 14.
728x90

- IP Protocol 

   - Unreliable & connectionless  

      datagram을 직접전송 : Unreliable 

   - Best-effort :  -> not guarantee : 네트워크에서 제공가능하면 최대한 제공 

   - 각 datagram은 독립적으로 실행 -> ( 목적지만 보고 동작함)  / out-of-order (들어온 순서대로 처리)

   - layer 4 


- TCP protocol : reliable 한 특성을 가짐 : out-of-order 방식해결 : 순차적처리 

                    ICMP : port정보를 전송 

- Datagram = packet : 데이터그램 : 가변성(variable)을 가짐  ->  헤더정보에 total length 들어감( 20 - 60 bytes )

- TTL (Time to live) = hop count (8 bits)  : 이 datagram이 네트워크안에서 지나갈수있는 최대의 수 ( 몇개의 라우터를 거쳐갈수있는지 )    -> packet이 loop되는것을 막을수있다 . -> (최대 64번이 지나면 폐기)

 = Number of hops : ip datagram이 소스로 부터 목적지까지 갈떄 중간에 지나갈수있는 최대의 hope 수 ( router 수) 

- protocol ( 8 bits ) field : 네트워크 계층에서 수신한 값을 어떤 프로토콜을 사용하였는지 판단 ( TCP /UDP )

- header checksum ( 8 bits ) : 비트에서 오류가 생겼을떄 체크 ( Check errors ) 

- flags (3 bits) : used in fragmentation - DF / MF ( Don't fragment / More fragment )

- Source address : The IP address of source (user privacy 포함가능)

- Destination address : The IP address of destination (user privacy 포함가능)

 

첫번쨰 4필드 : 버전 필드  / 두번쨰 4필드 : 헤더의 길이 

 

 

- Header 

-> 기본 20 bytes  / 늘어날수있는 최대 40 bytes  -> 최대 60 bytes 

-> 암호화가 이루어지지않음  ( incapsulation X / 항상 오픈되어있음 )

-payload 

 상위계층에서 내려온 정보가 이곳으로 들어옴 

-> 이 정보들을 네트워크 내에서 처리하기위한 incapsulation 과정을 거치는 곳이 Header 이다.


Example 7.1 

An IP packet has arrived with the first 8 bit shown : 

01000010 

The receiver discards the packet.   Why ? 

 

풀이 : 첫번쨰 4필드 0100   -> 버전 필드 :   0100  =  10진수변환 ->  '4'  : IPv4 라는것을 확인가능 

 ( IPv4 헤더의 최소사이즈 : 20~ 60 bytes )

두번쨰 4필드 0010 = 10진수변환 -> 2  * 4 = 8 bytes 

정답 :

-> 헤더의 최소사이즈(20)에 미달되는 값이 들어옴.  -> 패킷중간에 오류가 생겨서 미달값이 생김 .-> 버림 

 

Example 7.2

In an IP packet, the value of HLEN (Header Length) is 1000 in binary. How many byte of option are being carried by this packet?  

 

풀이 :  헤더길이가 1000 -> 10진수변환 : 8 * (IPv4이므로 *4) : 헤더길이 = 32 bytes 

-> 헤더길이의 최소값 : 20 bytes  :   32(입력값) - 20(기본값) = 12 bytes 의 추가된 옵션을 가지고있음

 

 

Example 7.3

In an IP packet, the value of HLEN(Header Length) is 5 16 and the value of the total length field is 0028 16 . How many bytes of data are being carried by this packet ? 

 

풀이

Header length = 5 * 4 (IPv4 이기때문) = 20 bytes

Total length = 2 * 16 + 8 : 40 bytes

-> 이 패킷의 실제 데이터  : 40 -20 = 20 bytes

 

 


- Fragmentation

 

datagram의 총 크기가 항상 MTU(Maximum Transfer Unit)보다 작아야한다  -> 그래야 분할이 이루어지지않는다.

Fragmentation = 데이터그램이 네트워크를 통과할수있도록 만들어주는것 

 

DF (Don't Fragment)  : 더이상 fragment 될것이 없음

MF (More Fragment)  : 더 fragment 할것이 남음 

 

-> 한번 fragmentation을 진행할경우마다 offset value가 바뀜( fragmentation의 시작점이 바뀜 )

-> bit 값은 워드단위이기 떄문에 : ex)   0000/8 = 0    -    1400/8 = 175     -   2800/8 = 350

 

Example 7.8

 A packet with M bit of 0 has arrived. Is this first fragment, or a middle fragment? Do we know if the packet was fragment ?

 

풀이 : More Fragment 가 0 (더이상없음) 이니까, last segment 이다. (마지막) 

       더이상없음(=분할될것이 없음) 이니까, 애초에 Fragment가 아닐수도있다. 그렇게에 fragment가 아닐수도있다. 

 

 

Example 7.9

A packet with offset of 100 has arrived. HLEN(Header Length) = 5 and the value of the total length field = 100. What is the number of the first byte and the last byte ?

 

풀이 :  offset value : 100 : 8 * 100(total length field) = 800 bytes 부터 시작  ( offset 값은 각 fragment 시 시작값 )

total length = 100 bytes     /    HLEN = 5 * 4(IPv4) = 20 bytes

-> 실제 payload의 사이즈  : 80bytes (=실제 옵션데이터) 
-> 800+80(추가옵션데이터값) :   첫 데이터 bytes : 800  ~  마지막 데이터 bytes : 879  / 다음 시작 offset : 880 ~~>

 


- Options

   TLV의 형태로 되어있다 : type / length / value 

  

- No Operation Option(NO-OP) : 각 옵션을 구분하기위하여 앞이나 끝에 붙혀주는 옵션(구분자 역할) 여러개 사용가능

- End of Operation : last option을 나타냄 / 오직 1개의 End Option을 사용 

- Record Route Option : 소스에서 도착지까지 가는 경로에 있는 거쳐가는 라우터의 정보를 기족하는 옵션 ( 실질적으로 패키지를 manage 하는 입장에서 유용  [ 현재 대부분 안쓰임 ]

 -> 최대 9개의 라우터까지만 저장가능  : 이유는 ? -> 헤더의 최소사이즈가 20 , 60byte이기 떄문에 옵션을 가질수있는 최대 -> 40bytes 이며, IPv4의 주소는 32bit -> 4bytes 가 들어감(한라우터당)  -> 4*9=36까지가능 :  옵션의 끝에 end of operation 옵션이 들어가기떄문에 9개 까지만 가능하다. 

 -> Pointer : 처음을 나타내주기 위한 offset 

-> 처음 시작하는 포인터 시작값 : 4  -> 이후 하나의 주소 추가기록 : 4+4=8의 시작값 ~~ 12byte로 시작 ~~ 16 ~~> 

->  위 그림에서 저장되는 IP 주소값을 잘 보아야함 . : 거쳐간 라우터 패킷들의 값들을 확인 ! 

- Source-Route Option 

정보를 암호화할떄 일반적으로는, Header를 제외한 payload만을 암호화한다. : transroute 사용

-> 소스노드가 루트를 결정하는것 (중간에 거쳐가야할 라우터를 지정)

-> Strict option : 엄격/내가 지정한 루트(라우터)를 반드시 거쳐야함 (보통 네트워크가 작은경우 사용)

-> Loose option : 내가 지정한 루트를 지나가기는 하는데 순서상 중간에 다른 노드가 껴도 상관없음 ] (대부분 글로벌 네트워크일떄 - 그나마 요즘 사용 )

Strict option과 Loose option의 차이 : 융통성없이 지정한것만 따름 : Strint option / 융통성있지 지절한부분 거치기만하면됨 : Loose option

                                                  <Source-Route option>

 

- Timestamp Option

라우터에서 datagram을 받아서 처리했을떄의 시간을 기록하는 옵션 ( msec 단위로 기록 )

flags :   0일때 -> 오직 시간만 기록

           1일떄  -> 주소와 시간을 기록

           3일떄  -> 옵션에서 주소가 발견되면 시간을 기록 

-> 1 datagram 마다 사용을 해야하기 떄문에 라우터에게 너무 큰 부담을 주기에 잘사용하지않는다 .

 

Checksum 

헤더의 비트오류를 체크하기 위해서 만들어놓은 비트 

0 : 비트오류 X / 0이아닌값 : 비트오류 

 

728x90