About TCP handshake

HS·2024년 6월 7일


tcp 구조

ACK, SYN 같은 정보는 어떻게 전달?

tcp 헤더의 플래그비트로 전송

  • SYN (Synchronize): 연결 설정 시작
  • ACK (Acknowledgment): 데이터 수신 확인
  • FIN (Finish): 연결 종료
  • RST (Reset): 비정상적인 연결 리셋
  • PSH (Push): 데이터가 즉시 전달되도록 지시
  • URG (Urgent): 긴급 데이터가 포함되어 있음을 나타냄

2-Way Handshaking 를 하지않는 이유?

신뢰성을 보장하기에 충분하지 않기 때문

두 호스트가 동시에 연결을 시도하면, 연결이 가능한가요? 가능하다면 어떻게 통신 연결을 수행하나요?

서로의 SYN 패킷을 교환하면서 연결이 설정될 수 있음 === Simultaneous Open
서로 SYN 패킷 전송, SYN-ACK 패킷 전송, ACK 전송, 연결

SYN Flooding

DoS(Denial of Service) 공격의 일종
대량의 SYN 패킷을 서버로 보내 서버의 자원을 고갈시키는 공격
방지하기 위해 SYN 쿠키 등의 기술 사용해 자원을 할당하기 전에 클라이언트 응답을 기다리도록 할 수 있음

SYN쿠키?

SYN-ACK 응답을 생성할 때 패킷 순서 번호에 특별한 값(쿠키)을 넣음
쿠키 = 서버 비밀 키 + 클라이언트 IP 주소 + 포트번호 + 서버 IP 주소 등의 조합
서버에서 쿠키 값이 없다면 응답에 답변을 하지 않음.
이후 ACK 패킷을 받으면 쿠키를 확인하고 정상적인 연결 설정

3-Way Handshake의 속도 문제 때문에 이동 수를 줄이는 0-RTT 기법을 많이 적용하고 있습니다. 어떤 방식으로 가능한 걸까요?

0-RTT(Zero Round-Trip Time) : 클라이언트가 서버와의 이전 연결에 대한 정보를 저장해두었다가, 새로운 연결을 설정할 때 이 정보를 사용하여 핸드셰이크 과정을 생략하거나 단축하는 방식

  1. 클라이언트-서버 연결. 세션 재개를 위한 티켓, key 등 제공
  2. 재연결 시도 시 저장해둔 티켓, key + 0-RTT 데이터 + TLS 1.3 handshake 메세지 전송
    -> 0-RTT 데이터 : 클라이언트가 보내고자 하는 데이터. 티켓, key 등을 사용해 암호화됨
  3. 0-RTT 데이터 검증 -> 유효시 즉시 처리

어떻게 TCP 연결이 완료되기 전에 데이터가 전송될 수 있는가?
검증된 키가 있기 때문

TCP : 데이터 전송을 위한 신뢰성 있는 연결을 제공하는 전송 계층 프로토콜, 데이터의 순서와 무결성 보장

TLS(Transport Layer Security) : TCP 연결 위에서 동작, 데이터의 보안 강화, TCP가 데이터를 신뢰성있게 전송하는 동안 TLS는 이 데이터를 암호화해서 보안을 제공

0-RTT 기법은 TLS 계층에서의 최적화로, TCP 연결 자체는 여전히 3-way handshake로 설정되지만 TLS 계층에서 이미 검증된 키를 사용해 암호화된 데이터를 보낼 수 있음

profile
공부하면서 알게 된 여러가지 지식을 아카이빙합니다

0개의 댓글