3way/4way handshake

Minuuu·2023년 5월 3일
0

네트워크

목록 보기
8/11
post-thumbnail

TCP 프로토콜 < 위 포스팅과 연계되는 글

3way handshake

TCP프로토콜에서 사용되는 연결 방식
데이터 전송을 시작하기 전에 클라이언트와 서버 사이의 연결을 설정하는 과정

3way handshake 과정

선행 지식

세그먼트에 포함되는 시퀀스 번호(SEQ)는 데이터의 시작점을 나타내는 값이며,
ACK 번호(ACK)는 다음에 수신할 데이터의 시작점
  1. A 클라이언트는 B서버에 연결요청을 보낸다.
    이 때 SYN 플래그를 설정하고, 임의의 시퀀스 번호를 지정한다
ex) SYN 플래그1, Seq=1000, ACK = 0
  1. 서버는 SYN 요청을 받고, SYN/ACK를 보낸다.
    이때, ACK 번호는 클라이언트가 보낸 SEQ 번호에 1을 더한 값이 되며, 서버 역시 임의의 SEQ 번호를 지정한다. 예를 들어, 서버가 SEQ 번호를 2000이라고 가정
서버 -> 클라이언트: SYN/ACK 플래그 1, Seq=2000, Ack=1001
  1. 클라이언트는 서버의 응답을 확인 후 실제 데이터 전송을 시작할 연결 설정
    클라이언트는 SYN/ACK 응답을 받고, ACK를 보냅니다. 이때, ACK 번호는 서버가 보낸 SEQ 번호에 1을 더한 값이 되며, SEQ 번호는 클라이언트가 보낸 SEQ 번호에 1을 더한 값이 됩니다. 예를 들어, 클라이언트가 SEQ 번호를 1001, ACK 번호를 2001이라고 가정해봅시다.
클라이언트 -> 서버: ACK 플래그1, Seq=1001, Ack=2001

이렇게 3-way handshake가 완료되면, 클라이언트와 서버가 연결된 것이다.


TCP 연결 후 데이터 전송

[클라이언트] Seq=1001, Ack = 2001, Data 376바이트 클라->서버
[서버] ACK=1377, Seq = 2001, Data 270바이트 서버 -> 클라
[클라이언트] Seq=1377, ACK = 2271 서버 전송

위와 같은 형식을 지니게 된다

왜 TCP의 시퀀스 번호를 임의로 선정하지?

이 Sequence Number가 예측 가능한 값으로 고정되어 있다면, 악의적인 공격자는 이를 이용하여 TCP 연결을 위조하거나 데이터를 변조할 수 있기에 임의로 선정한다.

4-way handshake

TCP 프로토콜을 사용해 세션을 종료할 때 사용되는 절차

  1. 연결을 종료하려는 클라이언트가 FIN 패킷을 전송. 이 패킷은 클라이언트가 데이터 전송을 완료했음을 서버에게 알림

  2. 서버는 FIN 패킷을 수신하고, 클라이언트가 전송한 데이터를 처리
    서버가 모든 데이터를 처리하면, ACK (Acknowledgment) 패킷을 보내 클라이언트가 FIN 패킷을 받았음을 알림

  3. 서버가 데이터 전송을 완료하면, 자신도 FIN 패킷을 전송.
    이 패킷은 서버가 데이터 전송을 마쳤음을 클라이언트에게 알림

  4. 클라이언트는 서버가 보낸 FIN 패킷을 수신하고, ACK 패킷을 보내 서버에게 FIN 패킷을 받았음을 알림

후기

3way handshake를 이용하면 SYN Flooding과 같은 디도스 문제가 발생할 수 있다
이에 대한 보안에 대해 더욱 공부해보는 시간을 가져야함을 느꼈다.

참고

https://www.quora.com/Why-in-a-TCP-sequence-is-a-number-taken-as-a-random-number-and-what-is-the-actual-number-at-the-start

profile
꾸준히 한걸음씩 나아가려고 하는 학부생입니다 😄

0개의 댓글