오늘 하루, develop

#14. [4계층] TCP 통신과정 - 3 way handshake, 데이터 송수신 본문

네트워크

#14. [4계층] TCP 통신과정 - 3 way handshake, 데이터 송수신

toZoe 2024. 5. 7. 23:21

소개

TCP 통신과정에 대해 알아보자!


 STEP1. 연결 수립 과정 ( 3 Way Handshake )

 

TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정

1) 클라이언트가 서버에게 요청 패킷을 보내고

2) 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고

3) 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.

위의 3개 과정을 3 Way Handshake라고 부른다.

 

1) 클라이언트 -> 서버 : 요청 패킷

  • 출발지 포트는 아무거나, 목적지 포트는(80번. 웹이니까)
  • S flag 설정됨
  • 아래 2개 번호로 두 노드가 동기화
    • Sequence Number : 100 (랜덤한 값. 클라이언트 마음)
    • Acknowledgment : 0 

 

2) 서버 -> 클라이언트 : 요청을 받아들이는 패킷

 

  • 출발지 80, 목적지 포트는 클라이언트가 보냈던 포트
  • A, S flag 설정됨 (Syn + Ack)
  • Sequence Number : 2000 (랜덤한 값. 서버 마음)
  • Acknowledgment : 받은 Sequence 번호 + 1 ( 100 + 1 = 101 )

 

3) 클라이언트 -> 서버 : 최종 수락 패킷

  • 출발지 포트는 아무거나, 목적지 포트는(80번. 웹이니까)
  • A flag 설정됨
  • Sequence Number : 받은 ACK 번호 (처음 보낼 때만 랜덤 값)
  • Acknowledgment : 받은 Sequence 번호 + 1 ( 2000 + 1 = 2001 )

 

✅ Sequence Number, Acknowledgment는 보안상 중요

위와 같이 연결 수립 후 클라이언트가 요청을 보내는데, 이때 다른 사람이 이 두 숫자를 계산해서 알아낸 후 서버에 요청을 보낼 수 있음 (세션 하이재킹)

 

 

 STEP2. 데이터 송수신 과정

💡 TCP를 이용한 데이터 통신을 할 때 단순히 TCP 패킷만을 캡슐화해서 통신하는 것이 아닌 페이로드를 포함한 패킷을 주고 받을 때의 일정한 규칙

1. 보낸 쪽에서 또 보낼 때는 SEQ 번호와 ACK 번호가 그대로다.
2. 받는 쪽에서 SEQ번호는 받은 ACK번호가 된다.
3. 받는 쪽에서 ACK번호는 받은 SEQ번호 + 데이터 크기 

 

3 way handshake가 끝난 직후, 연결이 완료되었으므로 클라이언트가 다시 서버에게 패킷을 보낸다.

 

1) 클라이언트 -> 서버 : 데이터 요청

1번 규칙에 따라 S:101, A:2001

보내는 Data의 크기 = 100

 

2) 서버 -> 클라이언트 : 데이터 응답

2번 규칙에 따라 S:2001

3번 규칙에 따라 A: 201

 

3) 클라이언트 -> 서버 : 데이터를 잘 받았다는 답장

2번 규칙에 따라 S:201

3번 규칙에 따라 A: 2501

 


✅ 실습

  • 와이어샤크 패킷 캡처
  • 우클릭 Follow > TCP Stream : TCP가 서로 데이터 주고 받을 때 동기화한 내역을 뽑아서 봄

TCP 3 way handshake

 

3 way handshake가 끝나고, 클라이언트가 다시 서버에게 요청 보냄(이때부터가 찐 데이터 송수신)


출처

https://youtu.be/WseqBDo-j3Y?si=p8imAt9kITSdyyWp

https://youtu.be/0vBR666GZ5o?si=DII-88fGjKBrSHWH

https://youtu.be/Ah4-MWISel8?si=eWorsG9BzTPNRJeE