TCP의 3-way HandShaking

이원찬·2023년 12월 2일
0

네트워크

목록 보기
2/8

이 글은 컴퓨터 네트워크 수업내용을 정리한 글임을 알림니다.

TCP는 핸드쉐이킹(악수)를 한다.

엥 왠 악수를 하지?

라 생각 할 수있는데

TCP의 신뢰성을 생각하면 핸드쉐이킹을 통해 데이터 전송을 해야만 신뢰성있는 데이터 전송이 일어 날수 있다는 것을 알수 있다.

간단한 그림으로 보는 3-way Handshaking

  1. 클라이언트는 서버에게 SYN과 SEQ(시퀸셜넘버) 를 보내고
  2. 서버는 잘 받았다는 의미로 ACK와 SEQ를 응답한다.
  3. 클라이언트는 서버의 응답을 잘 받았다는 의미로 ACK를 서버에게 보낸다.

이렇게 3번의 패킷 전송으로 연결을 확정하는 것이 3-way 핸드 쉐이킹이다.

엥 그러면 2-way 핸드쉐이킹은 안해?

여기서 다들 생각 할 수 있는게 왜 2번의 패킷으로 연결 설정을 하지 않느냐는 것이다.

오 ㅋㅋ 위 그림처럼 연결하면 걍 되는거 아님?
걍 두번으로 끝 ㅋㅋ ㄹㅇ 천잰듯

아니다... 두번의 패킷으로 연결설정할시 문제를 살펴보자

2-way HandShaking의 문제

1. Half-Open-Connection

먼저 반만 열린 연결 문제이다.

위 그림을 보면 클라이언트는 서버에게 연결요청을 하고 있지만 네트워크 상황이 좋지 않은지 그새를 참지 못하고 한번더 요청하는 것을 볼 수 있다.

하지만 어찌저찌 처음 보냈던 연결 요청을 서버가 받고 잘 받았다는 의미의 ACK를 응답 했다면

클라이언트는

  • 처음보낸 연결 요청 응답인가?
  • 아니면 두번째로 보낸 요청 응답인가?

알 방법이 없다...

따라서 자연스럽게 두번째로 보낸 연결 설정을 받았다는 것으로 인지하고 연결설정을 완료 했지만

두번째로 보낸 요청이 어찌저찌 서버에게 전송되어 필요하지도 않은 연결을 한번더 요청하게 되는것!!!!
엄청난 리소스 낭비가 될게 뻔하다...

2. Dup Data Accepted

두번째로 중복 데이터 접근 문제이다.

젠장할 멀쩡한 사진이 없다...

이것도 위 상황가 비슷하게 흘러간다.

클라이언트가 두번 연결요청하고 서버는 잘 받아서 연결 요청을 수락한다.
여기서!!!

  • 클라이언트는 데이터를 보냈을때 잘 받은지 몰라 한번더 보내게 된다.
  • 두번째로 보낸 연결 요청이 갔을때 한번더 보낸 데이터 패킷도 뒤에 도착하기 때문에 아까 받았던 데이터를 또 받게 된다...

half-open connection 문제가 있기 때문에 존재하는 문제라고도 할수있다.

결론

데이터 전송을 신뢰성있게 하려면 3-way HandShaking을 하자!!

profile
소통과 기록이 무기(Weapon)인 개발자

0개의 댓글