본문 바로가기

IT STUDY/Network

[Transport Layer] TCP -- 이론 --

반응형

 

 

 


 

 

이번시간에는 TCP/IP에서의 TCP에 대해서 알아보도록 하겠습니다!

 

 

 

▶ TCP(Transmission Control Protocol) 란?

TCP는 OSI 7Layer의 4계층인 Transport Layer에 위치 해 있으며 종단간의 신뢰성 있는 정보 전송을 수행 한다.(↔UDP)    
- TCP사용 예 =  E-mail, 파일 Download
- UDP사용 예 = 동영상, 실시간 방송 

데이터 링크 - 로컬안에 목적지가 있을시 데이터링크가 목적지를 찾는다.(MAC 주소)

 

 

 

▶ TCP 특징    

1) 양방향 연결 (신뢰성 보장) - 3 way handshake

2) 스트림(stream)으로 전달 - 일반적으로 데이터,패킷,비트 등의 일련의 연속성을 갖는 흐름을 의미
     > 음성이나 영상, 데이터 등의 작은 조각들이 하나의 줄기(Stream)를 이루며 전송되는 어떤 형태의 데이터 열(列)
     > 호스트 상호간 또는 동일 호스트 내 프로세스간 통신에서 에 의한 메세지 전달방식을 이용한 가상 연결 통로

3) 수신한 패킷에 대해서 반드시 확인 메세지 전송 (ACK)

* TCP에서 전달하는 정보 단위를 세그먼트(segment)라고 한다. (IP = Packet,Datagram Ethernet = Frame)

* TCP는 세그먼트를 전송할 때 이것을 스트림의 전송으로 봄

Stream에 대한 주요 내용 = http://www.ktword.co.kr/abbr_view.php?m_temp1=1311

 

▶ TCP를 이용한 서비스

FTP(21), Telnet(23), SMTP(25), HTTP(80), POP3(110), Internet Relay Chat[IRC](194)
HTTPS(443), MSN Messenger(1863), Alternate(8008,8080)

 

 

 

▶ TCP Header Format

1. Source Port(16Bit) - 세그먼트를 전송하는 응용프로그램 포트 번호

2. Destination Port(16Bit) - 세그먼트를 수신하는 응용프로그램 포트 번호

3. Sequence Number(32Bit) - 전송되는 데이터의 Byte 순서 번호, 랜덤한 숫자(난수 발생기 이용)가 들어감

4. Acknowledgment Number(32Bit) - 수신측에서 앞으로 받고자하는 Byte 순서 번호, 마지막으로 받은 데이터의 seq+1을 더함

5. Header Length  - 목적지 호스트에게 TCP헤더 크기를 4byte 단위로 표현해 알림 (TCP헤더 시작부터 데이터 이전까지 길이)
                              - 헤더의 크기 20~60

6. Reserved(6Bit) - 예약된 필드Offset : 헤더의 크기(20~60)

7. Flag(code) 

<TCP 혼잡제어 flags>

(1) NS (1bit) = ECN-nonce 보호

(2) CWR(1bit) (=Congestion Window Reduced)
    - 송신측에서 설정하며 ECE 플래그가 포함된 TCP데이터를 수신했으며 혼잡제어 매커니즘에 의해 응답하는 데이터라고 알림
    - 혼잡 발생시 client에게 다시 보낼 window사이즈를 표시

(3) ECE(1bit) (=Explicit Congestion notification echo) - 혼잡 발생을 알림
    1)sys(1)인 경우 = ECN이 가능한 장비
    2)sys(0)인 경우 = IP헤더에 혼잡제어를 위한 bit가 셋팅되었음
        *IP의 DS필드의 예약용 하위 2bit(U)를 사용
            1> 00 = 보내는 호스트에서 ECN을 지원x
            2> 10/01 = 보내는 호스트에서 ECN지원
            3> 11 = 라우터에서 혼잡을 감지

<TCP 흐름제어 flags>

