TCP의 원리 및 작동방법.

HJ seo·2022년 8월 28일
0

study

목록 보기
3/5

이전 글 링크

잡담

어어어어.. 하다보니 어느새 TCP의 원리에 대해 글을 쓴 지가 열흘이나 되었다.. 3일 전부터 쓰고 있는데 마무리를 어떻게 지으면 좋을지 계속 고민 & 수정 & 고민 & 수정을 반복하고 있는데 어째 고치고 다시 볼 때마다 뭔가 미진하다..(아직도 상대적으로 쬐끄마한 내 지식..ㅠㅠ) 하지만 너무 길게 늘어지는 것 같아 먼저 올려본다..!

TCP.

TCP 자체는 2개의 과정으로 이루어져 있다.
각각 두 컴퓨터를 연결하는 3-way handshake와 두 컴퓨터의 연결을 끊는 4-way handshake이다.

3-way handshake.

사용자의 컴퓨터가 서버 컴퓨터와 연결되는 과정이다. (각각 userserver로 부르겠다.)
과정은 차례대로 다음과 같다.(괄호 안은 userserver의 상태를 나타낸다.)

  1. From user to server.
  • (user : sync_sent)
  • userserver에 접속요청을 하는 첫 번째 과정이다. 간단히 userserver에 통신이 가능한지 묻는 과정이다. 이 과정에서 SYN 플래그라 불리는 임의의 랜덤한 숫자를 함께 전송한다.
  1. From server to user.
  • (server : sync_received)
  • serveruser에 통신이 잘 된다고 확인한 것을 보내는 과정이다. SYN 플래그에 1을 더해서 응답을 하고 ACK 플래그라 불리는 임의의 랜덤한 숫자를 함께 보낸다.
  1. From user to server.
  • (server: established)
  • userserver에 ACK를 답변하는 과정이다. 2번 과정과 마찬가지로 ACK에 1을 더해서 돌려보낸다.
  • (user : established)

3-way handshakeuserserver가 서로 상호작용이 되는지를 묻는 과정이기 때문에 위의 과정은 단순히 말하기 듣기(즉, 소통)으로 비유할 수 있다.

  1. 1번 과정은 userserver에게 들리는지 묻는 과정이고 그 확인을 위해 위에서 언급한 SYN를 보낸다.
  2. 2번 과정은 2가지가 결합된 과정으로 (1)serveruser에의 물음에 응답하는 과정과 (2)serveruser에게 들리는지 묻는 것이 합쳐진 과정이다.(때문에 SYN+1과 ACK 묶어서 보내게 된다.)
  3. 마지막 과정은 따라서 userserver의 물음에 답변을 하는 과정이다.(그 답변이 ACK+1이 된다.)

3-way handshake가 끝난 직후 userserver는 사용자가 요구하는 바에 따라 여러 데이터들을 주고받는다. 그 방법 역시 다양하나 이 글의 주제와 벗어나있기 때문에 생략한다. 이에 대한 한 예시로 이전 글의 2번 글을 참고하길..


4-way handshake.

사용자의 컴퓨터가 서버 컴퓨터와 연결을 종료하는 과정이다.
과정은 차례대로 다음과 같다.(위와 마찬가지의 규칙을 이용해서 쓴다.)

  1. From user to server.
  • (user : fin_wait1)
  • userserver에게 연결 종료를 요청하는 과정이다. 이때 확인을 위한 FIN 플래그를 보낸다.
  1. From server to user.
  • (server : close_wait)
  • serveruser에게 연결종료를 확인했다는 ACK 플래그를 보낸다.
  • (user : fin_wait2)
  1. From server to user.
  • (server : last_ack)
  • serveruser에게 이전에 요청한 모든 데이터의 전송이 끝난 후 연결을 종료할지를 묻는 FIN 플래그를 보낸다.
  1. From user to server.
  • (user : time_wait)
  • userserver가 할 모든 일이 끝났다는 것을 확인하고 ACK 플래그로 응답한다. 이 때 user는 추가적인 데이터가 들어오는 것에 대한 대기시간을 가지며 일정 시간 이후 user의 상태 는closed가 된다.
  • (server : closed)

4-way handshake는 통신이 끝난 이후 userserver가 서로 상호작용을 끊는 과정이다. 3-way handshake와 다르게 여러가지 문제가 발생할 수 있는 구간으로써 위와 같이 단순한 비유로는 설명하기가 쉽지 않다..
(잡담의 주요 이유가 여기였다.)


추가적으로 참고한 글.

링크제목주인장
1번 글TCP flag(URG, ACK, PSH, RST, SYN, FIN)MindGear
2번 글CLOSE_WAIT & TIME_WAIT 최종 분석kaon.park
profile
다양한 분야에 관심이 많은 초보 개발자 입니다.

0개의 댓글