TCP(전송 제어 프로토콜)란?

Transmission Control Protocol의 약자. 전송 계층의 연결형 프로토콜. 3-way 핸드셰이크로 연결을 설정하고, 시퀀스 번호, 확인 응답(ACK), 재전송을 통해 데이터를 빠짐이나 중복 없이 보낸 순서대로 전달한다. 흐름 제어와 혼잡 제어로 보내는 양도 조절한다. 웹 접속(HTTP/1.1·HTTP/2), 메일, SSH 등이 사용한다.

일본어 명칭: TCP

TCP(전송 제어 프로토콜)은(는) 네트워크 기초, 네트워크 설계와 운용, 웹 기술 기초 등 3개 분야의 연습 문제 21개에 나와요.

분야: 네트워크 기초

확실하게 전달하는 원리

TCP는 보내는 데이터의 1바이트마다 일련번호(시퀀스 번호)를 붙입니다. 수신 측은 '다음에는 이 번호부터 보내 주세요'라는 확인 응답(ACK)을 돌려보내고, 송신 측은 정해진 시간 안에 ACK가 오지 않으면 그 데이터를 다시 보냅니다(재전송 타임아웃). 같은 번호의 ACK(중복 ACK)를 3개 받았을 때는 타임아웃을 기다리지 않고 재전송합니다(빠른 재전송). 수신 측은 순서가 바뀌어 도착한 데이터를 다시 정렬하고, 중복을 버리며, 체크섬으로 손상된 데이터를 찾아냅니다. 애플리케이션에서는 구분이 없는 바이트의 흐름(스트림)으로 보입니다.

윈도로 보내는 양을 정한다

송신 측은 ACK를 기다리지 않고 보내도 되는 양(윈도)만큼 데이터를 연이어 보냅니다. 수신 측이 알려 주는 빈 버퍼의 크기(수신 윈도)에 맞추는 것이 흐름 제어, 네트워크의 혼잡 정도에 맞춰 송신 측이 가진 혼잡 윈도를 늘리고 줄이는 것이 혼잡 제어이며, 실제로는 둘 중 작은 쪽까지 보냅니다. 1왕복 시간(RTT)에 보낼 수 있는 것은 윈도만큼이므로 처리량은 대략 윈도÷RTT가 됩니다. 예를 들어 윈도 64 KB, RTT 100 ms에서는 약 5 Mbit/s가 상한이며, 빠른 회선을 살리려면 윈도 스케일 옵션으로 윈도를 크게 합니다.

헤더와 연결 관리

TCP 헤더는 옵션 없이 20바이트입니다. 출발지와 목적지의 포트 번호, 시퀀스 번호, 확인 응답 번호, SYN·ACK·FIN·RST 등의 플래그, 윈도 크기, 체크섬이 들어갑니다. 하나의 연결은 출발지와 목적지의 IP 주소와 포트 번호 4개의 조합으로 구별됩니다. 연결은 3-way 핸드셰이크로 시작하고, 양방향이 각각 FIN을 보내 닫습니다. 세그먼트 하나가 손실되면 뒤의 데이터가 도착해 있어도 애플리케이션에 넘기지 못하고 기다리게 되므로(HOL 블로킹, head-of-line blocking), HTTP/3에서는 UDP 위의 QUIC가 쓰입니다.

도전해 보기: TCP(전송 제어 프로토콜) 관련 문제

TCP/IP의 4계층 모델에서 TCP와 UDP가 속하는 계층은?

  1. A응용 계층
  2. B인터넷 계층
  3. C전송 계층
정답과 해설 보기

정답: C. 전송 계층

TCP/IP 모델은 아래에서부터 링크 계층(네트워크 인터페이스 계층), 인터넷 계층, 전송 계층, 응용 계층의 4개 계층으로 나타냅니다. TCP와 UDP는 전송 계층의 프로토콜로, 포트 번호를 사용하여 단말 안의 어느 애플리케이션으로 가는 통신인지를 구별합니다. 인터넷 계층의 IP는 단말에서 단말까지 패킷을 전달하는 일을 담당합니다. HTTP와 DNS는 응용 계층의 프로토콜입니다. OSI 참조 모델에 대응시키면 전송 계층은 4계층, 인터넷 계층은 3계층에 해당합니다.