(1) URG - Urgent Pointer필드가 유효함을 나타냄 (비트가 1 = 우선적으로 처리)
(2) ACK – 응답을 나타내며 (비트가 1 = 수신확인 필드의 데이터가 유효)
(3) Push – 빨리 데이터를 상위계층으로 전달해야 함을 나타냄
(4) Reset – 연결을 재설정하기 위해 사용. 일종의 에러메시지로 접속을 끊는 과정에서도 사용 (비트가 1 = 연결을 재설정하기를 원함)
이를테면 아래와 같이 존재하지 않는 포트로 telnet 접속할 때 Connection refused 라는 메시지가 나오면서
바로 프롬프트가 떨어지는 것은 해당 포트로 접속을 요청하는 SYN 을 발송했지만 응답할 포트가 없어
SYN/ACK 대신 RST 로 응답하였기 때문입니다.
# telnet 0.0.0.0 24 Trying 0.0.0.0... telnet: connect to address 0.0.0.0: Connection refused
(5) SYN – 연결을 초기화하기 위해 순서번호(sequence number)를 동기화
가상 회로 연결의 시작을 나타낸다.
SYN = 1  ACK = 0  연결 패킷 (연결요청)
SYN = 1  ACK = 1  연결 수신 통지 (연결 요청 응답)
SYN = 0  ACK = 1  데이터 또는 ACK 패킷

(6) FIN – 연결 종료를 알린다. (비트가 1 = 송신측 데이터 전송을 종료함)

8. Windows Size(16Bit) - 수신측이 받을 수 있는 데이터 사이즈를 수신측에서 송신측으로 전송하는 값(한꺼번에 받을수 있는 버퍼 크기)
                                       - Window Size 최대 크기 = 65535 

9. TCP Checksum(16Bit) - TCP 헤더 + 데이터를 포함한 세그먼트 전체에 대하여 계산한 값이다. 에러 체크에 사용된다.

10. Urgent Point(16Bit)
- 긴급히 처리해야 할 필요가 있는 데이터의 마지막 바이트의 위치를 나타낸다.(URG Flag 설정시 유효)

11. TCP Option(32Bit) - 연결이 구성되는 동안 협상할 최대 Segment 크기(MSS)옵션을 정의한다.

<TCP Option> ()는 옵션 값

1. 최대 세그먼트 크기 (2) (MSS = Maximum Segment Size)
            - TCP통신 최초에 서버가 클라이언트에게 알려주는 서버의 버퍼 사이즈

2. 윈도우 크기 (3)
            - 흐름제어에 따라 변경되는 window size(버퍼의 크기)를 표시

3. 선택적 ACK (4)
            - 확인 응답 메커니즘 중에서 Selective ACK를 지원함을 나타냄
            - 선택적 ACK필드를 사용하면 하위 옵션 필드를 통해 선택적으로 승인하는 데이터 블록을 표시

4. 선택적 승인 데이터 블록 (5) 
            - 선택적 ACK가 사용된 경우 제대로 전달된 요청에 대한 순서번호를 표시하는 필드

5. 대체 checksum 알고리즘 (14)

6. 대체 checksum (13)

 

 

 

▶ TCP 연결 - 3way handshake

TCP는 신뢰성 있는 연결을 위해 3way handshake 방식을 통해 통을 함.

Q. 3-Way Handshaking의 연결설정을 하는 이유?
   오류제어방식, 윈도우 크기 등의 통신환경 설정을 위한 과정, Negotiation을 위해 TCP 헤더의 option 필드에 이를 실어 조정함.

1) 송신측이 연결을 위해 Seq(난수)값을 만들어서 보냄 - Connect Request
     - 8000번부터 순차적으로 SYN 하자 (Flag:SYN)

2) 수신측이 확인을 위해 Seq(난수), ACK(송신측 Seq+1)를 만들어서 보냄 - Connect Response
     - 8000번 잘받았어 내 Seq는 15000이야 여기루 보내 (Flag:ACK,SYN)

3) 송신측도 Seq, ACK를 확인하기 위해 한번더 메세지를 보냄 - Connect Confirm
     - 잘받았어 ㅎㅎ 우리 둘이 Seq,Ack 맞췄으니 이제 데이터를 보낼게

[WireShark로 캡쳐한 3way handshake -연결 확인 ] 

 

[WireShark로 캡쳐한 3way handshake - 연결 종료 ] 

 

(1) data 하나 보냈을때 하나의 ACK = 일반적인 응답

