해당 글은 한양대학교 이석복 교수님의 과목 "컴퓨터 네트워크"를 공부하고 작성한 글입니다. 해당 강의를 직접 수강하시려면 다음 링크를 참고해주세요.
1. 네트워크 계층
네트워크 계층은 5개로 구분되어 있다.
네트워크 계층별로 갖는 대표적인 프로토콜을 정리해보면 다음과 같다.
- Application 계층
- 대표 프로토콜: HTTP
- Transport 계층
- 대표 프로토콜: TCP/UDP (TCP가 가장 대표적이다)
- Network 계층
- 대표 프로토콜: IP
- Data link 계층
- 대표 프로토콜: WIFI, LTE/3G, Ethernet
- Physical 계층
1) 애플리케이션 계층(Application layer)
애플리케이션 계층은 우리에게 가장 친숙한 계층이다.
애플리케이션 계층은 우리 눈에 보이는 프로세스를 말한다.
우리가 C언어로 프로그램을 작성하고 컴파일, 실행하면 프로세스가 생성이 된다.
실질적으로 우리가 프로그램이 실행되었다고 생각하는 존재가 바로 프로세스이다.
(1) 서버와 클라이언트
네트워크 구조 중 하나로 클라이언트 서버 구조를 빼놓을 수 없다.
클라이언트 서버 구조에서는 정보를 제공하는 서버 측과 제공받는 클라이언트로 나누어진다.
서버가 가게를 여는 주인 쪽이라면 클라이언트는 그 가게에 찾아오는 손님 쪽이다.
서버의 특징은 IP 주소가 고정된다는 점이다.
인터넷 상의 모든 컴퓨터는 각자 주소를 갖게 되는데 그게 바로 IP이다.
서버는 고정된 IP 주소를 가져야만 한다.
웹 사이트에 들어간다고 할 때 주소가 매일 바뀐다면 사용자는 그 웹 사이트에 접속하기 어려울 것이다.
반면 클라이언트는 IP가 가변이다.
IP 주소가 바뀌어도 서버의 IP를 알고 있으므로 접속할 수 있기 때문이다.
따라서 클라이언트는 매번 IP 주소가 바뀌어도 충분히 접속할 수 있다.
(2) 프로세스 간 통신(IPC; inter-process communication)
하나의 컴퓨터에는 여러 개의 프로세스가 있을 수 있다.
경우에 따라 프로세스 간에 데이터를 공유해야 하는 일이 생길지도 모른다.
이 경우, 같은 호스트 사이에서 프로세스 간에 통신을 하는 것을 프로세스 간 통신(IPC)이라 한다.
프로세스 사이에 파이프를 연결해서 통신할 수 있다.
반면 네트워크는 서로 다른 호스트의 프로세스 간에 통신하는 것을 말한다.
이때 프로세스 간 통신(IPC)처럼, 네트워크는 앱(App)과 앱(App) 사이에 소켓으로 연결하게 된다.
(3) 소켓(socket)
프로세스는 프로세스별로 소켓을 만들어서, 소켓을 통해 통신한다.
클라이언트 프로세스에 있는 소켓에서 메시지를 보내면, 서버 프로세스에 있는 소켓에서 그 메시지를 받는 식이다.
소켓은 통신을 위한 '문'의 역할을 한다.
프로세스가 다른 호스트의 프로세스에 메시지를 보내거나 받기 위해서는 소켓을 거쳐야 한다.
소켓으로 통신할 때에는, 어느 소켓과 통신할지를 먼저 지정해야 한다.
소켓은 어떻게 다른 호스트, 다른 프로세스를 식별할까?
1. 어떤 컴퓨터와 통신할까?
-> 호스트를 식별하기 위해 IP Address를 사용한다.
2. 어떤 프로그램, 어떤 소켓, 어떤 프로세스와 통신할까?
-> 포트(Port) 번호를 통해 확인한다.
같은 컴퓨터여도 어떤 프로그램으로 가야 하는지를 분간해야 한다면, 포트 번호를 통해 소켓을 확인한다.
하나의 디바이스에는 여러 프로세스가 열려 있을 수 있고, 네트워크를 사용하는 프로세스도 여러 개가 있다.
예를 들어 스마트폰에서라면, 유튜브에서 다운로드한 영상이 ①웹 브라우저로 가야 할지, ②플레이 스토어로 가야 할지, ③유튜브로 가야 할지 구분하기 위해 포트를 사용한다.
인터넷에 접속하는 경우를 보자.
도메인 주소 www.tistory.com을 브라우저 주소창에 입력하면 티스토리 페이지에 접속할 수 있다.
이론적으로 네트워크에서는 IP Address와 Port를 통해 호스트의 주소와 프로세스 주소를 확인한다. 따라서 IP Address와 Port 번호 모두 필요하다.
그러나 도메인(domain) 주소는 IP Address만을 의미하고 Port 번호는 따로 지정하지 않는다.
왜냐하면 포트 번호가 지정되어 있지 않으면 공통된 번호 80번으로 지정되기 때문이다.
서버는 주소가 고정되어 있어야 하는데, IP 주소만으로도 충분히 모든 웹사이트를 식별하기에 충분하므로 웹에서는 필수적으로 포트 번호를 지정할 필요가 없다.
(그렇지만 www.tistory.com:80처럼 포트 번호를 지정할 수도 있다.)
2) 네트워크 계층의 기능
네트워크 계층 구조에서 하위 계층은 상위 계층에 기능을 제공해주는 역할을 한다.
예를 들어 상대적으로 하위 계층인 Transport 계층은 상위 계층인 Application 계층에 고유한 기능을 제공해준다.
TCP, UDP 등의 프로토콜은 데이터 무결성(data integrity)을 보장하여 데이터에 오류가 없도록 한다.
2. HTTP
1) HTTP의 의미와 개념
HTTP: hypertext transfer protocol
하이퍼텍스트(hypertext)는 웹 브라우저에서 볼 수 있는 웹 페이지이다.
HTTP는 하이퍼텍스트를 전달하는 프로토콜이다.
쉽게 말해서 웹에서 웹 페이지를 전송하기 위한 프로토콜이라는 것이다.
웹에서 클라이언트와 서버는 HTTP request와 HTTP response 이 두 개의 메시지만으로 통신하게 된다.
위 사진에서 아파치 웹 서버(Apache Web server)에 PC와 아이폰이 연결되어 있다.
클라이언트인 PC와 아이폰은 서버 측에 HTTP request 메시지를 보내고, 서버에서는 클라이언트에 HTTP response를 보내어 통신하고 있다.
이 두 메시지(request, response)는 의미 그대로 각각 파일을 요청(request)하고 필요한 파일을 보내어 응답(response)하는 기능을 한다.
- HTTP request (클라이언트-> 서버): 필요한 하이퍼텍스트 파일 이름을 적어 보낸다.
- HTTP response (서버-> 클라이언트): 요청한 하이퍼텍스트 파일의 내용을 전송한다.
2) HTTP의 특징
HTTP에는 두 가지 특징이 있다.
- TCP를 사용한다.
- 클라이언트가 웹에 접속하면 TCP 연결을 생성하게 된다.
- 상태가 없다(stateless).
- HTTP에서는 따로 상태를 기억하지 않는다.
- 서버는 클라이언트 상태에 대한 정보를 기억하지 않는다.
3) HTTP의 연결 방법
HTTP는 클라이언트와의 연결을 유지하는지에 따라 두 가지 연결 방법으로 나눌 수 있다.
(1) 비지속형(non-persistent) HTTP
비지속형 HTTP에서는 TCP 연결을 계속 유지하지 않는다.
한번 클라이언트와 연결되고 데이터를 주고받으면 바로 TCP 연결을 끊는다.
(2) 지속형(persistent) HTTP
반면 지속형 HTTP에서는 TCP 연결을 계속 유지한다.
연결되어도 바로 TCP가 끊기지 않으며, 클라이언트나 서버 중 한쪽에서 TCP 연결을 끊어야만 연결이 끝난다.
(3) 예시
예를 들어 클라이언트가 웹 페이지에 접속해서 사과 이미지 파일을 가져온다고 하자.
비지속형(non-persistent) HTTP라면 TCP 연결을 구축하고, 사과 이미지를 가져오고, TCP 연결을 끊는다.
음악 데이터가 필요하다면 다시 TCP 연결을 구축하고, 음악을 가져오고, TCP 연결을 끊는다.
지속형(persistent) HTTP라면 웹 페이지에 접속한 이후에는 계속 TCP 연결이 유지된다.
따라서 접속해서 한 번 TCP 연결을 구축하고 나면 사과 이미지 파일뿐만 아니라 음악, 영상 등 TCP 연결을 끊지 않고 계속해서 통신할 수 있다.
만약 연결을 끊고 싶다면 서버나 클라이언트 중 한쪽에서 TCP 연결을 끊으면 된다.
출처
이석복 "컴퓨터 네트워크" 강의자료
'컴퓨터과학 > 네트워크' 카테고리의 다른 글
3-3. 전송(Transport) 계층: 파이프라인 프로토콜 (0) | 2021.10.14 |
---|---|
3-2. 전송(Transport) 계층: 신뢰성 있는 데이터 전송(RDT) (0) | 2021.10.10 |
3-1. 전송(Transport) 계층: 다중화(Multiplexing)/역다중화(Demultiplexing) (0) | 2021.10.10 |
2. 소켓 프로그래밍 (0) | 2021.10.06 |
1-1. 컴퓨터 네트워크 기본 1 (0) | 2021.10.01 |
댓글