TCP
1) 정의
TCP, Transmission Control Protocol
- transport 계층(전송계층, 4계층)의 프로토콜
- 양 끝단(End to end)의 사용자들 간 상호 신뢰적인 연결 지향 서비스 제공
- 하위 계층에서의 패킷 손실, 중복, 오류 등의 전송문제를 검출하고 해결
- Byte-Stream 서비스
- 데이터 경계를 구분하지 않음 (데이터를 원하는 사이클로 받음)

💡 Segment
TCP의 패킷 (Packet - 전송 수단), TCP로 연결된 세션간의 전달되는 데이터 단위
Application단에서 데이터를 전송하면, TCP프로로콜 안에서 데이터를 자르고 TCP Header를 추가한 형태(Segment : TCP Header + Data segment)로 처리된다
2) 연결 설정 과정

연결 설정 : 3-way-handshaking
- client → server : SYN (연결 요청)
- server → client : ACK + SYN (연결 요청에 대한 승인)
- client → server : ACK (연결 설정)

연결 해제 : 4-way-handshaking
- client → server : FIN (클라이언트 측에서 어플리케이션 종료 요청 전달)
- server → client : ACK (클라이언트 측의 연결 종료 요청 ‘확인’)
- server → client : FIN (서버 측 연결 종료 ‘실행’)
- client → server : ACK (확인 응답)
3) 특징
(a) 연결 지향적
- Connection Oriented
- 송신자와 수신자 사이에 먼저 연결(세션)이 설정된 후 데이터가 전송됨
- 느슨한/유연한 연결
- 공용 회선 (전송순서, 에러 등을 중간 연결층에서 고려하지 않고 종단에서 처리)
- 강한 연결을 구성하는 가상회선과는 성격이 다르다 (전용회선)
- 연결 관리를 위한 연결설정 및 연결해제 과정 필요
(b) 신뢰성
- Reliable
- 패킷 손실, 중복 없도록 보장
- 데이터의 전송 순서를 보장
- 신뢰성을 보장하는 기법들
- 흐름 제어, Flow control
- 상대방이 받을 수 있을 만큼만 데이터를 전송
- 송신(송신 전송률) 및 수신(수신 처리율) 속도를 일치시키는 것
- 오류 제어, Error control
- 데이터의 오류나 누락 없이 안전한 전송을 보장
- 오류 판단 기준: 송신측에서 계산한 체크섬을 수신측에서 검증 & ACK 반환
- 혼잡 제어, Congestion control
- 네트워크의 혼잡 정도에 따라 송신자가 데이터 전송량을 제어
(c) 전이중 (양방향성)
- Full-Duplex
- 종단(end-to-end) 간 양 프로세스가 서로 동시에 세그먼트를 전달할 수 있음
- 양방향 각각에 대해 ‘송수신 버퍼’ 및 ‘sequence number’ 유지
(d) 점대점
- Point to Point
- 각 연결이 정확히 2개의 종단점을 가짐
- 일대일 전송 방식 : 단일 송신자와 단일 수신자 간 단일 경로 연결이 설정됨
- 즉, 멀티캐스트가 아닌 유니캐스트
4) TCP 구조
(a) TCP 패킷

- IP datagram 안에 TCP data가 캡슐화 됨
(b) TCP 헤더


- 헤더 기능 설명
- Source Port
- 송신 시스템의 어플리케이션 port number
- (참고) 일반적으로 0 ~ 1023번은 예약되어 있다 (ex. HTTP - 80)
- Destination Port
- 수신 시스템의 어플리케이션 port number
- Sequence Number
- 패킷의 순서를 표시
- 단위는 바이트로 표시 (이 패킷이 데이터의 몇 번째 바이트 부터인지) ⇒ 신뢰성 (순서 보장)
- Acknowledge Number
- 수신하기를 기대하는 다음 바이트 번호
- 패킷을 받고 그에 응답할 때 사용 (주로 ‘패킷을 잘 수신 받았다’는 의미)
- HLEN (Header Length)
- 가변적인 TCP 헤더 길이를, 4 바이트 단위로 표시
- 최소 4 5 = 20 바이트, 최대 4 (2^4 - 1) = 60 바이트
- Reserved
- 현재는 사용되지 않지만 미래를 위해 남겨둔 공간
- Control Flags
- TCP의 여러 속성들을 설정할 수 있는 비트
- URG : 긴급 데이터 설정
- ACK : 수신 확인 응답 설정
- PSH : 송수신 버퍼에 있는 데이터를 즉시 처리
- RST : 연결 중단 (강제종료, reset)
- SYN : 연결 설정 ⇒ 신뢰성 (오류 제어)
- FIN : 연결 종료
- Window size
- 윈도우 (한 번에 보낼 수 있는 최대 버퍼 수) 사이즈 설정 ⇒ 신뢰성 (흐름 제어)
- Checksum
- error bit 검출을 위한 값 ⇒ 신뢰성 (오류 제어)
- Urgent Pointer
- 우선순위가 더 높은 데이터의 마지막 byte 위치를 나타냄
- Option
- 최대 40 바이트까지 옵션 데이터 포함 가능
- ex. 주어진 윈도우 크기보다 크기 늘리기, 타임스탬프 정의, 선택 확인 응답 등
5) 단점
- 매번 connection 연결 필요 → 시간 손실 발생
- 고정된 통신 선로가 최단선이 아닐 경우, 다른 프로토콜보다 느린 전송 속도
- 일대일 통신만 가능
- 패킷을 조금만 손실해도 재전송 필요
UDP
1) 정의
UDP, User Datagram Protocol
- transport 계층(전송계층, 4계층)의 프로토콜
- 신뢰성이 낮은 프로토콜로 완전성을 보증하지 않음
- 가상회선을 확립할 필요 없어, 유연하며 실시간적 데이터 전송에 적합
- Datagram 서비스
- 데이터 경계를 구분함
- 데이터에 처음과 끝이 있고, 데이터가 끝날 때마다 발신과 수신이 이루어짐

2) 연결 설정 X
비연결형 서비스인 UDP는 연결을 위해 할당되는 논리적 경로가 없다.
따라서 연결을 설정하고 해제하는 과정 역시 존재하지 않는다.
그렇기에 각 패킷들은 서로 다른 경로로 독립적으로 전송되고, 처리된다.
+) [참고] TCP와 UDP 통신 방식 비교

(좌 TCP, 우 UDP)
3) 특징
(a) 비연결성
- 논리적 가상회선 연결이 필요 없음 ⇒ No Handshaking
- 데이터그램 지향의 전송계층용 프로토콜
- Datagram : 패킷교환에서 각각 독립적으로 취급되는 각각의 패킷
- Datagram 방식
- 패킷교환에서 각 패킷이 독립적으로 처리되어 목적지까지 도달
- 데이터 경계를 구분함
(b) 신뢰성 X, 순서화 X ⇒ 최선의 서비스 제공
- 확인응답 X
- 순서제어 X
- 수신된 메시지의 순서를 맞추지 않음
- TCP 헤더와 달리 seq num 필드 없음
- 흐름제어 X
- 오류제어 거의 X
- checksum을 제외한 특별한 오류 검출 및 제어 없음
- UDP를 사용하는 프로그램 측에서 오류제어 기능을 스스로 갖추어야 함
💡 최선의 서비스, Best effort
서비스의 지연 없이 최선의 서비스를 제공
패킷 손실이 유발될 수 있으나, 서비스의 지연이 없는 것을 우선시
(c) 빠른 속도
- 빠른 요청과 응답이 필요한 실시간 응용에 적합
- 전송속도에 제한이 없음
- 단순한 헤더
- 고정크기의 8 Byte만 사용
- 즉, 헤더 처리에 많은 시간과 노력을 요하지 않음
(d) 1:1, 1:N, N:N 통신 가능
4) UDP 구조
- 기본적으로 1개의 IP에 1개의 UDP만 수용
- TCP 헤더에 비해 매우 단순한 헤더 구조
(a) UDP 패킷

(b) UDP 헤더

- 헤더 기능 설명
- Source Port (발신 포트번호)
- 송신 시스템의 어플리케이션 port number
- Destination Port (수신 포트번호)
- 수신 시스템의 어플리케이션 port number
- UDP length
- UDP checksum
- error bit 검출을 위한 값
- UDP 헤더와 데이터를 모두 포함하여 체크
[참고] TCP vs UDP
0) 비교
| TCP | UDP |
|---|
| 연결 방식 | 연결형 서비스 | 비연결형 서비스 |
| 패킷 교환 방식 | 가상 회선 | 데이터그램 |
| 전송 순서 | 보장 | 바뀔 수 있음 |
| 수신 여부 확인 | O | X |
| 통신 방식 | 일대일 | 일대일, 일대다, 다대다 |
| 신뢰성 | 높음 | 낮음 |
| 속도 | 낮음 | 높음 |
1) 가상회선 vs 데이터그램

참고 : TCP와 가상회선
TCP는 엄밀히 말해 ‘느슨한 연결’이라는 점에서 가상회선과 완전히 동일하지는 않다. 하지만 송신-수신 호스트 간 경로를 설정하고 패킷의 전송 순서를 보장한다는 점에서는 가상회선과 유사하기 때문에, 많은 경우 혼용해서 사용하고 있다. (여기에서는 가상회선과 데이터그램을 비교함.)
가상회선
- 데이터를 전송하기 전에 논리적 연결이 설정됨 : 연결 지향
- 경로를 설정할 때 라우팅 1번 수행
- 경로에 포함된 노드가 다운되면, 전체 경로를 재설정
- 각 패킷에는 식별번호가 부여됨 → 전송 순서 보장
- 모든 패킷을 전송하면 가상회선 해제
- 용도: 정해진 시간 안에 다량의 데이터를 연속으로 보낼 경우
데이터그램
- 데이터 전송 전에 논리적 연결이 설정되지 않음 : 비연결 지향
- 패킷이 독립적으로 전송
- 패킷을 수신한 라우터는 최적의 경로를 선택해 패킷을 전송 (매번 라우팅 수행)
- 하나의 메세지에서 분할된 패킷이 여러 다른 경로로 전송될 수 있음
- 송신 측에서 전송한 순서와 수신 측에 도착한 순서가 다를 수 있음
- 용도: 짧은 메세지의 일시적 전송
2) 통신 과정

(좌 TCP, 우 UDP)
많은 도움이 되었습니다, 감사합니다.