1. TCP (Transmission Control Protocol)
ㅇ TCP/IP 프로토콜 群 (1백개 이상 존재) 중 하나
- OSI 계층모델의 관점에서 트랜스포트 계층 (4계층)에 해당
ㅇ 양종단 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공
- IP의 비신뢰적인 최선형 서비스에다가, 신뢰적인 연결지향성 서비스를 추가 제공하게 됨
- 이렇게, IP에 추가적으로 신뢰적인 전송을 보장함으로써, 어플리케이션 구현이 한층 쉬워지게 됨
※ 또한, 이외에도 매우 많은 일을 하는, 상당히 복잡하지만 많이 쓰이는 프로토콜 임
2. 주요 특징
ㅇ 신뢰성 있음 (Reliable)
- 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
. TCP 하위계층인 IP 계층의 신뢰성 없는 서비스에 대해 다방면으로 신뢰성을 제공
ㅇ 연결지향적 (Connection-oriented) ☞ TCP 연결
- 같은 전송계층의 UDP가 비연결성(connectionless)인 것과는 달리, TCP는 연결지향적 임
. 이 경우, 느슨한 연결(Loosly Connected)을 갖으므로,
. 강한 연결을 의미하는 가상회선이라는 표현 보다는, 오히려 연결지향적이라고 말함
- 연결 관리를 위한 연결설정 및 연결해제 필요 ☞ TCP 연결설정, TCP 연결종료
. 양단간 어플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통하여 서로 통신
ㅇ TCP 연결의 식별, 다중화, 포트번호
- TCP 연결(회선)의 식별 : 소켓(양단 IP주소 및 포트번호 쌍)으로 회선을 식별 함
. 2개의 IP 주소 및 2개의 포트 번호에 의한 4개가 하나의 연결(회선)을 식별함
- 여러 응용 간 다중화 가능 : 단일 연결 뿐만아니라 다수 연결의 동시적 처리도 가능
- 응용과의 연결점 식별 : TCP는 포트 번호에 의해 어플리케이션(응용)과의 연결점을 식별
ㅇ 전이중 전송방식 (Full-Duplex), 양방향성 (bidirectionality)
- 종단간 양 프로세스가 서로 동시에 세그먼트를 전달할 수 있음
. 양방향 각각에 대해 `송수신 버퍼` 및 `데이터흐름용 순서번호` 유지
ㅇ 멀티캐스트 불가능 : 단대단 전송 방식 (1:1) 즉, 유니캐스트성 임
- 단일 송신자와 단일 수신자 간에 단일 경로 연결이 설정됨
. 한편, 차세대 전송계층 프로토콜로써, ☞ MPTCP 참고
ㅇ 상위 응용과는 바이트 스트림(Byte Stream)으로 주고받음
- 논리적(의미를 갖는) 단위인 메세지 스트림이 아님
. 각 데이터 간의 구분을 의미적으로 구분하지 않고,
. 단순히 바이트들의 연속적인 흐름으로 보고, 이들을 묶어 세그먼트화하여 전송
- 이는 상위 응용 개발자들이 흐름제어,회선관리,전송단위 등을 신경쓰지 않도록 함
ㅇ 세그먼트화 처리 : 데이터를 패키징 처리
- 바이트들을 모아서 세그먼트화하고 이에 TCP 헤더를 붙이고, 이들을 순서제어함
. TCP 세그먼트 : TCP에서 IP로 전달되는 정보 단위(통상, 수 백 바이트 정도)
.. 양 끝단의 TCP 모듈간에 서로 교환되는 데이터 단위를 TCP 세그먼트라고 함
- TCP 세그먼트의 (한 번에 보낼 수 있는) 최대 크기 ☞ TCP MSS
ㅇ 흐름제어 (Flow Control) ☞ 슬라이딩 윈도우
- 송신(송신전송률) 및 수신(수신처리율) 속도를 일치시키는 것
. 주로, `순서번호`,`확인응답번호`,`수신윈도우 크기`라는 3개 변수로 흐름제어
ㅇ 혼잡제어 (Congestion Control) ☞ TCP 혼잡제어
- 네트워크가 혼잡하다고 판단될 때 송신률을 감속함
. 이에따른 여러 장치(기법)들을 다양한 TCP 버젼에서 마련하고 있음
.. 주요활용기능 : 느린 시작, 혼잡 회피, 수신 윈도우 및 혼잡 윈도우 크기결정 등
- TCP는 혼잡제어를 위해 수신 윈도우(rwnd) 및 혼잡 윈도우(cwnd) 2개의 변수를 관리
. 이 중 최소가되는 크기를 윈도우 크기로 잡게됨
ㅇ 비 실시간적 응용
- TCP는 데이터의 전달에 대한 보장을 하지만, 전달에 따른 지연에는 취약하므로
실시간적 응용에는 통상 UDP 를 사용
ㅇ TCP 활용
- 상위 프로토콜 지원 : HTTP, FTP, SMTP 듬
- 응용 지원 : TELNET, rlogin, 웹, 전자우편 등
3. TCP 패킷의 구조
ㅇ IP datagram 안에 TCP data가 캡슐화 됨
- TCP 패킷 헤더 구성 ☞ TCP Header
. 꽤 크고 유연한 헤더 구조를 갖음 (기본 20 ~ 최대 60 바이트)
- TCP 포트의 식별번호 ☞ 포트 번호, 소켓 주소
. 양단 간 연결 식별을 소켓 식별자(IP주소 및 포트번호 쌍)로 함
- TCP 연결회선의 제어관리 ☞ TCP 제어 플래그
. TCP 세그먼트가 데이터 운반용인지, 그냥 제어용인지 등을 TCP 제어 플래그에 표시
- TCP 연결 관리 기능의 확장 ☞ TCP 옵션
4. TCP가 신뢰성,전송효율성,흐름제어가 있도록 하는 기법들
ㅇ 체크섬 (Checksum) ☞ TCP Checksum (TCP 헤더 내 16 비트 검사합 필드 있음)
- 전송되는 데이타 손상 여부 점검
ㅇ 순서번호 (Sequence Number) 및 확인응답 번호 (Acknowledgement 번호)
- 순서 번호 : 순서가 어긋나지 않도록 함
- 확인 응답 번호 : 실제 수신 여부 확인 및 그 다음 순서를 지시함
ㅇ 재전송 및 시간제한 ☞ TCP 재전송, TCP 타이머
- 정해진 시간(RTO)이 지나면 또는 중복 ACK가 도착하면 재전송 시도 등
※ 위 3개 모두 상호 밀접한 연관관계가 있음
5. 관련 RFC
ㅇ 최초버전 : RFC 793 (Transmission Control Protocol, 1981)
ㅇ 오류수정 : RFC 1122
ㅇ 개선확장
- 재전송 타임아웃 : RFC 6298, 5682, 4015 등
- 혼잡제어 : RFC 2581, 5681, 3782, 3517, 3390, 3168 등
- 확인응답 : RFC 2018, 2883
- 보안 : RFC 6056, 5927, 5926
- 윈도우 크기,타임스탬프 : RFC 1323
- NAT : RFC 5382
- 긴급 메커니즘 : RFC 6093