3-way handshaking 과 4-way handshaking

이원석·2022년 3월 29일
0

Network

목록 보기
2/7

3-way handshaking (Connection Establishment)


3-way handshaking 과정은, 패킷의 전달하기 위한 목적지와 수신지를 확실히 하여 정확한 정보의 전송을 보장하기 위해 세션을 수립하는 과정을 의미합니다. 연결 설정요청 flag인 SYNACK를 주고받습니다.

  • SYN : 연결 설정 요청. 양쪽이 보낸 최초 패킷에만 SYN 플래그 설정을 한다.
  • ACK : 응답 유효여부 설정. 최초의 SYN 패킷 이후 모든 패킷은 ACK 플래그 설정 필요. 데이터를 잘 받았으면 긍정 응답으로 ACK(SYN+1) 전송
  • FIN : 연결 종료 의사 표시

  1. 클라이언트는 서버에 접속을 요청하는 SYN(A) 패킷을 전송한다.
  2. 서버는 클라이언트의 요청인 SYN(A)를 받고 클라이언트에게 요청을 수락한다는 ACK(A+1)와 SYN(B)가 설정된 패킷을 전송한다.
  3. 클라이언트는 서버의 수락 응답인 ACK(A+1)와 SYN(B) 패킷을 받고 ACK(B+1)를 서버로 보내면 연결이 성립된다.

[클라이언트] - 연결요청 A ->
[서버] - 연결요청 A 확인. 수락 여부 A+1, 연결요청 B ->
[클라이언트] - 연결요청 B 확인. 수락 여부 B+1 ->
[서버]




4-way handshaking (Connection Termination)


  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다.
  2. 서버는 클라이언트의 요청(FIN)을 받고 수락 여부에 대한 메시지로 ACK를 보낸다.
    2-1. 데이터를 모두 보낼때 까지 TIME_OUT이 된다.
  3. 서버에서 데이터를 모두 보내고 통신이 끝났으면 클라이언트에게 연결을 종료하겠다는 FIN 플래그를 전송한다.
  4. 클라이언트는 서버의 요청(FIN)을 확인헀다는 메시지로 ACK를 보낸다.
  5. 서버는 클라이언트의 ACK 메시지를 받고 소켓 연결을 Close 한다.
  6. 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을것을 대비해 세션을 남겨놓고 잉여 패킷을 기다린다. (TIME_WAIT)



SYN 패킷의 Sequence Number(순번) 지정


처음 클라이언트에서 서버로 SYN 패킷을 보낼 때, Sequence Number에는 난수가 담겨집니다. 초기 Sequence Number를 ISN 이라고 합니다.
ISN이 0부터 시작하지 않고 난수를 생성하여 number를 설정하는 이유는, 클라이언트와 서버가 Connectino을 맺을때 사용하는 포트(port)는 유한한 범위 내에서 사용하고 시간이 지나 사용이 끝남에 따라 재사용됩니다. 따라서 서버측에서는 패킷의 SYN을 보고 패킷을 구분할 때 난수가 아닌 순차적 Number가 전송된다면 이전의 Connection으로부터 오는 패킷으로 인식할 수 있습니다. 이러한 문제가 발생할 가능성을 줄이기 위해 난수로 ISN을 설정합니다.



[참고문헌]
https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md
https://sjlim5092.tistory.com/35
https://asfirstalways.tistory.com/356

0개의 댓글