본문 바로가기
네트워크

[Network] TCP 프로토콜 이란?

by 공대냥이 2018. 10. 30.
반응형

TCP (Transmission Control Protocol) 란? 

 

OSI 7Layer 중 4계층인 전송계층에 속하는 중요 프로토콜로 네트워크 망에 연결된 컴퓨터의 프로그램 간 데이터를 순서대로, 에러없이 교환할 수 있게 하는 역할이다.

 

특징
1. 연결 지향 프로토콜(Connection Oriented Protocol)

    • 물리적으로 전용회선이 연결되어 있는 것처럼 가상의 연결통로를 설정하여 통신하는 방식으로 가상의 연결통로를 가상회선이라 한다.
      • 가상회선방식 : 물리적으로 전용회선이 연결되어 있는 것처럼 논리적으로 동작하는 방식 
    • 논리적인 연결통로를 통해 데이터를 주고받음으로써 데이터의 전송순서를 보장해준다. 순서제어 라고도 한다.
    • 스트림 기반의 전송방식을 사용한다. 데이터를 임의의 크기로 나누어 연속해서 전송하는 방식을 사용한다.
 
2. 신뢰할 수 있는 프로토콜(Reliable Protocol)
    • 흐름제어
      • 상대방이 받을 수 있을 만큼만 데이터를 효율적으로 전송하는 것
      • 흐름제어를 위해 슬라이딩 윈도우(Sliding Window) 방식을 사용한다. 이는 상대방이 수신 가능한 크기(Window size) 내에서 데이터를 연속해서 전송하는 방식으로 매 세그먼트(Segment) 전송 시마다 수신확인응답(ACK)을 수신한 후 전송하게 되면 왕복시간(RTT : Round Trip Time)이 길 경우 단위 시간당 데이터 전송량이 매우 떨어지므로 효율적으로 전송하기 위해 상대방이 받을 수 있는 범위 내에서 연속적으로 전송한다.
    • 오류제어
      • 데이터의 오류나 누락없이 안전한 전송을 보장
      • 오류 또는 누락 발생 시 재전송을 수행하여 이를 보정
    • 혼잡제어
      • 네트워크의 혼잡 정도에 따라 송신자가 데이터 전송량을 제어하는 것을 말한다.
      • 혼잡정도에 대한 판단기준은 데이터의 손실 발생 유무로 판단한다. 전송한 데이터에 누락이 발생하면 네트워크가 혼잡한 상태로 판단하여 전송량을 조절한다.
 
TCP 구조
 
TCP Header

 

    • Source Port(16 bits) : 출발지(송신) 포트 번호
    • Destination Port(16 bits) : 목적지(수신) 포트 번호
    • Sequence Number(32 bits) : 송신 데이터 순서 번호
      • 송신 시 전송하는 데이터의 시작 바이트 순번을 담는다. 바이트 순번은 전송하는 데이터의 바이트 단위로 부여하는 연속된 번호를 의미한다.
      • 연결설정 단계에서 초기 순서 번호를 상호간에 주고받는다, 초기 순서 번호는 0부터 시작하는 것이 아니라 임의의 수를 할당해서 사용한다.
    • Acknowledgment Number(32 bits) : 상대방이 다음에 전송할 순서 번호
      • 수신 확인 응답(ACK)과 함께 해당 필드에 상대방이 다음에 전송할 순서 번호를 담아서 보낸다.
    • HLEN(4 bits) : 헤더 길이
      • 4 bits 워드 단위로 표시(20 ~ 60 bytes)하며 기본 헤더 20 bytes와 옵션 헤더 최대 40 bytes로 구성된다.
    • Reserved(4 bits) : 예약
    • Control Flags(6 bits)
      • URG(Urgent pointer is valid) : 긴급 데이터 설정
      • ACK(Acknowledgment is valid) : 수신 확인 응답(ACK) 설정
      • PSH(Request for push) : 송수신 버퍼에 있는 데이터를 즉시 처리
      • RST(Reset the connection) : 연결 중단(강제 종료)
      • SYN(Synchronize sequence numbers) : 연결 설정
      • FIN(Terminate the connection) : 연결 종료 (정상 종료)
    • Window size(16 bits) 
      • 수신측에서 송신측에 보내는 Receiver window size로 수신버퍼의 여유공간 크기를 의미한다. 송신측에서는 상대방의 여유 공간 크기를 통해서 흐름제어를 수행할 수 있다.
      • 따라서 송신측에서는 상대방의 윈도우 사이즈 범위 내에서 수신측의 수신 확인 응답(ACK)을 기다리지 않고 연속적으로 전송할 수 있는데 이를 슬라이딩 윈도우 제어방식이라 한다.
    • Checksum(16 bits) : 헤더를 포함한 전체 세그먼트에 대한 오류를 검사하기 위한 필드
    • Urgent Pointer(16 bits) : 세그먼트가 긴급 데이터(URG 플래그 설정)를 포함하고 있는 경우에 사용되는 필드로 긴급 데이터의 위치값을 담고 있다.
 
연결 설정 과정 (3-Way Handshake)
 

 

 

1. 첫번째 단계

    • 최초 클라이언트는 서버와 연결 설정을 위한 연결 요청 패킷(SYN 패킷)을 보낸다. 연결요청을 위해 능동적으로 포트를 열고 있는 상태를 "Active Open", 연결요청을 수용하기 위해 수동적으로 포트를 열고 있는 상태를 "Passive Open"이라 한다.
    • SYN은 상호간에 순서 번호를 동기화하자는 의미이며 상호간의 초기 순서 번호는 0부터가 아닌 랜덤한 값으로 시작한다.
    • 최초 SYN패킷을 보낸 TCP(소켓) 상태를 "SYN_SENT" 상태라 한다.
2. 두번째 단계
    • 클라이언트의 연결 요청(SYN 패킷)에 대한 수신 확인 응답(ACK)과 함께 서버에서 클라이언트로 연결 요청(SYN 패킷)을 보내 상호간에 연결 요청을 수행한다.
    • 수신 확인 응답을 하게 되면 반드시 Acknowledgment Number를 설정 하는데 그 의미는 상대방이 다음에 보낼 패킷의 순서 번호를 의미한다.
    • 상대방의 SYN 패킷을 수신한 TCP 상태를 "SYN_RECEIVED" 상태라고 한다.
3. 세번째 단계
    • server의 연결 요청(SYN 패킷)에 대해 수신 확인 응답(ACK)을 전송한 후 최종적으로 연결 설정이 완료된다.
    • 연결 설정이 완료되면 TCP 상태는 "ESTABLISHED" 상태가 된다.

반응형