본문 바로가기

TCP/IP Protocol

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

★ TCP에 대해서..

TCP는 연결 지향, 스트림 전달, 신뢰성 있는 전송 프로토콜이며 IP의 서비스에 연결 지향과 신뢰성의 특징을 추가한다.

TCP는 UDP와 마찬가지로 포트 번호를 사용한다. 그렇지만 TCP는 UDP와 다른 연결 지향 프로토콜로서, 데이터를 전송하기 위하여 두 개의 TCP 간에 가상 연결을 설정한다. 또한 TCP는 전송 단계에서 흐름 제어오류 제어 메커니즘을 사용한다.



★ TCP의 특징
- 두 개의 프로세스가 가상 연결을 통해 데이터를 바이트 스트림 형태로 송,수신 한다. (스트림 전송 )
  ( 송신 프로세스는 바이트 스트림을 생성(쓰기)하고, 수신 프로세스는 바이트 스트림을 소비(읽기)한다.
- 송/수신이 동일한 속도로 이루어 지지 않을경우 데이터 저장을 위한 버퍼가 필요하다. ( 송,수신 버퍼 )
  ※ 송신 : 흰색 - 빈 공간 // 자주색 - 전송 되었지만 확인 미응답 바이트 // 회색 - 전송 할 바이트
  ※ 수신 : 흰색 - 빈 공간 // 자주색 - 수신 되었지만 프로세스가 읽지 않은 바이트
  


- 바이트 스트림 → 세그먼트(패킷)로 그룹화. ( 세그먼트 )
  ( TCP의 서비스 제공자인 IP는 패킷 형태로 데이터를 전달하기 때문에 세그먼트로 그룹화 후 IP계층에 세그먼트를 배달한다.) 
- 데이터를 동시에 양방향으로 전송할 수 있다. ( 전이중 통신 )
- A Process - B Process 데이터 주고받을 경우 아래와 같은 일이 일어난다.( 연결 - 지향 서비스 )
    1. 두 TCP 간에 연결이 설정. ( 물리적 연결이 아닌 가상 연결 )
    2. 양방향으로 데이터가 교환.
    3. 연결이 종료.
- TCP는 데이터가 제대로 동작했는지를 확인하기 위하여 확인응답 메커니짐을 이용한다. ( 신뢰성 )



★ TCP의 Well-Known Ports 
- TCP에서 사용되는 Well-Known Port

Port      Protocol          Description
-----       ------------         ----------------
7          Echo               Echoes a received datagram back to the sender
9          Discard            Discards any datagram that is received
11      1 Users              Active users
13       1Daytime          Returns the date and the time
17       1Quote            Returns a quote of the day
19       1Chargen          Returns a string of characters
20       1FTP, Data        File Transfer Protocol(data connection)
21       1FTP, Control    File Transfer Protocol(control connection)
23       1TELNET          Terminal Network
25       1SMTP             Simple Mail Transfer Protocol
53       1Nameserver     Domain Name Service
67       1BOOTP           Bootstrap Protocol
79       1Finger             Finger
80       1HTTP             Hypertext Transfer Protocol
111       RPC               Remote Procedure Call

아래의 그림은 TCP ( Transmission Control Protocol )Header 부분이다.
※ 옵션이 없는 경우 : 20 Byte
※ 옵션이 있는 경우 : 최대 60 Byte



★ Source Port ( 16bit )
- 발신지 포트 번호




★ Destination Port ( 16bit )

- 목적지 포트 번호




★ Sequence Number ( 32bit )
- 세그먼트에 포함된 데이터의 첫  바이트에 부여된 번호
- 신뢰성 있는 연결을 보장하기 위해 전달되는 각 바이트마다 번호를 부여
- 난수 발생기를 이용하여 순서 번호를 만든다.




★ Acknowledgement Number ( 32bit )

- 발신지에서 수신지로 데이터를 보냈을때 수신지에서 발신지에 요청하는 바이트번호
  ( 수신지에서 x를 수신, 수신지는 Ack 번호로 x+1 을 정의, 발신지에서 x+1의 바이트를 보내줄것을 요청 )
- Ack 번호와 데이터는 함께 Piggyback 될 수 있다.

※ Piggyback ?

수신측에서 데이터를 잘 받았다는 Ack 을 보낼때 별도의 데이터로 처리되기 때문에 대역폭을 차지하게 됩니다. 이를 줄이기 위해서 수신측에서 송신측에 다른 데이터를 보낼때 Ack 응답을 같이 태워서 보낸다는 것이죠. 결국 대역폭 사용을 줄여보자는 거죠




★ Header length ( 4bit )

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




★ Reserved ( 6bit )
- 이 필드는 차후의 사용을 위해서 예약된 필드이다.

★ Control ( 6bit )
- 6개의 서로 다른 제어 비트 또는 플래그를 나타낸다.
- 동시에 여러개의 비트가 1로 설정될 수 있다.
- 흐름 제어, 연결 설정 및 종료, 연결 중지, TCP 에서의 데이터 전송 모드를 위해서 사용된다.

※ URG 
    - urgent pointer가 사용될 경우 1로 셋팅됨.
    - 셋팅되면 순서에 상관없이 먼저 송신됨.
※ ACK 
    - 1로 셋팅되면 ack number가 유효함을 뜻함.
    - 0으로 셋팅되면 ack number가 무시됨.
※ PSH
    - 수신측은 가능한 빨리 응용프로그램에 이 데이터를 받는 즉시 전달.
    - 즉, 수신측은 버퍼가 찰 때가지 기다리지 않고 수신 즉시 어플리케이션에 전달.
※ RST  
    - reset, 연결을 reset 시킴.
※ SYN 
    - sychronize, 일련번호를 동기화 (연결시작, 회선개설)
    - 연결요청 : SYN = 1,  ACK = 0
    - 연결허락 : SYN = 1,  ACK = 1
    - 연결설정 : ACK = 1
※ FIN  
    -  finish, 송신기가 데이터 보내기를 끝마침 (연결해제, 회선종결)
    -  종결요청 : FIN = 1
    -  종결응답 : FIN = 1,  ACK = 1




★ Window Size ( 16bit )
- 상대편에서 유지되어야 하는 바이트 단위의 윈도우 크기를 정의
- 윈도우 크기는 수신 윈도우(receiving windows : rwnd)라고 하며 수신측에 의해서 결정
- 송신측은 수신자의 지시에 따라야 한다.




★ Checksum ( 16bit )
- TCP 에서의 검사합은 UDP 부분에서 언급한 것과 동일한 절차이다.
- UDP 에서 검사합의 포함은 옵션인 반면, TCP 에서 검사합의 포함은 필수이다.
- UDP 에서와 같은 동일한 목적을 수행하기 위해 의사 헤더가 추가된다.




★ TCP Pseudo Header ( TCP 의사 헤더 )
- protocol 값은 6이다.


★ Urgent Pointer ( 16bit )
- URG 플래그가 1로 설정되어 있는 경우에만 유효
- 세그먼트가 긴급 데이터를 포함하고 있을 때 사용
- 이 필드의 값과 SYN 번호를 더하면 세그먼트의 데이터 부분에 있는 마지막 긴급 바이트의 번호를 알 수 있다.

★ Option ( 가변 )
- 최대 40 Byte 까지의 옵션 정보가 있을 수 있다.

- Single   Byte 옵션 종류 : No opreation, End of option list
- Multiple Byte 옵션 종류 : Maximum segment size, Window scale factor, Timestamp, SACK-permitted, SACK
    - End of option : 옵션의 필드 끝의 패딩 목적으로 사용된다.
    - No opreation : 다른 옵션의 앞에 위치해서 한 옵션이 4 Byte 배수가 되도록 한다.
    - Maximum segment size : TCP 세그먼트의 목적지에서 수신할 수 있는 데이터 부분의 최대 크기를 정의한다.
    - Window scale factor : 헤더에있는 윈도우 크기(최대 65535)를 증가시키기 위해 사용된다.
    - Timestamp : 왕복 시간을 측정하거나 순서 번호가 겹치는 것을 방지하는 두 가지 응용에 사용된다.
    - SACK-permitted : SYN 세그먼트에 이 옵션을 추가하여 전송한다. 다른쪽에서 SYN+ACK 세그먼트에 이 옵션을 추가하면, 양쪽 모두 데이터 전송 기간 동안에 SACK 옵션을 사용할 수 있다.
    - SACK : SACK-permitted 옵션을 사용하기로 했을 때에만 사용될 수 있다. 순서에 어긋나게 들어온 블록 리스트를 포함하며 각 블록은 블록의 시작과 끝을 나타내는 두 개의 32 bit 번호를 사용한다.


※ NOP 가 2개 삽입된 이유는 SACK-permitted 옵션이 2 Byte이기 때문에 4 Byte 배수가 되도록 하기 위해서이다.