TCP에서 연결을 설정하는 3-way 핸드셰이크에서 주고받는 패킷의 순서로 올바른 것은?

  1. ASYN → ACK → FIN
  2. BACK → SYN → SYN+ACK
  3. CSYN → SYN+ACK → ACK
정답과 해설 보기

정답: C. SYN → SYN+ACK → ACK

3-way 핸드셰이크에서는 먼저 클라이언트가 SYN으로 연결을 요청하면서 자신이 보낼 데이터의 첫 번호(초기 시퀀스 번호)를 알립니다. 서버는 SYN+ACK로 그것을 받았음을 확인(ACK)하는 동시에 자신의 초기 시퀀스 번호를 알립니다. 마지막으로 클라이언트가 ACK를 돌려보내면 양방향 통신의 준비가 갖추어집니다. 세 번의 교환으로 양쪽 방향의 번호를 서로 확인함으로써, 늦게 도착한 오래된 패킷으로 인한 잘못된 연결 등을 막습니다. 이 때문에 TCP에서는 데이터를 보내기 시작할 때까지 적어도 1왕복 시간(RTT)이 걸립니다. FIN은 연결을 종료할 때 사용합니다.

자주 묻는 질문

TCP와 UDP의 차이는 무엇인가요?

TCP는 연결을 설정하고, 확인 응답과 재전송, 순서 제어로 데이터를 확실하게 전달합니다. UDP는 연결 절차도 재전송도 없이 데이터그램을 보내기만 하므로 헤더가 작고 지연도 적습니다. 확실성이 필요한 웹이나 파일 전송에는 TCP, 약간의 손실보다 지연이 적은 것이 중요한 통화나 질의가 짧은 DNS에는 UDP가 쓰입니다.

TCP의 재전송은 언제 일어나나요?

두 가지 계기가 있습니다. 하나는 보낸 뒤 재전송 타임아웃 시간(RTT 측정으로 계산)이 지나도 ACK가 오지 않을 때, 또 하나는 같은 확인 응답 번호의 ACK를 3개 연속으로 받았을 때이며, 후자를 빠른 재전송이라고 부릅니다. 재전송이 계속되면 타임아웃 시간을 2배씩 늘립니다.

TCP의 처리량이 회선 속도보다 낮은 이유는 무엇인가요?

1왕복 시간(RTT)에 보낼 수 있는 것은 윈도 크기까지이므로, 상대가 멀수록, 윈도가 작을수록 처리량이 떨어집니다. 패킷 손실로 혼잡 제어가 윈도를 줄였을 때나 수신 측 애플리케이션의 읽기가 느릴 때도 떨어집니다.

해설 속 TCP(전송 제어 프로토콜)

