TCP/IP 연결하는 과정

darby·2022년 12월 5일
0

CS

목록 보기
11/12
  • 통신자와 수신자가 만약 브라우져를 통해 데이터를 주고 받는다면 네크워크 통신쪽 에서는 TCP/IP 를 연결해야한다.
  • 그 이유는 브라우져는 HTTP 프로토콜을 사용하는데 HTTP은 TCP/IP를 지향하기 때문이다.
  • 이해하기 편하게 전반적인 흐름을 정리해서 적을 건데 좀 길 수도 있어서 오늘의 주제에 맞는 용어를 미리 적어보겠다.
  • 3way HandShaking4way HandShaking 인데 나중에 이 두개의 용어가 뜻 하는게 무엇인지 살펴보자

전반적인 흐름 정리

  • 이해하기 편하게 네크워크 흐름에 대해서 적어보면서 TCP/IP 연결 방법을 설명하겠다.
  • 주소창에 사용자가 www.google.com 을 검색 한다고 가정해보자. 이때 발생하는 흐름에 대해 적어보겠다.
  • 밑에 있는 그림을 보면 Layer라는 단어가 보인다. 그렇다 이 그림은 TCP/IP 4계층에 대한 그림이다.
  • 그리고 , 각각 계층에서 서로다른 프로토콜을 사용하고 있다. 위 그림에선 Transport Layer에서 TCP 프로토콜을 사용하고, Internet Layer에서 IP 프로토콜 사용하고 있다.
  • 그리고 각각의 헤더에서 어떤게 중요한지 살펴보자
  • 각각의 계층엔 데이터를 통신자측에서 수신자측 으로 보내질 때 통관문인 계층에 맞는 헤더가 존재하다. OSI 7계층 / TCP/IP 4계층 에서 설명했을 것이다 참고하면 좋을 듯 하다.
  • 먼저, Application Layer 에는 HTTP Requset 헤더가 들어간다.
  • 이후 Transport Layer 에느 TCP 헤더가 들어간다.

  • TCP 헤어데엇 중요하게 볼 것은 SP(출발지 포트번호)와 DP(목적지 포트 번호)이다.
  • 출발지 포트번호는 내 컴퓨터에서 만든 소켓의 포트 번호이므로, 내 컴퓨터는 알고있으며, 목적지 포트 번호 또한 알고있다. www.google.com은 80번 port를 사용한다.
  • 이후 Internet Layer 에는 IP 헤더가 들어간다.

  • IP헤더에서 중요하게 볼 것은 SA(출발지 IP주소)와 DA(목적지 IP주소) 이다.
  • 현재, www.google.com 이라는 도메인 정보만 알고 있기에 나의 IP 주소는 알고 있지만, 목적지의 IP 주소는 아직 모른다.
  • 그래서 해당 구글 도메인 정보의 IP를 알아 내긴위세서 DNS 서버에 쿼리를 보내소 IP주소를 응답 받아야한다.
  • 간단히 DNS는 등록된 URL의 IP주소가 저장되어 있는 서버를 가르킨다. 더 자세한 내용은 따로 알아보자.
  • 이후 , Network Access Layer 에는 Etherenet 헤더가 들어간다.

  • Ethernet 헤더에서 중요하게 볼 것은 SA(출발지 MAC 주소) 와 DA(목적지 MAC 주소) 이다.
  • 여기서 목적지 MAC 주소는 , 구글의 MAC 주소가 아닌,
  • 물리적으로 연결된, 공유기 (라우터) 또는 게이트웨이의 MAC 주소를 의미한다.
  • 하지만 이 MAC주소를 알아내기 위해선 , ARP 프로토콜을 사용해야 한다.
  • ARP 프로토콜은 따로 알아보길 바란다.
  • ARP 프로토콜을 사용해 MAC 주소까지 알아 냈다고 가정하자
  • 이후 패킷(데이터)을 전송하는데 TCP는 연결지향성 프로토콜이기 때문에 송신자측과 수신자측의 서로 연결되는 작업이 필요하다.
  • 이 작업을 3-way-handshaking 이라 부른다.