## Data 여러개 보낸 후 ACK ##
(2) 누적 ACK - 데이터를 한번에 1,2,3 보낼시 2번이 손실되었으면 2번부터 전송한다 (2,3,4)
 
                                                누적 ACK 보안 
(3) 선택적(Selective) ACK - 데이터를 한번에 1,2,3 보낼시 2번이 손실되었으면 성공한 3번은 제외하고 전송한다. (2,4,5)  

 

▶ TCP의 제어 기능

신뢰성 있는 전송을 위하여 다음의 작업을 수행 

1) 오류 제어 -   패킷 전송을 보증하기 위해 TCP는 ACK와 재전송 기법을 사용. (타이머를 두어 오류 제어)
         - 성공적인 수신 : ACK 메시지
         - 재 전송 : 동일한 세그먼트를 다시 전송하는 동작
         - 오류 제어 : Selective-repeat 방식, Adaptive Timer 이용

2) 혼잡 제어 - 만약 정해진 시간이 지날 때 까지 ACK이 도착하지 않으면 congestion이 발생한 것으로 판단하다.(timeout)
        # 제어 방법 # 
               - TCP 호스트는 처음에는 적은 양의 패킷 전송을 하고 점차 양을 늘려나간다.(slow start)
               - Congestion이 발생한 것으로 판단되면 전송되는 패킷의 양을 초기 상태로 줄여서 다시 시작한다.(congestion avoidance)

cwnd(congestion window) = TCP가 세그먼트를 전송할 때 ACK을 받지않고 연속해서 보낼 수 있는 세그먼트의 양을 결정한다.
          - cwnd가 1일 경우 하나의 세그먼트를 보내고 제시간에 ack가 오면 +1을 더하고 2개의 세그먼트를 보낸다.
          - 그렇게 cwd를 늘리다 제시간에 ack가 도착하지 않을시 cwd를 1로 다시 초기화 시켜 속도를 조절

3) 연결 제어 - 송신측 수신측간 동기화를 시켜주는 제어 기능
          - 연결설정 = 3 way handshake
          - 연결해제 = 3 way handshake, 4 way handshake(메모리 해제 기능 추가)

4) 흐름 제어 - 수신측의 버퍼의 크기를 파악한 후 이 버퍼의 크기(Window Size)에 맞게 정보 전달
          - 슬라이딩 윈도우 방식 = 정보를 보내고 정보를 받았다는 Ack가 오면 받는 정보를 저장하는 버퍼에 Ack가 된 정보를 없앤다.
                                                            (Ack가 된 정보 - 잘 받았다고 확인하는 정보)

[슬라이딩 윈도우 방식] 



 

 

▶ TCP의 타이머

 

TCP프로토콜에서는 회선 연결의 신뢰성을 확보하기 위해 4개의 타이머를 사용 

 1) 재전송(Retransmission) 타이머
      - 패킷을 보낼때마다 재전송 타이머 가동
      - 정해진 시간내에 수신 확인(ACK)이 안되면 재전송 시도

2) 영속(Persistence) 타이머
      - TCP 송신측은 수신측으로부터 윈도우크기가 0이되었음을 전달 받으면 Persistence 타이머를 구동시켜 일정한 시간 후 Persistence 타이머가
      타임아웃  되면 송신측은 1byte로 이루어진 탐색 세그먼트(window probe)를 주기적으로 전송하여 수신측 윈도우 크기를 파악함 (ack로 응답)
      - 윈도우 크기 결정   ☞ Sliding Window Protocol   
       
3) Keepalive 타이머
      - 일정한 시간동안 데이터를 전송하지 않는 '상대와 연결 해제'를 위해 사용 (ex:은행 접속)
      - 통상 2시간 동안 아무런 패킷도 오지 않으면 프로브(Probe) 패킷을 75초 간격으로 10번 송신하여도 응답이 없으면 연결 단절

4) 시간 대기(Time-waited) 타이머
      - TCP 연결 종료 후에 이 기간 동안 만 연결을 유지
      - 망의 특성상 바쁜망이 있고 그렇지 않은 망이 있는데, FIN 신호로 수신측과 연결을 해제할때 이전에 보낸 정보가 FIN이 포함된 신호보다
       늦게 도착할 수 있기 때문에 보통 세그먼트의 생존시간을 2배 설정해 연결을 유지 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

반응형