전송 제어 프로토콜(Transmission Control Protocol)
인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다.
네트워크 계층 중 전송 계층에서 사용하는 프로토콜로 신뢰성을 보장하는 연결형 서비스이다. 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(8비트 블록 단위)을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
이미지 출처: https://www.crocus.co.kr/1362
Three-Way Handshake(처음 TCP 세션을 시작할 때)
SYN -> SYN / ACK -> ACK가 순서이며, 이후 Established 상태가 되어 TCP 커넥션이라는 가상의 통신 회선이 구성됨. 이 때는 실제 데이터를 교환하지는 않음
데이터 전송 과정
데이터 확인 응답
시퀀스 번호와 ACK번호를 통해 데이터를 수신한 위치를 파악, 수신 확인 후 데이터 전송데이터 전송 제어
특정 시간만큼 기다리는 동안 상대방이 데이터를 수신했다는 ACK 번호를 보내지 않을 경우
데이터를 다시 보냄데이터 흐름 제어
TCP세션에서 지정된 윈도우 사이즈(한번에 받을 수 있는 데이터의 양)를 보내는 동안에는 ACK를 보내지 않고 연속해서 데이터를 보내며
신뢰성을 유지 & 전송 효율을 높임
Four-way handshake
종료요청 > 확인 > 종료요청 > 확인
- 신뢰성 보장
TCP의 구성 특성상 패킷 손실, 중복, 순서바뀜 등이 없도록 함.
- 연결 지향적
느슨한 연결의 성격을 갖고 있으며 연결 관리를 위해 연결 설정 및 연결 해제 과정을 수행함
(시작 / 종료)
- 연결 식별 / 다중화 / 포트번호
각 호스트의 소켓(호스트의 IP주소 및 포트번호) 정보로 하나의 연결(회선)임을 식별할 수 있음.
단일 연결 뿐 아니라 다수 연결의 동시 처리도 가능(패킷 기반 통신)
포트 번호를 참조하여 어플리케이션과의 연결점 식별 가능
- 전이중 전송방식(양방향성)
데이터 전송이 양방향으로 일어남.
- 멀티캐스트 불가능
1:1 통신을 하므로 유니캐스트 통신을 함
단일 송신자와 단일 수신자 간 단일 경로연결이 설정됨.(차세대 전송계층 프로토콜인 MPTCP에서는 다수경로 다수연결 가능해짐)
- 응용계층과 바이트의 흐름으로 데이터를 주고받음
TCP 계층과 상위의 응용계층 간 데이터를 주고받는 과정을 바이트들의 연속적 흐름으로 보고,
이들을 묶어 세그먼트(TCP 세그먼트)화하여 전송함
- TCP 세그먼트: TCP에서 IP로 전달되는 정보의 단위. 양 끝단의 TCP 모듈간 서로 교환되는 데이터.
통상 수 백 바이트 정도의 크기로 나타냄.
- 세그먼트화(데이터 패키징 처리)
바이트들을 모아서 세그먼트화 하고 TCP 헤더를 붙인 다음, 이들의 순서를 제어함.
- 흐름 제어
송신 및 수신 속도를 일치시키는 작업을 함 (수신자의 버퍼 오버플로우 방지)
Stop and wait 방식- 전송한 패킷에 대해 매번 확인 응답을 받고 나서 그 다음 패킷을 전송
Sliding window 방식- 수신 측에서 수용 가능한 윈도우 크기만큼 송신 측에서 확인응답 없이 세그먼트를 전송할 수 있게 해
데이터 흐름을 동적으로 조절하는 제어 기법
- 혼잡 제어
네트워크가 혼잡하다고 판단될 때 TCP는 데이터의 전송 속도를 강제로 줄임.
- 비 실시간적 응용
TCP는 데이터의 전달에 대한 신뢰성 보장을 하지만 속도 지연에는 취약할 수 있기 때문에
실시간 통신이 필요한 상황에서는 UDP를 사용함.
사용자 데이터그램 프로토콜(User Datagram Protocol)
인터넷 프로토콜 스위트의 주요 프로토콜 가운데 하나이다.
UDP의 전송 방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 한다.
UDP는 일반적으로 오류의 검사와 수정이 필요 없는 애플리케이션에서 수행할 것으로 가정한다.
이미지 출처: https://www.distributednetworks.com/dhcp-tcp-ip/module3/tcpip-protocol-suite.php
OSI(Open Systems Interconnection Reference Model) 7계층은 통신이 일어나는 과정을
7단계로 나누어 설명한 모델이고, OSI 7계층을 단순화한 것이 TCP/IP 4계층
TCP와 UDP는 둘 다 OSI 7계층의 4계층(전송계층)에서 동작하는 프로토콜
전송계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층
두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현됨
포트 번호를 이용하여 주소를 지정
데이터 오류 검사를 위한 체크섬 존재
신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고
간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용함
TCP는 연결이 성공해야 통신 가능(연결형 프로토콜), UDP는 연결 없이 통신이 가능
TCP는 데이터의 경계를 구분하지 않음(Byte-Stream Service), UDP는 데이터의 경계를 구분함 (Datagram Service)
TCP는 일 대 일(Unicast) 통신
UDP는 일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast) 통신
https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4#%EC%8B%A0%EB%A2%B0%EC%84%B1%EC%9D%B4-%EB%86%92%EC%9D%80-%EC%A0%84%EC%86%A1reliable-transmission
https://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C
https://www.stevenjlee.net/2020/06/29/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-tcp-%EC%99%80-udp-tcp-vs-udp/
https://thenaeul.wordpress.com/2020/11/08/http-tcp-ip-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC/
https://hpbn.co/building-blocks-of-tcp/
https://www.crocus.co.kr/1362
https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90_%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B7%B8%EB%9E%A8_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C