[Network] 웹서버까지의 통신

업데이트:


이제 라우터와 외부망까지 알게 되었으니, 실제로 웹서버와 통신하는 과정을 생각해봅시다!


웹서버까지의 통신

외부망으로의 TCP통신을 정리한 것입니다.

네트워크는 다음과 같습니다.

image


  1. 클라이언트는 웹서버의 text로 된 주소(www.test.com) 밖에 모른다고 가정 하겠습니다.

  2. 클라이언트는 DNS서버를 통해서 웹서버의 IP주소를 획득합니다.

  3. 클라이언트는 웹서버에게 TCP SYN를 보냅니다.

  4. 이 때, 네트워크 주소를 확인해보니 외부망입니다.

    image

  5. 외부망이기 때문에 웹서버의 MAC주소를 얻기 위해서는 라우터1(게이트웨이)의 MAC주소가 먼저 필요합니다.

  6. 하지만 웹서버는 라우터1이 바로 접근할 수 있는 네트워크에 있지 않기 때문에, 라우터1도 라우터2를 통해서 ARP request 를 브로드캐스트합니다.

  7. 웹서버를 제외한 나머지 호스트들은 해당 패킷을 버리게 되고, 웹서버만 해당 패킷을 받습니다.

  8. 웹서버는 자신의 ARP 캐시 테이블에 클라이언트의 IP주소와 MAC주소를 기록합니다.

  9. 웹서버 측에서 클라이언트로 ARP reply를 unicast합니다.

  10. 라우터들을 거쳐서 클라이언트로 전달되고 클라이언트는 웹서버의 MAC주소를 획득하고, ARP캐시 테이블에 기록합니다.

  11. 클라이언트와 웹서버가 서로의 IP주소와 MAC주소 획득 완료했습니다.

    (아래 과정부터는 클라이언트와 웹서버 사이의 이동은 라우터를 거쳐서 감을 기본으로 합니다.)

  12. 클라이언트의 4계층부터 TCP 통신을 위한 데이터(SYN)를 제어 정보들을 붙여서(캡슐화) 웹서버로 보냅니다.

  13. 웹서버는 클라이언트로부터 받은 패킷을 제어 정보들을 떼고(역캡슐화) 데이터(SYN)를 확인합니다.

  14. 웹서버도 데이터(SYN, ACK)를 보내기 위해 제어 정보들을 붙여서(캡슐화) 클라이언트로 보냅니다.

  15. 클라이언트는 웹서버로부터 받은 패킷을 제어 정보들을 떼고(역캡슐화) 데이터(SYN, ACK)를 확인합니다.

  16. 클라이언트도 데이터(ACK)를 보내기 위해 제어 정보들을 붙여서(캡슐화) 웹서버로 보냅니다.

  17. 웹서버는 클라이언트로부터 받은 패킷을 제어 정보들을 떼고(역캡슐화) 데이터(ACK)를 확인합니다.

  18. 여기까지 하면, 3 way hand shaking이 완료된 것입니다.

    image

  19. 이제 실제 클라이언트가 보내려고 했던 데이터(GET요청)를 7계층Application layer부터 시작하여 캡슐화 하여 웹서버로 보냅니다.

  20. 웹서버는 Application까지 올라가면서 역캡슐화를 하고 데이터(GET요청)를 받고, 웹서버의 4계층 TCP로부터 시작하여 클라이언트로 ACK를 보냅니다.

  21. 클라이언트가 ACK를 받는 것으로, 데이터 전송이 완료됩니다.

클라이언트의 GET요청까지만 정리한 것입니다.




카테고리:

업데이트: