STUDY/Python

3-way handshake

nicesugi 2022. 9. 21. 16:05

3-way handshake

네트워크에서 클라이언트와 서버를 연결하고자 사용되는 3단계의 방법입니다.

 

 

예시로,

  1. A -> B : 내 말 들려?
    1. 연결 확인설정을 위하여 데이터 패킷(즉, 클라이언트가 통신에 사용하려는 임의의 시퀀스 넘버)보내는 단계입니다.
  2. B -> A : 잘 들려. 내 말은 들려?
    1. 1단계에서 받은 시퀀스 넘버에 1을 더한 ACK 값과
    2. B가 A로 부터 보내기 위한 다른 임의의 시퀀스 넘버를 클라이어트에 보냅니다.
    3. 이 시퀀스는 클라언트의 패킷을 올바르게 승인했음을 알려주고, 승인을 위해 자체 패킷을 전송합니다.
  3. A -> B : 잘 들려~~!
    1. 클라이언트가 시퀀스 번호(이 경우 Y+1)에 1을 추가하여 서버의 패킷을 확인하고 서버로 다시 보낼 차례입니다.
    2. 완료되면 연결이 생성되고 호스트와 서버가 통신할 수 있습니다.
  1.  

 

상세설명

1단계 / SYN (synchronize sequence numbers) /

서버와 클라이언트 간의 연결 설정

먼저 서버와 클라이언트 간의 연결이 설정되므로 대상 서버에는 새 연결을 수락하고 시작할 수 있는 열린 포트가 있어야 합니다. 

클라이언트 노드는 IP 네트워크를 통해 동일한 또는 외부 네트워크의 서버에 SYN(동기화 시퀀스 번호) 데이터 패킷을 보냅니다.

이 SYN 패킷은 클라이언트가 통신에 사용하려는 임의의 시퀀스 번호(예: X)입니다. 

이 패킷의 목적은 서버가 새로운 연결을 위해 열려 있는지 묻거나 추론하는 것입니다.

Connection을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다.

따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용할 가능성이 존재한다.

 

서버 측에서 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 숫자가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있어 이러한 문제 발생 가능성을 줄이기 위해 ISN을 무작위 난수로 사용하는 것이다.

 

2단계 / ACK (acknowledgements) /

서버는 클라이언트 노드에서 SYN 패킷을 수신합니다.

서버가 클라이언트 노드에서 SYN 패킷을 수신하면 응답하고 확인 확인(ACK(Acknowledgement Sequence Number) 패킷 또는 SYN/ACK 패킷)을 반환합니다. 이 패킷에는 두 개의 시퀀스 번호가 포함됩니다.

첫 번째는 서버가 클라이언트로부터 받은 시퀀스 번호(예: X+1)보다 하나 더 많이 설정한 ACK 1입니다.

두 번째는 서버에서 보낸 SYN으로, 다른 임의의 시퀀스 번호(예: Y)입니다.

이 시퀀스는 서버가 클라이언트의 패킷을 올바르게 승인했음을 나타내며, 이는 승인을 위해 자체 패킷도 전송합니다.

 

3단계 / ISN (Initial sequence numbers) /

클라이언트 노드는 서버로부터 SYN/ACK를 수신하고 ACK 패킷으로 응답합니다.

클라이언트 노드는 서버로부터 SYN/ACK를 수신하고 ACK 패킷으로 응답합니다. 다시 한 번, 각 측은 수신한 시퀀스 번호를 1씩 증가시켜 수신한 시퀀스 번호를 승인해야 합니다.

이제 클라이언트가 시퀀스 번호(이 경우 Y+1)에 1을 추가하여 서버의 패킷을 확인하고 서버로 다시 보낼 차례입니다.

이 과정이 완료되면 연결이 생성되고 호스트와 서버가 통신할 수 있습니다.

이 모든 단계는 연결의 안정성을 보장하기 위해 양쪽에서 시작된 일련 번호를 확인하는 데 필요합니다.

두 호스트 모두 상대방의 연결 매개변수를 확인해야 하므로 실제 데이터 전송 프로세스가 시작되기 전에 누락되거나 순서가 잘못된 세그먼트를 빠르게 감지할 수 있습니다.

반응형

'STUDY > Python' 카테고리의 다른 글

기술면접 스터디(9월27일 : 관심사 분리 | SOLID 원칙)  (0) 2022.09.27
Method | get vs post  (0) 2022.09.23
HTTP와 HTTPS를 차이점  (0) 2022.09.21
OSI 7계층  (0) 2022.09.20
TODO 0901  (0) 2022.09.01