TCP(전송 제어 프로토콜)이(가) 나오는 문제 (21)

  1. TCP/IP의 4계층 모델에서 TCP와 UDP가 속하는 계층은?
  2. TCP에서 연결을 설정하는 3-way 핸드셰이크에서 주고받는 패킷의 순서로 올바른 것은?
  3. RTT(왕복 시간)가 100 ms인 웹 서버에 HTTPS(TCP 위의 TLS 1.3)로 새로 접속하여, 첫 요청을 보내고 응답을 받기 시작할 때까지 걸리는 시간에 가장 가까운 것은? DNS 이름 해석은 끝났으며, 서버의 처리 시간과 데이터 전송 시간은 무시한다.
  4. TCP의 흐름 제어에서 수신 측이 윈도 크기(수신 윈도)를 송신 측에 알리는 목적으로 올바른 것은?
  5. TCP의 수신 윈도가 65536바이트로 일정하고 RTT가 10 ms인 연결에서, 회선의 대역폭은 충분히 크고 손실도 없다고 하자. 이 연결로 얻을 수 있는 처리량의 상한에 가장 가까운 것은?
  6. TCP 혼잡 제어의 기본적인 개념으로 올바른 것은?
  7. TCP의 송신 측이 세그먼트가 손실되었다고 판단하여 재전송하는 계기로 올바른 것은?
  8. 1 Gbps 이더넷에서 IP 패킷의 크기가 MTU를 꽉 채운 1500바이트가 되도록 하여 TCP 데이터를 계속 보낸다. IPv4 헤더를 20바이트, TCP 헤더를 20바이트, 이더넷 헤더와 FCS를 합쳐 18바이트, 프리앰블과 프레임 사이의 빈 시간(프레임 간 갭)을 합쳐 20바이트라고 할 때, 애플리케이션 데이터의 처리량 상한에 가장 가까운 것은?
  9. 스위치 2대 사이의 1 Gbps 링크 4개를 링크 어그리게이션으로 하나의 논리적인 링크로 묶었다. 프레임은 출발지와 목적지의 주소나 포트 번호의 조합(플로)마다 어느 링크로 보낼지 정하는 일반적인 방식으로 분배한다. TCP 연결 하나로 얻을 수 있는 처리량의 상한에 가장 가까운 것은?
  10. NAPT를 하는 라우터(외부 주소는 198.51.100.7)에 '외부 TCP 8080번 포트에 도착한 통신을 내부 웹 서버 192.168.1.20의 80번 포트로 전달한다'는 포트 포워딩(목적지만 변환하는 정적 설정)을 했다. 인터넷상의 단말 203.0.113.9가 출발지 포트 51000으로 198.51.100.7의 8080번 포트에 접속했을 때, 웹 서버가 받는 패킷의 목적지와 출발지 조합은?
  11. 라우터의 인터페이스에, 들어오는 패킷을 위에서부터 차례로 검사하는 ACL을 설정했다. 규칙 1은 '목적지 10.0.0.10의 TCP 443번 포트로 가는 통신을 허용', 규칙 2는 '출발지가 192.168.1.0/24인 통신을 모두 거부', 규칙 3은 '출발지가 192.168.0.0/16이고 목적지가 TCP 80번 포트인 통신을 허용'이며, 그 밖의 규칙은 없다. ㄱ '192.168.1.5에서 10.0.0.10의 TCP 443번 포트로', ㄴ '192.168.1.5에서 10.0.0.20의 TCP 80번 포트로', ㄷ '192.168.2.5에서 10.0.0.20의 TCP 80번 포트로', ㄹ '192.168.2.5에서 10.0.0.20의 TCP 22번 포트로'의 4개 패킷 중 통과할 수 있는 것을 모두 고른 것은?
  12. 거점 간 VPN 터널을 통해 먼 곳의 웹 서버와 통신하고 있다. TCP 연결은 확립되고 작은 페이지는 표시되지만, 큰 파일의 다운로드만 도중에 멈춰 버린다. 터널 안의 MTU는 1400바이트이며, 서버는 1500바이트의 패킷을 분할 금지(DF 비트를 1)로 하여 보내고 있다. 또한 서버 앞단의 방화벽은 ICMP를 모두 버리는 설정으로 되어 있다. 원인으로 가장 적절한 것은?
  13. RTT가 40 ms인 웹 서버에서 HTML 하나와 거기서 참조하는 이미지 4개를 하나씩 차례로 가져온다. TCP 연결 설정에 1왕복, 각 요청과 응답에 1왕복이 걸린다고 하고, 데이터 전송 시간, 서버의 처리 시간, TLS, 연결 종료는 고려하지 않는다. 객체마다 새로운 TCP 연결을 여는 경우와 하나의 TCP 연결을 재사용하는 지속 연결의 경우에 걸리는 시간의 차이는?
  14. 1.5 MB의 텍스트 데이터를 gzip으로 3분의 1 크기로 압축하여 보낸다. 대역폭이 10 Mbps, RTT가 100 ms이고, 데이터를 보내기 시작하기 전에 TCP 연결, TLS 핸드셰이크, HTTP 요청에 합쳐서 3왕복이 걸린다고 한다. 1 MB = 10^6바이트로 하고, 압축과 압축 해제 시간, 헤더, TCP의 혼잡 제어에 의한 대기는 무시한다. 데이터를 다 받을 때까지의 시간에 가장 가까운 것은?
  15. OSI 참조 모델에서 IP 주소 같은 논리 주소를 사용하여 서로 다른 네트워크 사이에서 패킷을 중계해 목적지까지 전달하는 역할을 하는 계층은?

이 용어가 포함된 비교

관련 용어

패킷(Packet) HTTP(하이퍼텍스트 전송 프로토콜) RTT(왕복 시간) 라우터(Router) IP(인터넷 프로토콜) UDP(사용자 데이터그램 프로토콜) DNS(도메인 네임 시스템) 포트 번호(Port Number) TLS QUIC

용어집으로 돌아가기