네트워크

9. Application Layer & 전체 layer의 동작 방식

YJH3968 2021. 7. 2. 17:13
728x90

1. Application Layer

  • TCP segment의 payload section은 애플리케이션이 서로에게 보내고자 하는 모든 data이다.
  • ex) 웹 브라우저가 웹 서버에 연결했다면 웹 페이지의 내용, 넷플릭스 서버에 연결 중인 넷플릭스 앱의 스트리밍 비디오가 될 수 있다.
  • application layer에는 많은 protocol이 쓰이는데, 이들은 애플리케이션 유형에 따라 표준화돼 있다.
  • ex) web browser에는 Chrome, Internet Explorer, Safari 등이 있지만 어떤 protocol을 사용해야 한다.
    web server에는 Microsoft IIS, Apache, nginx 등이 있지만 역시 같은 protocol을 사용해야 한다.
    즉, 어떤 브라우저를 쓰든 간에, 어떤 서버와도 대화할 수 있어야 한다.  
    웹 트래픽에 대해 application layer protocol은 HTTP로 알려져 있다.
    모든 웹 브라우저와 웹 서버는 상호 동작을 위해 같은 HTTP protocol 사양을 사용해 통신해야 한다.
    FTP client도 역시 수많은 선택이 가능하지만, 모두 FTP protocol을 사용해야 한다.

2. OSI(Open Systems Interconnection) Model

  • 가장 엄격히 정의된 모델이다.
  • 7개의 layer를 가지고 있는데, 기존의 5개의 layer를 가지는 모델에서 transport layer와 application layer
    사이에 2개의 layer가 추가된다.
    • session layer : 5번째 layer로 실제 애플리케이션과 transport layer 사이의 통신을 촉진시킨다. 이는 캡슐화되지 않은 application layer data를 이 layer 아래 모든 layer에서 가져와 다음 layer로 넘겨주는 운영 체제의 일부이다.
    • presentation layer : 6번째 layer로 캡슐화되지 않은 application layer data를 애플리케이션이 이해할 수 있도록 해준다. 이는 data의 암호화 또는 압축을 다루는 운영체제의 일부이다.
  • 위의 과정에서 알 수 있듯이 캡슐화가 없다. 그래서 기존 모델에서는 이러한 기능 모두를 application layer에 합쳐 넣었다.

