TCP란?
TCP(Transmission Control Protocol)는 인터넷에서 데이터를 신뢰성 있게 전송하기 위한 핵심 프로토콜이다. TCP는 연결 지향적 프로토콜로, 데이터 전송을 시작하기 전에 명시적인 연결 설정 과정을 거친다. 이 과정은 'TCP 3-way handshake’라 불리며, 안정적인 연결을 설정하고 유지하는 데 필수적인 역할을 한다.
TCP 3-way handshake
- SYN(Synchronize) 단계
- 클라이언트가 서버에 연결을 요청하는 첫 단계로, 클라이언트는 서버에 SYN 패킷을 보낸다. 이 패킷에는 연결을 시작하겠다는 신호와 함께 클라이언트의 초기 시퀀스 번호(ISN - Initial Sequence Number)가 포함된다. 이 번호는 데이터 패킷의 순서를 보장하고 데이터의 무결성을 확인하는 데 사용된다.
- 세부사항
- 초기 시퀀스 번호 (Initial Sequence Number, ISN)
- ISN은 TCP 연결의 시작점에서 각 TCP 세그먼트에 순서를 부여하기 위해 사용되는 숫자이다. TCP는 각 데이터 패킷(세그먼트)을 순서대로 번호를 매겨 전송하며, 이 번호는 각 세그먼트의 첫 번째 바이트를 나타낸다. ISN은 연결 초기에 무작위로 설정되며, 이후의 데이터 전송에서는 이 번호에 데이터의 바이트 수를 더해 다음 세그먼트의 시퀀스 번호를 계산한다. 이러한 시퀀스 번호 체계는 데이터의 순서를 정확하게 유지하고, 데이터가 어떤 순서로 도착하든 올바르게 재조립할 수 있도록 한다.
- 데이터 패킷
- 데이터 패킷은 인터넷을 통해 전송되는 데이터의 단위로, TCP에서는 이를 '세그먼트'라고 부른다. 각 세그먼트에는 페이로드(실제 데이터), 헤더(시퀀스 번호, 확인 응답 번호, 플래그, 윈도우 크기 등의 메타데이터를 포함)가 포함된다. 헤더의 정보는 데이터의 전송을 제어하고, 데이터가 도착한 순서대로 재조립하며, 전송 과정에서 발생할 수 있는 오류를 감지하고 수정하는 데 사용된다.
- 데이터 무결성
- 데이터 무결성은 전송된 데이터가 손상되지 않고 정확하게 도착했는지를 확인하는 것을 말한다. TCP는 다음과 같은 방법으로 데이터 무결성을 보장한다:
- 시퀀스 번호: 시퀀스 번호는 데이터 패킷의 순서를 보장한다. 수신자는 시퀀스 번호를 사용하여 패킷이 올바른 순서로 도착했는지 확인하고, 필요한 경우 재조립한다.
- 확인 응답 (ACK): 수신자는 수신한 각 세그먼트에 대해 ACK 패킷을 보내어 발신자에게 성공적인 수신을 알린다. 만약 ACK가 발신자에게 도착하지 않는다면, 해당 세그먼트는 재전송된다.
- 체크섬: TCP 헤더와 데이터에는 '체크섬'이라는 오류 검출 코드가 포함된다. 이 체크섬을 통해 데이터가 전송 과정에서 손상되었는지 검사할 수 있다. 체크섬이 일치하지 않는 경우, 세그먼트는 버려지고 재전송을 요청한다.
- SYN-ACK(Synchronize-Acknowledgment) 단계
- 서버는 클라이언트의 SYN 요청을 받고, 클라이언트에게 SYN-ACK 패킷을 보낸다. 이 패킷은 서버의 초기 시퀀스 번호와 클라이언트의 시퀀스 번호에 1을 더한 값(ACK)이 포함된다. 이 응답은 서버가 클라이언트의 SYN을 받았고, 클라이언트도 서버의 패킷을 받을 준비가 되었다는 것을 의미한다.
- ACK(Acknowledgment) 단계
- 클라이언트는 서버의 SYN-ACK 패킷을 받고, ACK 패킷을 서버에 보내 연결을 확정 짓는다. 이 패킷에는 서버의 시퀀스 번호에 1을 더한 값이 포함되어, 서버가 다음에 받을 데이터 패킷의 시작 번호를 알린다.