
tcp 구조
tcp 헤더의 플래그비트로 전송
신뢰성을 보장하기에 충분하지 않기 때문
서로의 SYN 패킷을 교환하면서 연결이 설정될 수 있음 === Simultaneous Open
서로 SYN 패킷 전송, SYN-ACK 패킷 전송, ACK 전송, 연결
DoS(Denial of Service) 공격의 일종
대량의 SYN 패킷을 서버로 보내 서버의 자원을 고갈시키는 공격
방지하기 위해 SYN 쿠키 등의 기술 사용해 자원을 할당하기 전에 클라이언트 응답을 기다리도록 할 수 있음
SYN-ACK 응답을 생성할 때 패킷 순서 번호에 특별한 값(쿠키)을 넣음
쿠키 = 서버 비밀 키 + 클라이언트 IP 주소 + 포트번호 + 서버 IP 주소 등의 조합
서버에서 쿠키 값이 없다면 응답에 답변을 하지 않음.
이후 ACK 패킷을 받으면 쿠키를 확인하고 정상적인 연결 설정
0-RTT(Zero Round-Trip Time) : 클라이언트가 서버와의 이전 연결에 대한 정보를 저장해두었다가, 새로운 연결을 설정할 때 이 정보를 사용하여 핸드셰이크 과정을 생략하거나 단축하는 방식
어떻게 TCP 연결이 완료되기 전에 데이터가 전송될 수 있는가?
검증된 키가 있기 때문
TCP : 데이터 전송을 위한 신뢰성 있는 연결을 제공하는 전송 계층 프로토콜, 데이터의 순서와 무결성 보장
TLS(Transport Layer Security) : TCP 연결 위에서 동작, 데이터의 보안 강화, TCP가 데이터를 신뢰성있게 전송하는 동안 TLS는 이 데이터를 암호화해서 보안을 제공
0-RTT 기법은 TLS 계층에서의 최적화로, TCP 연결 자체는 여전히 3-way handshake로 설정되지만 TLS 계층에서 이미 검증된 키를 사용해 암호화된 데이터를 보낼 수 있음