[Network] 웹서버까지의 통신
업데이트:
이제 라우터와 외부망까지 알게 되었으니, 실제로 웹서버와 통신하는 과정을 생각해봅시다!
웹서버까지의 통신
외부망으로의 TCP통신을 정리한 것입니다.
네트워크는 다음과 같습니다.
-
클라이언트는 웹서버의 text로 된 주소(www.test.com) 밖에 모른다고 가정 하겠습니다.
-
클라이언트는 DNS서버를 통해서 웹서버의 IP주소를 획득합니다.
-
클라이언트는 웹서버에게 TCP SYN를 보냅니다.
-
이 때, 네트워크 주소를 확인해보니 외부망입니다.
-
외부망이기 때문에 웹서버의 MAC주소를 얻기 위해서는 라우터1(게이트웨이)의 MAC주소가 먼저 필요합니다.
-
하지만 웹서버는 라우터1이 바로 접근할 수 있는 네트워크에 있지 않기 때문에, 라우터1도 라우터2를 통해서 ARP request 를 브로드캐스트합니다.
-
웹서버를 제외한 나머지 호스트들은 해당 패킷을 버리게 되고, 웹서버만 해당 패킷을 받습니다.
-
웹서버는 자신의 ARP 캐시 테이블에 클라이언트의 IP주소와 MAC주소를 기록합니다.
-
웹서버 측에서 클라이언트로 ARP reply를 unicast합니다.
-
라우터들을 거쳐서 클라이언트로 전달되고 클라이언트는 웹서버의 MAC주소를 획득하고, ARP캐시 테이블에 기록합니다.
-
클라이언트와 웹서버가 서로의 IP주소와 MAC주소 획득 완료했습니다.
(아래 과정부터는 클라이언트와 웹서버 사이의 이동은 라우터를 거쳐서 감을 기본으로 합니다.)
-
클라이언트의 4계층부터 TCP 통신을 위한 데이터(SYN)를 제어 정보들을 붙여서(캡슐화) 웹서버로 보냅니다.
-
웹서버는 클라이언트로부터 받은 패킷을 제어 정보들을 떼고(역캡슐화) 데이터(SYN)를 확인합니다.
-
웹서버도 데이터(SYN, ACK)를 보내기 위해 제어 정보들을 붙여서(캡슐화) 클라이언트로 보냅니다.
-
클라이언트는 웹서버로부터 받은 패킷을 제어 정보들을 떼고(역캡슐화) 데이터(SYN, ACK)를 확인합니다.
-
클라이언트도 데이터(ACK)를 보내기 위해 제어 정보들을 붙여서(캡슐화) 웹서버로 보냅니다.
-
웹서버는 클라이언트로부터 받은 패킷을 제어 정보들을 떼고(역캡슐화) 데이터(ACK)를 확인합니다.
-
여기까지 하면, 3 way hand shaking이 완료된 것입니다.
-
이제 실제 클라이언트가 보내려고 했던 데이터(GET요청)를 7계층Application layer부터 시작하여 캡슐화 하여 웹서버로 보냅니다.
-
웹서버는 Application까지 올라가면서 역캡슐화를 하고 데이터(GET요청)를 받고, 웹서버의 4계층 TCP로부터 시작하여 클라이언트로 ACK를 보냅니다.
-
클라이언트가 ACK를 받는 것으로, 데이터 전송이 완료됩니다.
클라이언트의 GET요청까지만 정리한 것입니다.