TCP란?
TCP는 전송계층에서 사용되는 연결 지향적 프로토콜로 데이터를 전송하는 동안 송신자와 수신자 사이에 연결을 설정 및 유지하고, 데이터가 완전히 온전하게 도착하도록 보장합니다.
1. 연결 지향
데이터 전송 전에 송신자와 수신자가 연결을 설정한다.
2. 흐름 제어
송신자가 수신자의 처리 능력을 초과하지 않도록, 데이터 처리 속도를 조절해 버퍼 오버플로우를 방지
3. 혼잡 제어
네트워크 내 패킷 수가 과도하게 증가하지 않도록 방지
4. 신뢰성 있는 데이터 전송
데이터가 목적지에 도착했는지 확인하고 데이터가 손상되거나 유실된 경우, 재전송을 시도함
5. 전송순서 보장
패킷을 전송한 순서를 보장한다.
6. 전이중, 점대점 방식
- 전이중 : 양방향으로 전송이 동시에 일어날 수 있다.
- 점대점 : 각 연결이 2개의 종단점을 가지고 있다.
TCP 헤더
TCP 헤더는 최소 20바이트에서 60바이트까지 다양하게 확장될 수 있으며 다음과 같은 필드들로 구성되어 있습니다.
- Source Port : 송신한 포트 번호
- Destination Port : 수신할 포트 번호
- Sequence Number : 세그먼트의 순서를 지정하는 번호 송신 측에서 나누어 보낸 데이터의 순서를 식별하기 위해 사용
- Acknowledgment Number : 다음에 수신할 데이터의 순서 번호를 지정
- Data Offset : TCP 헤더의 크기
- Flag : 다양한 제어 정보들
- Window Size : 수신측에서 한 번에 수신할 수 있는 데이터 최대 크기
- Options : TCP 헤더 길이를 확장하거나 추가 기능을 제공하기 위한 필드
TCP 헤더의 이러한 구조 덕분에 신뢰성 있는 데이터 전송, 흐름제어, 오류검출 등의 기능들을 사용할 수 있습니다.
3-way-handshake
TCP는 데이터를 보내기 전에 3-Way-handshake를 통해 연결을 설정하게 됩니다. 이를 통해 송신자와 수신자 간의 신뢰할 수 있는 연결을 확립할 수 있습니다.
1. SYN : 클라이언트가 서버에 클라이언트의 ISN을 담아 SYN을 보낸다
(ISN : 새로운 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호)
2. SYN-ACK : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN와 함께 응답 확인 번호로 클라이언트의 ISN에 1을 더한 값을 보냅니다.
3. ACK : 클라이언트는 서버의 응답을 받은 후 서버의 ISN에 1을 더한 값인 승인번호를 담아 ACK를 서버에 보냅니다.
3-way-handshake가 완료되면 TCP 연결이 설정되고 이 후 데이터를 전송할 수 있습니다. 데이터를 전송하는 중에도 TCP는 지속적으로 응답(ACK)을 통해 데이터의 전달 상태를 확인하고 손실된 패킷이 있으면 재전송하는 등의 과정들을 통해 신뢰성을 보장합니다.
상태 | 설명 |
CLOSED | 연결 수립 전 기본상태 |
LISTEN | 포트가 열린 상태로 연결 요청 대기 |
SYN-SENT | SYN을 요청한 상태 |
SYN-RECEIVED | SYN 요청을 받고 상대방 응답을 기다리는 중 |
ESTABLISHED | 연결 수립 완료 |
4-way-handshake
TCP가 연결을 해제할 때는 4-Way-handshake 과정이 발생합니다.
1. FIN : 클라이언트가 연결 종료를 요청하는 FIN을 보내고 클라이언트는 FIN_WAIT_1 상태가 된다.
2. ACK : 서버는 클라이언트의 FIN을 받으면 CLOSE_WAIT 상태에 들어가고 ACK를 전송한다.
클라이언트는 패킷을 받으면 FIN_WAIT_2 상태에 들어간다.
3. FIN : 서버는 연결 종료 요청하는 FIN 패킷을 클라이언트에 보내고 LAST-ACK 상태가 된다.
4. ACK: FIN을 받은 클라이언트는 ACK을 서버에 보내고 TIME_WAIT 상태가 된다. ACK을 받은 서버는 CLOSED상태가 되고, 클라이언트는 일정 시간을 대기한 후 연결이 닫힌다.
TIME_WAIT : 소켓이 바로 소멸되지 않는 이유는 지연 패킷 등이 존재할 수 있기 때문에 일정 시간 대기 후 종료된다.
UDP란?
UDP는 프로토콜 스택의 전송계층에서 사용되는 비연결형 프로토콜로 연결을 설정하거나 유지할 필요가 없고, TCP보다 빠르게 작동하며 화상회의, 온라인 게임 등에 주로 사용됩니다.
UDP작동 방식
UDP는 순서를 보장하지 않고 수신여부를 확인하지 않으며, 단순히 데이터만 전달하는 데이터그램 패킷 교환 방식을 사용합니다.
데이터그램 패킷 교환 방식은 패킷이 독립적으로 최적의 경로를 선택해 이동하는데 하나의 메시지에서 분할된 패킷들은 서로 다른 경로로 전송될 수 있으며, 도착 순서가 다를 수 있습니다.
UDP 헤더
UDP 헤더는 TCP에 비해 간단한 구조로 구성되어 있습니다.
- Source Port : 송신한 애플리케이션의 포트 번호
- Destination Port : 수신할 애프리케이션의 포트 번호
- Length : UDP 헤더와 데이터의 총 길이를 바이트 단위로 나타낸다.
- Checksum : 데이터 그램의 오류 검출을 위한 필드 (사용유무는 선택적)
이처럼 간단한 구조로 되어있기 때문에 더 빠른 속도로 데이터를 전달할 수 있습니다.
UDP 특징
1. 비연결형 프로토콜
데이터 전송 전에 송신자와 수신자 간의 연결을 설정하지 않는다.
2. 비신뢰성 전송
데이터가 전송되는 도중에 손실되거나 순서가 바뀌어도 이를 복구하거나 재전송하지 않는다.
3. 빠른 전송 속도
연결 설정, 흐름제어, 혼잡 제어 등의 절차가 없기 때문에 데이터 전송 속도가 빠르다.
4. 작은 크기의 헤더
TCP에 비해 작은 헤더 크기를 가지고 있는데 포트, 길이, 체크섬 등의 기본 정보들만을 포함한다.
5. 1:1 1:N N:N 통신 가능
브로드 캐스트, 멀티캐스트 등의 기능을 통해 여러 수신자에게 한 번에 전송이 가능하다.
UDP는 신뢰성을 탑재하지 않았을 뿐이지 커스터 마이징이 가능해 개발자가 어떻게 구현하느냐에 따라 기능들을 추가할 수 있다
(실제로 구글에서 개발한 QUIC프로토콜은 UDP 기반으로 동작한다.)
TCP, UDP 특징 정리
특징 | TCP | UDP |
신뢰성 | 높다 | 낮다 |
연결 방식 | 연결형 서비스 | 비연결형 서비스 |
속도 | 느리다 | 빠르다 |
순서 보장 | 전송 순서 보장 | 보장하지 않음 |
오류 감지 및 수정 | 있음 | 없음 |
수신 여부 확인 | 확인 | 미확인 |
사용 예시 | 웹 브라우징, 이메일 | 스트리밍, 온라인 게임 |
'네트워크' 카테고리의 다른 글
HTTP Method 정리 (0) | 2024.08.04 |
---|---|
HTTP 상태코드 정리 (0) | 2023.01.14 |