3 way handShking

  • 3way HandShaking을 수행하기 위해서는 , 앞어 TCP 헤더에 표시한 플래그들이 사용되며,이러한 플래그들을 컨트롤 비트라고 부른다.
  • 3way HandShaking 은 SYN(동기화) 과 ACK(승인) 으로 진행된다.
  • 먼저, 클라인트는 서버에게 접속을 요청하는 SYN 패킷을 보낸다
  • 서버는 SYN 패킷을 받고, 클라이언트에게 요청을 수락한다는 ACK 와 SYN 플래그가 설정된 패킷을 보낸다.
  • 클라이언트는 다시 서버에게 ACK 패킷을 보낸다.
  • 이제 3-way-handshaking 으로 기기 간 연결이 성립되었으니 데이터 통신이 가능해진다.
  • 이제 라우팅을 통해 패킷을 목적지 서버에게 전송한다.
  • 패킷은 Network Access Layer 의 MAC 주소와 Internet Layer 의 IP 주소로 라우팅을 반복해 목적지 구글 서버까지 도착한다
  • 먼저, 구글 서버가 받은 패킷 내부 Transport Layer의 목적지 포트 번호에는 80번이 적여있다.
  • 따라서, Transport Layer는 80번 포트를 사용하고 있는 Application Layer에 데이터를 전송한다
  • 그후, Application Layer 는 HTTP Request 데이터를 받아 매핑된 GET 요청을 처리한다
  • 이후 적절한 HTML을 클라이언트에게 응답한다
  • 따라서, 클라이언트는 라우팅을 통해 전달 받은 www.google.com 에 해당하는 HTML을 브라우저에 띄우게 된다.
  • 이제 HTTP 요청 과 응답 과정이 끝났으므로 통신자와 수신자측의 연결을 종료해야 한다.
  • 이러한 작업을 4 Way Handshaking 이라 부른다. 총 4단계로 진행된다.

4 Way Handshaking

  • 여기서도 앞서 3 Way Handshaking 처럼 TCP 컨트롤 비트가 사용된다. 그리고 해당 단계에서는 ACK, FIN 플래그가 사용된다.
  • 4 Way Handshaking 을 설명하자면
  • 먼저, 클라이언트는 서버에게 연결 종료하겠다는 의미인 FIN 패킷을 전송한다
  • 서버는 클라이언트에게 ACK 패킷을 보내고, 클라이언트가 보냈던 요청들에 대해 마저 응답을 보낸다.
  • 이후, 서버는 응답이 끝나면 클라이언트에게 FIN 패킷을 전송한다
  • 클라이언트는 서버의 통신 종료를 확인한 뒤 , 서버에게 ACK 패킷을 전송하고 연결이 종료된다.
  • 하지만, 서버가 클라이언트에게 FIN을 보내는 과정에서 한가지 문제가 발생할 수 있다.
  • 서버가 클라이언트에게 FIN을 보내기 전에, 이전에 서버가 클라이언트에게 응답 했던 패킷이 FIN 보다 늦게 도착할 수 있다.
  • 그렇게 되면, 클라이언트가 서버의 일부 응답을 받지 못하게 된다.
  • 따라서, 클라이언트는 서버로부터 FIN 패킷을 받고, ACK 패킷을 보낸 뒤에도 일정 시간동안 혹시나 도착하지 않은 잉영 패킷을 기다린다.
  • 이렇게 4 Way Handshaking 이우에도 소켓을 닫지 안호 잉여 패킷을 기다르는 상태를, TIME_WAIT 라고 부른다.
  • 이로서 통신자와 수신자의 네크워크 통신은 끝나게된다.

[REFERENCE]

참조 1

0개의 댓글