3. 전체 layer의 작동 방식

  • 세 개의 네트워크 A B C가 각각 10.1.1.0/24, 192.168.1.0/24, 172.16.1.0/24의 주소 공간을 가지고 Router A가 네트워크 A와 네트워크 B 사이에 있고 네트워크 A 위에서는 10.1.1.1, 네트워크 B 위에서는 192.168.1.254의 IP로 구성된다.
  • Router B가 네트워크 B와 네트워크 C 사이에 있고 네트워크 B 위에서는 192.168.1.1, 네트워크 C 위에서는 172.16.1.1의 IP로 구성된다.
  • 컴퓨터 1이 network A의 일부분이고 10.1.1.100의 IP 주소를 할당받은 클라이언트이다.
  • 컴퓨터 2가 network C의 일부분이고  172.16.1.100의 IP 주소를 할당받았고, port 80에서 수신 대기 중인 웹 서버를 가지고 있다.
  • 이 때 컴퓨터 1이 웹 브라우저를 열어 172.16.1.100을 주소 바에 입력하면 어떻게 될까?

 

  • 컴퓨터 1의 웹 브라우저는 172.16.1.100으로부터 웹 페이지를 받도록 지시가 내려옴을 알고 우선 local networking stack과 통신한다. 
  • * local networking stack은 운영 체제의 일부로 네트워크 기능을 다룬다.
  • 웹 브라우저는 172.16.1.100과 TCP 연결을 시작하고 싶다고 설명한다.
  • networking stack은 자신의 subnet을 조사하고 subnet이 10.1.1.0/24에 존재함을 알고 172.16.1.100으로 가기 위해선 다른 네트워크로 가야 함을 알게 된다.
  • 이제 컴퓨터 1은 원격 네트워크로 라우팅하기 위해서는 data를 게이트웨이로 보내야 함을 알고 게이트웨이가 10.1.1.1의 IP로 구성됨을 안다.
  • 그 다음 컴퓨터 1은 ARP table을 봐서 10.1.1.1의 MAC 주소를 결정하는데, 만약 못 찾으면 10.1.1.1의 IP 주소에 대한 ARP request(모두 F로 이루어진 하드웨어 광역 주소)를 만들어 local network의 모든 node로 보내진다.
  • router A가 ARP 메세지를 받으면 자기가 10.1.1.1의 IP 주소를 가진 컴퓨터라는 걸 알고 컴퓨터 1에게 자신의 MAC 주소(00:11:22:33:44:55)를 알려준다. 
  • 컴퓨터 1은 응답을 받고 이제 게이트웨이의 MAC 주소(하드웨어 주소)를 알아 packet을 만들기 시작한다.
  • 컴퓨터 1의 웹 브라우저는 외부 TCP 연결을 위해 외부 TCP port가 필요하므로 운영 체제는 임시 port 50000을 사용 가능하게 하고 socket을 열어 웹 브라우저를 그 port와 연결한다.
  • TCP 연결이기 때문에 networking stack은 data를 전송하기 이전에 상대 컴퓨터와의 연결을 시작하기 위한 
    TCP segment를 만들기 시작한다. TCP header의 모든 field를 채우는데, source port는 50000으로 destination port는 80, sequence number는 임의의 숫자로 해당 field에 채운다. 그리고 SYN flag를 설정하고 checksum이 계산해 해당 field에 채운다.
  • 이제 TCP segment가 networking stack의 IP layer로 넘어가 IP header를 채우는데, source IP, destination IP, TTL(기본값으로 64를 넣는다) 등을 넣고, TCP segment는 IP datagram의 payload에 들어간다. 그리고 IP datagram의 checksum을 계산해 IP datagram이 완성된다. 게이트웨이의 MAC 주소를 알고 있으니 이를 destination MAC 주소로 해서 Ethernet datagram을 완성시킨다. 물론 IP datagram은 Ethernet frame의 data payload에 넣고, checksum도 계산해주는 것은 같다.
  • 이제 Ethernet frame을 physical layer를 통해 보낸다. 즉, CAT6 cable을 통해 컴퓨터 1에 연결된 네트워크 인터페이스가 네트워크 스위치로 이진 데이터를 전압의 modulation을 이용해 보낸다.
  • 네트워크 스위치는 이 frame을 받아 MAC 주소를 조사하고 MAC 주소가 할당된 인터페이스가 뭔지 알아내 그 frame을 cable을 통해 해당 MAC 주소에 해당하는 인터페이스로 보낸다. router A는 frame을 받고 자신의 MAC 주소가 frame의 destination MAC 주소임을 안다.
  • 이제 router A는 frame의 목적지가 자기 자신임을 알고 frame을 받아 checksum을 계산해 검증한 뒤 Ethernet frame을 벗겨내고 IP datagram을 남겨둔다. 이제 IP datagram에 대해 checksum으로 검증한 뒤 목적 IP 주소를 검사하고 routing table에서 이 목적지를 찾아본다.
  • router A는 172.16.1.0/24 네트워크를 찾고 가장 빠른 길이 router B를 통한, 1번의 hop만큼 떨어진 길이라는 것을 안다.
  • IP datagram의 모든 data를 보고 TTL을 1만큼 줄인 후, checksum을 다시 계산해 새 IP datagram을 만든다. 
  • 이제 ARP table을 봐서 192.168.1.1의 IP를 가진 router B의 인터페이스의 MAC 주소를 알아내 목적 MAC 주소로, 자신의 네트워크 B 상의 인터페이스 MAC 주소를 source MAC 주소로 하여 Ethernet frame을 만들고 IP datagram을 data payload에 넣고 checksum을 계산해 network B로 보낸다.
  • 네트워크 A에서와 같이 네트워크 B는 이 frame을 router B로 보내고 router A에서와 같이 검증한 뒤 Ethernet frame 캡슐화를 제거하고 IP datagram에 대한 checksum을 수행한다.
  • 이제 목적 IP 주소를 조사하고 routing table을 보니 router B는 computer 2의 목적 주소가 locally connected network 상에 있음을 알고 TTL을 1 줄이고 새 checksum을 계산한 뒤 새 IP datagram을 만든다.
  • 새 IP datagram은 새 Ethernet frame에 캡슐화하고 source MAC 주소와 destination MAC 주소는 router B와 computer 2로 설정된다.
  • 이제 network C로 frame이 보내지고 스위치가 computer 2와 연결된 인터페이스로 frame을 보낸다. 드디어 computer 2가 frame을 받고 목적 MAC 주소가 자신의 MAC 주소임을 알고 Ethernet frame을 벗기고 IP datagram을 남겨둔다.
  • 이제 CRC를 수행해 checksum을 검증하고 목적 IP 주소도 조사해 자신의 IP 주소임을 확인한다.
  • IP datagram도 벗기고 TCP segment만 남겨둬 checksum을 검증하고 이제 목적 port를 조사한다.
  • computer 2의 networking stack은 port 80 상에 open socket이 있는지 확인한다.
  • socket은 LISTEN 상태였고 Apache 웹 서버에서 실행 중여서 열린 상태였다고 하자. 
  • computer 2는 이 packet이 SYN flag가 설정되어있음을 알고 sequence number를 조사해 저장한 뒤 차후에 응답을 만들 때 acknowledgement field에 이 sequence number를 넣을 대비를 한다.
728x90