TCP 시퀀스 번호(TCP Sequence Number)는 TCP(Transmission Control Protocol)에서 데이터 패킷의 순서를 추적하고, 전송 중 손실된 데이터의 재전송 및 올바른 데이터 조립을 보장하기 위해 사용하는 숫자이다. 시퀀스 번호는 TCP 연결에서 매우 중요한 역할을 하며, 송신 측에서 전송하는 각 바이트에 고유한 번호를 할당한다. 수신 측에서는 이를 기반으로 패킷이 올바른 순서로 도착했는지 확인할 수 있다.
시퀀스 번호의 주요 역할
- 데이터 순서 보장
- 시퀀스 번호는 각 바이트에 고유 번호를 할당함으로써, 수신 측이 전송된 데이터를 올바른 순서대로 재조립할 수 있게 한다.
- 이를 통해 데이터가 원래 순서와 다르게 도착하더라도 올바른 순서로 재구성할 수 있다.
- 데이터 손실 감지 및 재전송
- 수신 측에서는 시퀀스 번호를 통해 누락된 패킷을 감지할 수 있다.
- 특정 시퀀스 번호의 패킷이 누락되었을 경우, 수신 측은 송신 측에 해당 패킷을 재전송해달라고 요청할 수 있다.
- 연결 제어 및 흐름 제어
- TCP 연결 설정 시, 시퀀스 번호는 초기화되어 양측 간 데이터 흐름을 관리한다.
- 특히 수신 측은 확인 응답(ACK)으로 다음에 기대하는 시퀀스 번호를 송신 측에 알려주어 데이터 전송 속도를 조절할 수 있다.
시퀀스 번호 초기화
- TCP 연결 설정 시, 클라이언트와 서버는 각각 초기 시퀀스 번호(ISN, Initial Sequence Number)를 임의로 선택하여 설정한다.
- 이 초기 값은 보안과 데이터 무결성을 유지하는 데 중요하며, 일반적으로 무작위로 선택된다.
- 클라이언트와 서버는 서로의 초기 시퀀스 번호를 SYN 패킷을 통해 교환하고, 이후 ACK 패킷으로 이를 확인하여 연결을 완료한다.
예시
TCP 통신에서 클라이언트가 서버로 500 바이트의 데이터를 전송한다고 가정하자. 클라이언트의 초기 시퀀스 번호가 1000이라면, 각 바이트에는 다음과 같이 시퀀스 번호가 할당된다.
- 첫 번째 바이트: 시퀀스 번호 1000
- 마지막 바이트: 시퀀스 번호 1499
서버가 모든 데이터를 수신한 후 확인 응답을 보낼 때, 다음에 기대하는 바이트의 시퀀스 번호인 1500을 ACK 값으로 보내게 된다. 이를 통해 송신 측은 모든 데이터가 정상적으로 수신되었음을 확인하고, 이후 데이터 전송을 이어 나간다.